├── .gitignore ├── Jagtaku_iPhoneApp_Prefix.pch ├── main.m ├── Tests ├── MockCalculator.h ├── CalcAssistTest.h ├── CalcTyperTest.h ├── CalcuratorTest.h ├── CalcTyperTest.m ├── MockCalculator.m ├── CalcAssistTest.m └── CalcuratorTest.m ├── Classes ├── CalcTyper.h ├── Jagtaku_iPhoneAppAppDelegate.h ├── FlipsideViewController.h ├── EnteringValue.h ├── CalcEngine.h ├── Calcurator.h ├── MainViewController.h ├── FlipsideViewController.m ├── CalcEngine.m ├── CalcTyper.m ├── Jagtaku_iPhoneAppAppDelegate.m ├── MainViewController.m ├── Calcurator.m └── EnteringValue.m ├── LogicTests-Info.plist ├── Jagtaku_iPhoneApp-Info.plist ├── FlipsideView.xib ├── MainWindow.xib ├── Jagtaku-iPhoneApp.xcodeproj └── project.pbxproj └── MainView.xib /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | .svn 3 | .DS_Store 4 | *.pbxuser 5 | *.mode1v3 6 | *.mode2v3 7 | *.perspectivev3 8 | *.pyc 9 | -------------------------------------------------------------------------------- /Jagtaku_iPhoneApp_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'Jagtaku-iPhoneApp' target in the 'Jagtaku-iPhoneApp' project 3 | // 4 | #import 5 | 6 | #ifndef __IPHONE_3_0 7 | #warning "This project uses features only available in iPhone SDK 3.0 and later." 8 | #endif 9 | 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, char *argv[]) { 12 | 13 | NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 14 | int retVal = UIApplicationMain(argc, argv, nil, nil); 15 | [pool release]; 16 | return retVal; 17 | } 18 | -------------------------------------------------------------------------------- /Tests/MockCalculator.h: -------------------------------------------------------------------------------- 1 | // 2 | // MockCalculator.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/23. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "Calcurator.h" 11 | 12 | @interface MockCalculator : NSObject { 13 | NSMutableDictionary *counts; 14 | } 15 | 16 | - (NSInteger)sentCount:(NSString *)key; 17 | - (void)resetCounts; 18 | 19 | @end 20 | 21 | -------------------------------------------------------------------------------- /Classes/CalcTyper.h: -------------------------------------------------------------------------------- 1 | // 2 | // CalcTester.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/21. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "Calcurator.h" 11 | 12 | 13 | @interface CalcTyper : NSObject { 14 | id _calc; 15 | } 16 | 17 | - (NSArray *)arrayWithType:(NSString *)types; 18 | - (void)type:(NSString *)types to:(id)calc; 19 | 20 | - (void)setCalc:(id)calc; 21 | - (void)type:(NSString *)types; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Classes/Jagtaku_iPhoneAppAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // Jagtaku_iPhoneAppAppDelegate.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class MainViewController; 12 | 13 | @interface Jagtaku_iPhoneAppAppDelegate : NSObject { 14 | UIWindow *window; 15 | MainViewController *mainViewController; 16 | } 17 | 18 | @property (nonatomic, retain) IBOutlet UIWindow *window; 19 | @property (nonatomic, retain) IBOutlet MainViewController *mainViewController; 20 | 21 | @end 22 | 23 | -------------------------------------------------------------------------------- /Classes/FlipsideViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FlipsideViewController.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol FlipsideViewControllerDelegate; 12 | 13 | 14 | @interface FlipsideViewController : UIViewController { 15 | id delegate; 16 | } 17 | 18 | @property (nonatomic, assign) id delegate; 19 | - (IBAction)done:(id)sender; 20 | @end 21 | 22 | 23 | @protocol FlipsideViewControllerDelegate 24 | - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller; 25 | @end 26 | 27 | -------------------------------------------------------------------------------- /Classes/EnteringValue.h: -------------------------------------------------------------------------------- 1 | // 2 | // EnteringValue.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/24. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface EnteringValue : NSObject { 13 | } 14 | 15 | - (void)typeDigit:(NSInteger)digit; 16 | - (void)typeDot; 17 | 18 | - (void)negative; 19 | 20 | - (void)clear; 21 | 22 | - (long long)integerValue; 23 | - (double)doubleValue; 24 | - (NSString *)displayValue; 25 | 26 | - (void)digitAssistWithPlaces:(NSInteger)places; 27 | 28 | @property(nonatomic, assign, readwrite) BOOL active; 29 | @property(nonatomic, assign, readwrite) BOOL closed; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /LogicTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.yourcompany.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | 20 | 21 | -------------------------------------------------------------------------------- /Classes/CalcEngine.h: -------------------------------------------------------------------------------- 1 | // 2 | // CalcEngine.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/21. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | extern NSString *CalcErrorDivideByZero; 12 | 13 | @interface CalcEngine : NSObject { 14 | double _result; 15 | } 16 | 17 | - (void)store:(NSNumber *)value; 18 | 19 | - (void)add:(NSNumber *)value; 20 | - (void)subtract:(NSNumber *)value; 21 | - (void)multiply:(NSNumber *)value; 22 | - (void)divide:(NSNumber *)value; 23 | 24 | - (void)negative; 25 | 26 | - (NSNumber *)result; 27 | 28 | - (void)clearResult; 29 | - (void)clearError; 30 | 31 | @property(nonatomic, assign, readwrite) BOOL error; 32 | @property(nonatomic, retain, readwrite) NSString *errorReason; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Tests/CalcAssistTest.h: -------------------------------------------------------------------------------- 1 | // 2 | // CalcAssistTest.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/27. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | // See Also: http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html 9 | 10 | // Application unit tests contain unit test code that must be injected into an application to run correctly. 11 | // Define USE_APPLICATION_UNIT_TEST to 0 if the unit test code is designed to be linked into an independent test executable. 12 | 13 | #import 14 | 15 | #import "Calcurator.h" 16 | #import "CalcTyper.h" 17 | 18 | 19 | @interface CalcAssistTest : SenTestCase { 20 | Calcurator *calc; 21 | CalcTyper *typer; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Tests/CalcTyperTest.h: -------------------------------------------------------------------------------- 1 | // 2 | // CalcTyperTest.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/21. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | // See Also: http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html 9 | 10 | // Application unit tests contain unit test code that must be injected into an application to run correctly. 11 | // Define USE_APPLICATION_UNIT_TEST to 0 if the unit test code is designed to be linked into an independent test executable. 12 | 13 | #import 14 | #import 15 | #import "Calcurator.h" 16 | #import "CalcTyper.h" 17 | 18 | @interface CalcTyperTest : SenTestCase { 19 | CalcTyper *typer; 20 | } 21 | 22 | @end 23 | 24 | -------------------------------------------------------------------------------- /Tests/CalcuratorTest.h: -------------------------------------------------------------------------------- 1 | // 2 | // CalcuratorTest.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | // See Also: http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html 9 | 10 | // Application unit tests contain unit test code that must be injected into an application to run correctly. 11 | // Define USE_APPLICATION_UNIT_TEST to 0 if the unit test code is designed to be linked into an independent test executable. 12 | 13 | #import 14 | #import 15 | 16 | #import "Calcurator.h" 17 | #import "CalcTyper.h" 18 | 19 | 20 | @interface CalcuratorTest : SenTestCase { 21 | Calcurator *calc; 22 | CalcTyper *typer; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Classes/Calcurator.h: -------------------------------------------------------------------------------- 1 | // 2 | // Calcurator.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "CalcEngine.h" 11 | #import "EnteringValue.h" 12 | 13 | @protocol Calculator 14 | 15 | - (void)typeDigit:(NSInteger)digit; 16 | - (void)typeDot; 17 | - (void)hitPlus; 18 | - (void)hitMinus; 19 | - (void)hitMul; 20 | - (void)hitDiv; 21 | - (void)hitEqual; 22 | - (void)clear; 23 | - (void)allClear; 24 | - (void)negative; 25 | - (void)digitAssistWithPlaces:(NSInteger)places; 26 | 27 | @end 28 | 29 | @interface Calcurator : NSObject { 30 | } 31 | 32 | @property(nonatomic, retain, readwrite) NSString *display; 33 | @property(nonatomic, retain, readwrite) CalcEngine *engine; 34 | @property(nonatomic, retain, readwrite) EnteringValue *entering; 35 | @property(nonatomic, retain, readwrite) NSString *currentOperator; 36 | 37 | @end 38 | 39 | -------------------------------------------------------------------------------- /Classes/MainViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MainViewController.h 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | @class Calcurator; 10 | 11 | @interface MainViewController : UIViewController { 12 | Calcurator *_calc; 13 | 14 | IBOutlet UILabel *resultDisplay; 15 | IBOutlet UILabel *enteringDisplay; 16 | } 17 | 18 | - (IBAction)showInfo:(id)sender; 19 | 20 | - (IBAction)digit0; 21 | - (IBAction)digit1; 22 | - (IBAction)digit2; 23 | - (IBAction)digit3; 24 | - (IBAction)digit4; 25 | - (IBAction)digit5; 26 | - (IBAction)digit6; 27 | - (IBAction)digit7; 28 | - (IBAction)digit8; 29 | - (IBAction)digit9; 30 | 31 | - (IBAction)period; 32 | - (IBAction)plusMinus; 33 | 34 | - (IBAction)ouku; 35 | - (IBAction)man; 36 | - (IBAction)sen; 37 | - (IBAction)hyaku; 38 | 39 | - (IBAction)plus; 40 | - (IBAction)minus; 41 | - (IBAction)mul; 42 | - (IBAction)div; 43 | 44 | - (IBAction)result; 45 | - (IBAction)clear; 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /Jagtaku_iPhoneApp-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | com.yourcompany.${PRODUCT_NAME:rfc1034identifier} 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | NSMainNibFile 28 | MainWindow 29 | 30 | 31 | -------------------------------------------------------------------------------- /Classes/FlipsideViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FlipsideViewController.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "FlipsideViewController.h" 10 | 11 | 12 | @implementation FlipsideViewController 13 | 14 | @synthesize delegate; 15 | 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor]; 20 | } 21 | 22 | 23 | - (IBAction)done:(id)sender { 24 | [self.delegate flipsideViewControllerDidFinish:self]; 25 | } 26 | 27 | 28 | - (void)didReceiveMemoryWarning { 29 | // Releases the view if it doesn't have a superview. 30 | [super didReceiveMemoryWarning]; 31 | 32 | // Release any cached data, images, etc that aren't in use. 33 | } 34 | 35 | 36 | - (void)viewDidUnload { 37 | // Release any retained subviews of the main view. 38 | // e.g. self.myOutlet = nil; 39 | } 40 | 41 | 42 | /* 43 | // Override to allow orientations other than the default portrait orientation. 44 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 45 | // Return YES for supported orientations 46 | return (interfaceOrientation == UIInterfaceOrientationPortrait); 47 | } 48 | */ 49 | 50 | 51 | - (void)dealloc { 52 | [super dealloc]; 53 | } 54 | 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /Classes/CalcEngine.m: -------------------------------------------------------------------------------- 1 | // 2 | // CalcEngine.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/21. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "CalcEngine.h" 10 | 11 | NSString *CalcErrorDivideByZero = @"Calc/Error/DivideByZero"; 12 | 13 | @implementation CalcEngine 14 | 15 | @synthesize error=_error; 16 | @synthesize errorReason=_errorReason; 17 | 18 | - (void)dealloc { 19 | self.errorReason = nil; 20 | 21 | [super dealloc]; 22 | } 23 | 24 | - (void)store:(NSNumber *)value { 25 | _result = [value doubleValue]; 26 | } 27 | 28 | - (void)add:(NSNumber *)value { 29 | _result += [value doubleValue]; 30 | } 31 | 32 | - (void)subtract:(NSNumber *)value { 33 | _result -= [value doubleValue]; 34 | } 35 | 36 | - (void)multiply:(NSNumber *)value { 37 | _result *= [value doubleValue]; 38 | } 39 | 40 | - (void)divide:(NSNumber *)value { 41 | double val = [value doubleValue]; 42 | if (val == 0.0) { 43 | self.error = YES; 44 | self.errorReason = CalcErrorDivideByZero; 45 | return; 46 | } 47 | 48 | _result /= val; 49 | } 50 | 51 | - (void)negative { 52 | if (_result != 0.0) { 53 | _result = -_result; 54 | } 55 | } 56 | 57 | - (NSNumber *)result { 58 | return [NSNumber numberWithDouble:_result]; 59 | } 60 | 61 | - (void)clearResult { 62 | _result = 0.0; 63 | } 64 | 65 | - (void)clearError { 66 | self.error = NO; 67 | self.errorReason = nil; 68 | } 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /Tests/CalcTyperTest.m: -------------------------------------------------------------------------------- 1 | // 2 | // CalcTyperTest.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/21. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "CalcTyperTest.h" 10 | #import "MockCalculator.h" 11 | 12 | @implementation CalcTyperTest 13 | 14 | - (void)setUp { 15 | typer = [[CalcTyper alloc] init]; 16 | } 17 | 18 | - (void)tearDown { 19 | [typer release]; 20 | } 21 | 22 | - (void)testType { 23 | 24 | NSArray *types = [typer arrayWithType:@"123+456="]; 25 | NSArray *bingo = [NSArray arrayWithObjects:@"1", @"2", @"3", @"+", @"4", @"5", @"6", @"=", nil]; 26 | STAssertEqualObjects(types, bingo, @"123+456="); 27 | 28 | MockCalculator *calc = [[[MockCalculator alloc] init] autorelease]; 29 | 30 | [typer type:@"123+456=" to:calc]; 31 | STAssertEquals([calc sentCount:@"1"], 1, @"1 is once"); 32 | STAssertEquals([calc sentCount:@"5"], 1, @"5 is once"); 33 | STAssertEquals([calc sentCount:@"+"], 1, @"+ is once"); 34 | STAssertEquals([calc sentCount:@"="], 1, @"= is once"); 35 | 36 | STAssertEquals([calc sentCount:@"7"], 0, @"7 was to typed."); 37 | 38 | [calc resetCounts]; 39 | 40 | NSString *keys = @"123456789+-*/=.cCN億万千"; 41 | [typer type:keys to:calc]; 42 | 43 | for (NSString *c in [typer arrayWithType:keys]) { 44 | STAssertEquals([calc sentCount:c], 1, c); 45 | } 46 | 47 | // もう一度全部うてみる 48 | [typer type:keys to:calc]; 49 | 50 | for (NSString *c in [typer arrayWithType:keys]) { 51 | STAssertEquals([calc sentCount:c], 2, c); 52 | } 53 | } 54 | 55 | @end 56 | 57 | -------------------------------------------------------------------------------- /Tests/MockCalculator.m: -------------------------------------------------------------------------------- 1 | // 2 | // MockCalculator.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/23. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "MockCalculator.h" 10 | 11 | 12 | @implementation MockCalculator 13 | 14 | - (id)init { 15 | if (self = [super init]) { 16 | counts = [[NSMutableDictionary dictionary] retain]; 17 | } 18 | return self; 19 | } 20 | 21 | - (void)dealloc { 22 | [counts release]; 23 | 24 | [super dealloc]; 25 | } 26 | 27 | - (NSInteger)sentCount:(NSString *)key { 28 | return [[counts valueForKey:key] intValue]; 29 | } 30 | 31 | - (void)resetCounts { 32 | [counts removeAllObjects]; 33 | } 34 | 35 | - (void)countForKey:(NSString *)key { 36 | NSInteger count = [self sentCount:key]; 37 | [counts setValue:[NSNumber numberWithInt:count + 1] forKey:key]; 38 | } 39 | 40 | - (void)typeDigit:(NSInteger)digit { 41 | [self countForKey:[NSString stringWithFormat:@"%d", digit]]; 42 | } 43 | 44 | - (void)typeDot { 45 | [self countForKey:@"."]; 46 | } 47 | 48 | - (void)hitPlus { 49 | [self countForKey:@"+"]; 50 | } 51 | 52 | - (void)hitMinus { 53 | [self countForKey:@"-"]; 54 | } 55 | 56 | - (void)hitMul { 57 | [self countForKey:@"*"]; 58 | } 59 | 60 | - (void)hitDiv { 61 | [self countForKey:@"/"]; 62 | } 63 | 64 | - (void)hitEqual { 65 | [self countForKey:@"="]; 66 | } 67 | 68 | - (void)clear { 69 | [self countForKey:@"c"]; 70 | } 71 | 72 | - (void)allClear { 73 | [self countForKey:@"C"]; 74 | } 75 | 76 | - (void)negative { 77 | [self countForKey:@"N"]; 78 | } 79 | 80 | - (void)digitAssistWithPlaces:(NSInteger)places { 81 | NSString *key; 82 | 83 | switch (places) { 84 | case 8: 85 | key = @"億"; 86 | break; 87 | case 6: 88 | key = @"B"; 89 | break; 90 | case 4: 91 | key = @"万"; 92 | break; 93 | case 3: 94 | key = @"千"; 95 | break; 96 | case 2: 97 | key = @"H"; 98 | break; 99 | default: 100 | key = [NSString stringWithFormat:@"DA%d", places]; 101 | break; 102 | } 103 | [self countForKey:key]; 104 | } 105 | 106 | @end 107 | 108 | -------------------------------------------------------------------------------- /Classes/CalcTyper.m: -------------------------------------------------------------------------------- 1 | // 2 | // CalcTester.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/21. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "CalcTyper.h" 10 | 11 | 12 | @implementation CalcTyper 13 | 14 | - (NSArray *)arrayWithType:(NSString *)types { 15 | NSMutableArray *components = [NSMutableArray array]; 16 | 17 | for (int i = 0; i < [types length]; i++) { 18 | unichar c = [types characterAtIndex:i]; 19 | [components addObject:[NSString stringWithCharacters:&c length:1]]; 20 | } 21 | 22 | return [NSArray arrayWithArray:components]; 23 | } 24 | 25 | - (void)type:(NSString *)types to:(id)calc { 26 | for (NSString *key in [self arrayWithType:types]) { 27 | unichar c = [key characterAtIndex:0]; 28 | switch (c) { 29 | case '0': 30 | case '1': 31 | case '2': 32 | case '3': 33 | case '4': 34 | case '5': 35 | case '6': 36 | case '7': 37 | case '8': 38 | case '9': 39 | [calc typeDigit:(c - '0')]; 40 | break; 41 | case '.': 42 | [calc typeDot]; 43 | break; 44 | case '+': 45 | [calc hitPlus]; 46 | break; 47 | case '-': 48 | case 0x2212: // − 49 | [calc hitMinus]; 50 | break; 51 | case '*': 52 | case 'x': 53 | case 0x00D7: // × 54 | [calc hitMul]; 55 | break; 56 | case '/': 57 | case 0x00F7: // ÷ 58 | [calc hitDiv]; 59 | break; 60 | case '=': 61 | [calc hitEqual]; 62 | break; 63 | case 'c': 64 | [calc clear]; 65 | break; 66 | case 'C': 67 | [calc allClear]; 68 | break; 69 | case 'N': 70 | case 0x00B1: // ± 71 | [calc negative]; 72 | break; 73 | case 0x4EBF: // 亿 74 | case 0x5104: // 億 75 | [calc digitAssistWithPlaces:8]; 76 | break; 77 | case 0x4E07: // 万 78 | case 0x842C: // 萬 79 | [calc digitAssistWithPlaces:4]; 80 | break; 81 | case 0x5343: // 千 82 | case 0x4EDF: // 仟 83 | [calc digitAssistWithPlaces:3]; 84 | break; 85 | case 'B': 86 | [calc digitAssistWithPlaces:6]; 87 | break; 88 | case 'M': 89 | [calc digitAssistWithPlaces:3]; 90 | break; 91 | case 'H': 92 | [calc digitAssistWithPlaces:2]; 93 | break; 94 | case ' ': 95 | break; 96 | default: 97 | NSAssert1(NO, @"INVALID CHARACTER '%@", key); 98 | break; 99 | } 100 | } 101 | } 102 | 103 | - (void)setCalc:(id)calc { 104 | _calc = calc; 105 | } 106 | 107 | - (void)type:(NSString *)types { 108 | [self type:types to:_calc]; 109 | } 110 | 111 | @end 112 | -------------------------------------------------------------------------------- /Classes/Jagtaku_iPhoneAppAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // Jagtaku_iPhoneAppAppDelegate.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "Jagtaku_iPhoneAppAppDelegate.h" 10 | #import "MainViewController.h" 11 | 12 | @implementation Jagtaku_iPhoneAppAppDelegate 13 | 14 | 15 | @synthesize window; 16 | @synthesize mainViewController; 17 | 18 | 19 | #pragma mark - 20 | #pragma mark Application lifecycle 21 | 22 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 23 | 24 | // Override point for customization after application launch. 25 | 26 | // Add the main view controller's view to the window and display. 27 | [self.window addSubview:mainViewController.view]; 28 | [self.window makeKeyAndVisible]; 29 | 30 | return YES; 31 | } 32 | 33 | 34 | - (void)applicationWillResignActive:(UIApplication *)application { 35 | /* 36 | Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 37 | Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 38 | */ 39 | } 40 | 41 | 42 | - (void)applicationDidEnterBackground:(UIApplication *)application { 43 | /* 44 | Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 45 | If your application supports background execution, called instead of applicationWillTerminate: when the user quits. 46 | */ 47 | } 48 | 49 | 50 | - (void)applicationWillEnterForeground:(UIApplication *)application { 51 | /* 52 | Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. 53 | */ 54 | } 55 | 56 | 57 | - (void)applicationDidBecomeActive:(UIApplication *)application { 58 | /* 59 | Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 60 | */ 61 | } 62 | 63 | 64 | - (void)applicationWillTerminate:(UIApplication *)application { 65 | /* 66 | Called when the application is about to terminate. 67 | See also applicationDidEnterBackground:. 68 | */ 69 | } 70 | 71 | 72 | #pragma mark - 73 | #pragma mark Memory management 74 | 75 | - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { 76 | /* 77 | Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. 78 | */ 79 | } 80 | 81 | 82 | - (void)dealloc { 83 | [mainViewController release]; 84 | [window release]; 85 | [super dealloc]; 86 | } 87 | 88 | @end 89 | -------------------------------------------------------------------------------- /Tests/CalcAssistTest.m: -------------------------------------------------------------------------------- 1 | // 2 | // CalcAssistTest.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/27. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "CalcAssistTest.h" 10 | 11 | 12 | @implementation CalcAssistTest 13 | 14 | - (void)setUp { 15 | calc = [[Calcurator alloc] init]; 16 | typer = [[CalcTyper alloc] init]; 17 | 18 | [typer setCalc:calc]; 19 | } 20 | 21 | - (void)tearDown { 22 | [typer release]; 23 | [calc release]; 24 | } 25 | 26 | - (void)testDigitAssist { 27 | [typer type:@"C 5万"]; 28 | STAssertTrue([calc.display isEqual:@"50000"], calc.display); 29 | 30 | [typer type:@"123"]; 31 | STAssertTrue([calc.display isEqual:@"50123"], calc.display); 32 | /* 33 | 34 | type 5 35 | 5 => 5 36 | type 億 37 | 5OOOOOOOO => 5OOOOOOOO + 0 38 | type 3 39 | 5OOOOOOO3 => 5OOOOOOOO + 3 40 | type 千 41 | 5OOOO3OOO => 5OOOOOOOO + 3OOO + 0 42 | type 2 0 43 | 5OOOO3O20 => 5OOOOOOOO + 3OOO + 20 44 | type 万 45 | 53020OOOO => 5OOOOOOOO + 3020OOOO + 0 46 | type 8 47 | 53O20OOO8 => 5OOOOOOOO + 3020OOOO + 8 48 | type 千 49 | 53O208OOO => 5OOOOOOOO + 3020OOOO + 8OOO + 0 50 | 51 | */ 52 | 53 | [typer type:@"C"]; 54 | [typer type:@"5"]; 55 | STAssertTrue([calc.display isEqual:@"5"], @"5 buf %@", calc.display); 56 | [typer type:@"億"]; 57 | STAssertTrue([calc.display isEqual:@"500000000"], @"5OOOOOOOO buf %@", calc.display); 58 | [typer type:@"3"]; 59 | STAssertTrue([calc.display isEqual:@"500000003"], @"5OOOOOOOO + 3 buf %@", calc.display); 60 | [typer type:@"千"]; 61 | STAssertTrue([calc.display isEqual:@"500003000"], @"5OOOOOOOO + 3OOO buf %@", calc.display); 62 | [typer type:@"2 0"]; 63 | STAssertTrue([calc.display isEqual:@"500003020"], @"5OOOOOOOO + 3OOO + 20 buf %@", calc.display); 64 | [typer type:@"万"]; 65 | STAssertTrue([calc.display isEqual:@"530200000"], @"5OOOOOOOO + 3020OOOO buf %@", calc.display); 66 | [typer type:@"8"]; 67 | STAssertTrue([calc.display isEqual:@"530200008"], @"5OOOOOOOO + 3020OOOO + 8 buf %@", calc.display); 68 | [typer type:@"千"]; 69 | STAssertTrue([calc.display isEqual:@"530208000"], @"5OOOOOOOO + 3020OOOO + 8OOO buf %@", calc.display); 70 | 71 | [typer type:@"C 億"]; 72 | STAssertTrue([calc.display isEqual:@"100000000"], calc.display); 73 | 74 | [typer type:@"C 億千"]; 75 | // C 0 76 | // 億 0 100000000 77 | // 千 0 100000000 1000 78 | STAssertTrue([calc.display isEqual:@"100001000"], calc.display); 79 | // 万 0 100000000 1000 10000 => 100000000 10000000 80 | [typer type:@"万"]; 81 | STAssertTrue([calc.display isEqual:@"110000000"], calc.display); 82 | 83 | [typer type:@"C 千億千万千11"]; 84 | STAssertTrue([calc.display isEqual:@"110000001011"], calc.display); 85 | 86 | [typer type:@"C 千万"]; 87 | STAssertTrue([calc.display isEqual:@"10000000"], calc.display); 88 | 89 | [typer type:@"C 1000万"]; 90 | STAssertTrue([calc.display isEqual:@"10000000"], calc.display); 91 | 92 | [typer type:@"C 2千万"]; 93 | STAssertTrue([calc.display isEqual:@"20000000"], calc.display); 94 | 95 | [typer type:@"C 1千200万"]; 96 | STAssertTrue([calc.display isEqual:@"12000000"], calc.display); 97 | 98 | [typer type:@"C 1千2万"]; 99 | STAssertTrue([calc.display isEqual:@"10020000"], calc.display); 100 | 101 | [typer type:@"C 1千1万"]; 102 | STAssertTrue([calc.display isEqual:@"10010000"], calc.display); 103 | } 104 | 105 | @end 106 | -------------------------------------------------------------------------------- /Classes/MainViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // MainViewController.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "MainViewController.h" 10 | #import "Calcurator.h" 11 | 12 | #import "FlipsideViewController.h" 13 | 14 | 15 | #define CALC_RESULT_KEY @"display" 16 | #define CALC_ENTERING_KEY @"display" 17 | 18 | 19 | @interface MainViewController() 20 | 21 | @property(nonatomic, readonly) Calcurator *calc; 22 | 23 | @end 24 | 25 | @implementation MainViewController 26 | 27 | - (void)dealloc { 28 | [_calc release]; 29 | [resultDisplay release]; 30 | [enteringDisplay release]; 31 | 32 | [super dealloc]; 33 | } 34 | 35 | - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller { 36 | [self dismissModalViewControllerAnimated:YES]; 37 | } 38 | 39 | - (void)viewDidLoad { 40 | [super viewDidLoad]; 41 | 42 | [self.calc addObserver:self forKeyPath:CALC_RESULT_KEY options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionInitial context:nil]; 43 | [self.calc addObserver:self forKeyPath:CALC_ENTERING_KEY options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionInitial context:nil]; 44 | } 45 | 46 | - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 47 | if ([keyPath isEqual:CALC_RESULT_KEY]) { 48 | resultDisplay.text = self.calc.display; 49 | } 50 | 51 | if ([keyPath isEqual:CALC_ENTERING_KEY]) { 52 | enteringDisplay.text = self.calc.display; 53 | } 54 | } 55 | 56 | - (void)viewDidUnload { 57 | [self.calc removeObserver:self forKeyPath:CALC_RESULT_KEY]; 58 | [self.calc removeObserver:self forKeyPath:CALC_ENTERING_KEY]; 59 | 60 | [super viewDidUnload]; 61 | } 62 | 63 | - (void)releaseOutlets { 64 | 65 | } 66 | 67 | #pragma mark Accessors 68 | 69 | - (Calcurator *)calc { 70 | if (_calc == nil) { 71 | _calc = [[Calcurator alloc] init]; 72 | } 73 | 74 | return _calc; 75 | } 76 | 77 | #pragma mark Actions 78 | 79 | - (IBAction)digit0 { 80 | [self.calc typeDigit:0]; 81 | } 82 | 83 | - (IBAction)digit1 { 84 | [self.calc typeDigit:1]; 85 | } 86 | 87 | - (IBAction)digit2 { 88 | [self.calc typeDigit:2]; 89 | } 90 | 91 | - (IBAction)digit3 { 92 | [self.calc typeDigit:3]; 93 | } 94 | 95 | - (IBAction)digit4 { 96 | [self.calc typeDigit:4]; 97 | } 98 | 99 | - (IBAction)digit5 { 100 | [self.calc typeDigit:5]; 101 | } 102 | 103 | - (IBAction)digit6 { 104 | [self.calc typeDigit:6]; 105 | } 106 | 107 | - (IBAction)digit7 { 108 | [self.calc typeDigit:7]; 109 | } 110 | 111 | - (IBAction)digit8 { 112 | [self.calc typeDigit:8]; 113 | } 114 | 115 | - (IBAction)digit9 { 116 | [self.calc typeDigit:9]; 117 | } 118 | 119 | - (IBAction)period { 120 | [self.calc typeDot]; 121 | } 122 | 123 | - (IBAction)plusMinus { 124 | [self.calc negative]; 125 | } 126 | 127 | - (IBAction)ouku { 128 | [self.calc digitAssistWithPlaces:8]; 129 | } 130 | 131 | - (IBAction)man { 132 | [self.calc digitAssistWithPlaces:4]; 133 | } 134 | 135 | - (IBAction)sen { 136 | [self.calc digitAssistWithPlaces:3]; 137 | } 138 | 139 | - (IBAction)hyaku { 140 | [self.calc digitAssistWithPlaces:2]; 141 | } 142 | 143 | - (IBAction)plus { 144 | [self.calc hitPlus]; 145 | } 146 | 147 | - (IBAction)minus { 148 | [self.calc hitMinus]; 149 | } 150 | 151 | - (IBAction)mul { 152 | [self.calc hitMul]; 153 | } 154 | 155 | - (IBAction)div { 156 | [self.calc hitDiv]; 157 | } 158 | 159 | - (IBAction)result { 160 | [self.calc hitEqual]; 161 | } 162 | 163 | - (IBAction)clear { 164 | [self.calc clear]; 165 | } 166 | 167 | - (IBAction)showInfo:(id)sender { 168 | FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil]; 169 | controller.delegate = self; 170 | 171 | controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 172 | [self presentModalViewController:controller animated:YES]; 173 | 174 | [controller release]; 175 | } 176 | 177 | 178 | @end 179 | -------------------------------------------------------------------------------- /Classes/Calcurator.m: -------------------------------------------------------------------------------- 1 | // 2 | // Calcurator.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "Calcurator.h" 10 | 11 | 12 | @interface Calcurator() 13 | 14 | @property(nonatomic, retain, readwrite) NSDictionary *operations; 15 | @property(nonatomic, assign, readwrite) double value; 16 | @property(nonatomic, assign, readwrite) BOOL resultFixed; 17 | 18 | - (void)readEnteringValue; 19 | - (void)executeOperation; 20 | - (void)updateDisplay; 21 | - (NSString *)formatResult:(double)val; 22 | 23 | @end 24 | 25 | 26 | #define CalcOpPlus @"+" 27 | #define CalcOpMinus @"-" 28 | #define CalcOpMul @"*" 29 | #define CalcOpDiv @"/" 30 | 31 | @implementation Calcurator 32 | 33 | @synthesize display=_display; 34 | 35 | @synthesize entering=_entering; 36 | @synthesize value=_value; 37 | @synthesize resultFixed=_resultFixed; 38 | @synthesize currentOperator=_currentOperator; 39 | 40 | @synthesize engine=_engine; 41 | @synthesize operations=_operations; 42 | 43 | - (id)init { 44 | if (self = [super init]) { 45 | self.engine = [[[CalcEngine alloc] init] autorelease]; 46 | self.entering = [[[EnteringValue alloc] init] autorelease]; 47 | 48 | [self updateDisplay]; 49 | 50 | self.currentOperator = @""; 51 | 52 | self.operations = [NSDictionary dictionaryWithObjectsAndKeys: 53 | @"add:", CalcOpPlus, 54 | @"subtract:", CalcOpMinus, 55 | @"multiply:", CalcOpMul, 56 | @"divide:", CalcOpDiv, 57 | @"store:", @"", 58 | nil]; 59 | } 60 | 61 | return self; 62 | } 63 | 64 | - (void)dealloc { 65 | self.display = nil; 66 | 67 | self.entering = nil; 68 | self.currentOperator = nil; 69 | 70 | self.engine = nil; 71 | self.operations = nil; 72 | 73 | [super dealloc]; 74 | } 75 | 76 | - (void)typeDigit:(NSInteger)digit { 77 | if (self.resultFixed) { 78 | [self.engine clearResult]; 79 | self.resultFixed = NO; 80 | } 81 | 82 | [self.entering typeDigit:digit]; 83 | [self updateDisplay]; 84 | } 85 | 86 | - (void)typeDot { 87 | if (self.resultFixed) { 88 | [self.engine clearResult]; 89 | self.resultFixed = NO; 90 | } 91 | 92 | [self.entering typeDot]; 93 | [self updateDisplay]; 94 | } 95 | 96 | - (void)hitPlus { 97 | self.resultFixed = NO; 98 | [self readEnteringValue]; 99 | [self executeOperation]; 100 | self.currentOperator = CalcOpPlus; 101 | } 102 | 103 | - (void)hitMinus { 104 | self.resultFixed = NO; 105 | [self readEnteringValue]; 106 | [self executeOperation]; 107 | self.currentOperator = CalcOpMinus; 108 | } 109 | 110 | - (void)hitMul { 111 | self.resultFixed = NO; 112 | [self readEnteringValue]; 113 | [self executeOperation]; 114 | self.currentOperator = CalcOpMul; 115 | } 116 | 117 | - (void)hitDiv { 118 | self.resultFixed = NO; 119 | [self readEnteringValue]; 120 | [self executeOperation]; 121 | self.currentOperator = CalcOpDiv; 122 | } 123 | 124 | - (void)hitEqual { 125 | if (self.entering.active) { 126 | [self readEnteringValue]; 127 | } 128 | [self executeOperation]; 129 | self.resultFixed = YES; 130 | } 131 | 132 | - (void)clear { 133 | if (self.entering.active) { 134 | [self.entering clear]; 135 | } else { 136 | [self.engine clearResult]; 137 | } 138 | 139 | self.resultFixed = NO; 140 | [self.engine clearError]; 141 | [self updateDisplay]; 142 | } 143 | 144 | - (void)allClear { 145 | [self.entering clear]; 146 | self.currentOperator = @""; 147 | [self.engine clearResult]; 148 | [self.engine clearError]; 149 | 150 | [self updateDisplay]; 151 | } 152 | 153 | - (void)negative { 154 | if (self.entering.active) { 155 | [self.entering negative]; 156 | } else { 157 | [self.engine negative]; 158 | } 159 | 160 | [self updateDisplay]; 161 | } 162 | 163 | - (void)digitAssistWithPlaces:(NSInteger)places { 164 | [self.entering digitAssistWithPlaces:places]; 165 | [self updateDisplay]; 166 | } 167 | 168 | #pragma mark Logic 169 | 170 | - (void)readEnteringValue { 171 | self.value = [self.entering doubleValue]; 172 | } 173 | 174 | - (void)executeOperation { 175 | NSString *op = [self.operations objectForKey:self.currentOperator]; 176 | SEL opSel= NSSelectorFromString(op); 177 | 178 | [self.engine performSelector:opSel withObject:[NSNumber numberWithDouble:self.value]]; 179 | if (self.engine.error) { 180 | return; 181 | } 182 | 183 | if (self.entering.active) { 184 | [self.entering clear]; 185 | } 186 | 187 | [self updateDisplay]; 188 | } 189 | 190 | - (void)updateDisplay { 191 | if (self.entering.active) { 192 | self.display = [self.entering displayValue]; 193 | } else { 194 | self.display = [self formatResult:[[self.engine result] doubleValue]];; 195 | } 196 | } 197 | 198 | - (NSString *)formatResult:(double)val { 199 | NSMutableString *str = [NSMutableString stringWithFormat:@"%.12f", val]; 200 | 201 | while ([str length] > 0) { 202 | NSInteger pos = [str length] - 1; 203 | unichar c = [str characterAtIndex:pos]; 204 | if (c != '0' && c != '.') break; 205 | 206 | [str deleteCharactersInRange:NSMakeRange(pos, 1)]; 207 | 208 | if (c == '.') break; 209 | } 210 | 211 | return str; 212 | } 213 | 214 | @end 215 | -------------------------------------------------------------------------------- /Classes/EnteringValue.m: -------------------------------------------------------------------------------- 1 | // 2 | // EnteringValue.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/24. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "EnteringValue.h" 10 | 11 | @interface AssistValue : NSObject 12 | 13 | @property(nonatomic, assign, readonly) long long value; 14 | @property(nonatomic, assign, readonly) long place; 15 | 16 | - (id)initWithIntegers:(NSString *)integers places:(NSInteger)places; 17 | 18 | @end 19 | 20 | 21 | @implementation AssistValue 22 | 23 | @synthesize value=_value; 24 | @synthesize place=_place; 25 | 26 | + (AssistValue *)valueWithIntegers:(NSString *)integers places:(NSInteger)places { 27 | return [[[AssistValue alloc] initWithIntegers:integers places:places] autorelease]; 28 | } 29 | 30 | - (id)initWithIntegers:(NSString *)integers places:(NSInteger)places { 31 | if (self = [super init]) { 32 | long long val; 33 | 34 | val = [integers longLongValue]; 35 | 36 | _value = val; 37 | _place = places; 38 | } 39 | 40 | return self; 41 | } 42 | 43 | - (long long)value { 44 | double value = _value; 45 | if (value == 0) value = 1.0; 46 | 47 | return value * pow(10.0, self.place); 48 | } 49 | 50 | - (BOOL)isSmallerThan:(AssistValue *)assist { 51 | return self.place < assist.place; 52 | } 53 | 54 | - (void)merge:(AssistValue *)assist { 55 | if (_value == 0) { 56 | _value = 1.0; 57 | } 58 | 59 | _value = assist->_value + _value * pow(10.0, self.place); 60 | 61 | _place = assist.place; 62 | } 63 | 64 | @end 65 | 66 | 67 | @interface EnteringValue() 68 | 69 | @property(nonatomic, retain, readwrite) NSString *integers; 70 | @property(nonatomic, retain, readwrite) NSString *decimals; 71 | @property(nonatomic, retain, readwrite) NSMutableArray *assists; 72 | 73 | @end 74 | 75 | 76 | @implementation EnteringValue 77 | 78 | @synthesize active=_active; 79 | @synthesize closed=_closed; 80 | 81 | @synthesize integers=_integers; 82 | @synthesize decimals=_decimals; 83 | @synthesize assists=_assists; 84 | 85 | - (id)init { 86 | if (self = [super init]) { 87 | [self clear]; 88 | } 89 | 90 | return self; 91 | } 92 | 93 | - (void)dealloc { 94 | self.integers = nil; 95 | self.decimals = nil; 96 | self.assists = nil; 97 | 98 | [super dealloc]; 99 | } 100 | 101 | - (NSString *)description { 102 | return [NSString stringWithFormat: 103 | @"ACTIVE: %@ CLOSED: %@ INTEGERS: %@ DECIMALS: %@", 104 | (self.active ? @"YES" : @"NO"), 105 | (self.closed ? @"YES" : @"NO"), 106 | self.integers, 107 | self.decimals, 108 | nil]; 109 | } 110 | 111 | - (long long)integerValue { 112 | long long val = 0; 113 | 114 | for (AssistValue *assist in self.assists) { 115 | val += assist.value; 116 | } 117 | 118 | if (self.integers) { 119 | val += [self.integers longLongValue]; 120 | } 121 | 122 | return val; 123 | } 124 | 125 | - (double)doubleValue { 126 | double val = [self integerValue]; 127 | 128 | if ([self.decimals length] > 0) { 129 | double d = [self.decimals longLongValue]; 130 | d /= pow(10, [self.decimals length]); 131 | val += d; 132 | } 133 | 134 | return val; 135 | } 136 | 137 | - (NSString *)displayValue { 138 | NSMutableString *value = [NSMutableString stringWithCapacity:20]; 139 | 140 | [value appendFormat:@"%ld", [self integerValue]]; 141 | 142 | if (self.decimals) { 143 | [value appendString:@"."]; 144 | [value appendString:self.decimals]; 145 | } 146 | 147 | return [NSString stringWithString:value]; 148 | } 149 | 150 | - (void)typeDigit:(NSInteger)digit { 151 | if (self.closed) { 152 | [self clear]; 153 | } 154 | 155 | NSString *digitChar = [NSString stringWithFormat:@"%d", digit]; 156 | 157 | if (self.decimals) { 158 | self.decimals = [self.decimals stringByAppendingString:digitChar]; 159 | } else { 160 | if (self.integers) { 161 | self.integers = [self.integers stringByAppendingString:digitChar]; 162 | } else if (digit) { 163 | self.integers = digitChar; 164 | } 165 | } 166 | 167 | self.active = YES; 168 | } 169 | 170 | - (void)typeDot { 171 | if (self.closed) { 172 | [self clear]; 173 | } 174 | 175 | if (self.decimals) { 176 | return; 177 | } 178 | 179 | self.decimals = @""; 180 | self.active = YES; 181 | } 182 | 183 | - (void)negative { 184 | if (! self.integers) { 185 | return; 186 | } 187 | 188 | if ([self.integers characterAtIndex:0] == '-') { 189 | self.integers = [self.integers substringFromIndex:1]; 190 | } else { 191 | self.integers = [@"-" stringByAppendingString:self.integers]; 192 | } 193 | 194 | self.closed = YES; 195 | } 196 | 197 | - (void)clear { 198 | self.integers = nil; 199 | self.decimals = nil; 200 | self.active = NO; 201 | self.closed = NO; 202 | 203 | self.assists = [NSMutableArray arrayWithCapacity:5]; 204 | } 205 | 206 | - (void)digitAssistWithPlaces:(NSInteger)places { 207 | AssistValue *assist = [AssistValue valueWithIntegers:self.integers places:places]; 208 | self.integers = nil; 209 | 210 | for (AssistValue *assist2 in self.assists) { 211 | if ([assist2 isSmallerThan:assist]) { 212 | [assist2 merge:assist]; 213 | return; 214 | } 215 | } 216 | 217 | [self.assists insertObject:assist atIndex:0]; 218 | 219 | self.active = YES; 220 | } 221 | 222 | @end 223 | -------------------------------------------------------------------------------- /Tests/CalcuratorTest.m: -------------------------------------------------------------------------------- 1 | // 2 | // CalcuratorTest.m 3 | // Jagtaku-iPhoneApp 4 | // 5 | // Created by Yosuke Suzuki on 11/01/20. 6 | // Copyright 2011 バスケ. All rights reserved. 7 | // 8 | 9 | #import "CalcuratorTest.h" 10 | 11 | 12 | @implementation CalcuratorTest 13 | 14 | - (void)setUp { 15 | calc = [[Calcurator alloc] init]; 16 | typer = [[CalcTyper alloc] init]; 17 | 18 | [typer setCalc:calc]; 19 | } 20 | 21 | - (void)tearDown { 22 | [typer release]; 23 | [calc release]; 24 | } 25 | 26 | /** 27 | * 簡単な入力からテスト。 28 | */ 29 | - (void)testSimpleEntryDisplay { 30 | STAssertTrue([calc.display isEqual:@"0"], calc.display); 31 | 32 | [typer type:@"0"]; 33 | STAssertTrue([calc.display isEqual:@"0"], calc.display); 34 | 35 | [typer type:@"0"]; 36 | STAssertTrue([calc.display isEqual:@"0"], calc.display); 37 | 38 | [typer type:@"1"]; 39 | STAssertTrue([calc.display isEqual:@"1"], calc.display); 40 | 41 | [typer type:@"0"]; 42 | STAssertTrue([calc.display isEqual:@"10"], calc.display); 43 | 44 | [typer type:@"123"]; 45 | STAssertTrue([calc.display isEqual:@"10123"], calc.display); 46 | 47 | [calc clear]; 48 | STAssertTrue([calc.display isEqual:@"0"], calc.display); 49 | } 50 | 51 | /** 52 | * 小数点の入力をテスト 53 | */ 54 | - (void)testDot { 55 | [typer type:@"c 1.23"]; 56 | STAssertTrue([calc.display isEqual:@"1.23"], calc.display); 57 | 58 | // .で始めたら0が先頭につく 59 | [typer type:@"c .123"]; 60 | STAssertTrue([calc.display isEqual:@"0.123"], calc.display); 61 | 62 | // 最後の.は有効 63 | [typer type:@"c 123."]; 64 | STAssertTrue([calc.display isEqual:@"123."], calc.display); 65 | 66 | // 連続して入力しても一度のみ 67 | [typer type:@"c 1...23"]; 68 | STAssertTrue([calc.display isEqual:@"1.23"], calc.display); 69 | 70 | // 間をおいて二度入れても無効 71 | [typer type:@"c 12.3.4"]; 72 | STAssertTrue([calc.display isEqual:@"12.34"], calc.display); 73 | 74 | 75 | [typer type:@"C .1234 ="]; 76 | STAssertTrue([calc.display isEqual:@"0.1234"], @"Must be 0.1234, but %@", calc.display); 77 | } 78 | 79 | /** 80 | * + のテスト 81 | */ 82 | - (void)testPlus { 83 | // 1 + 2 = 3 84 | [typer type:@"c 1"]; 85 | STAssertTrue([calc.display isEqual:@"1"], calc.display); 86 | 87 | [typer type:@"+ 2"]; 88 | STAssertTrue([calc.display isEqual:@"2"], calc.display); 89 | 90 | [typer type:@"="]; 91 | STAssertTrue([calc.display isEqual:@"3"], calc.display); 92 | 93 | [typer type:@"C 1 + 2 + 3 + 4 ="]; 94 | STAssertTrue([calc.display isEqual:@"10"], calc.display); 95 | } 96 | 97 | /** 98 | * - のテスト 99 | */ 100 | - (void)testMinus { 101 | [typer type:@"C 3 - 2 ="]; 102 | STAssertTrue([calc.display isEqual:@"1"], calc.display); 103 | 104 | [typer type:@"C 10 - 6 - 4 - 3 ="]; 105 | STAssertTrue([calc.display isEqual:@"-3"], calc.display); 106 | } 107 | 108 | /** 109 | * + と - のミックスのテスト 110 | */ 111 | - (void)testPlusAndMinus { 112 | [typer type:@"C 3 + 4 - 5 = "]; 113 | STAssertTrue([calc.display isEqual:@"2"], calc.display); 114 | 115 | [typer type:@"C 10 - 6 + 4 - 3 = "]; 116 | STAssertTrue([calc.display isEqual:@"5"], calc.display); 117 | } 118 | 119 | /** 120 | * 小数の + のテスト 121 | */ 122 | - (void)testFractionalPlus { // 4.2 123 | [typer type:@"C 1.5"]; 124 | STAssertTrue([calc.display isEqual:@"1.5"], calc.display); 125 | 126 | [typer type:@"+"]; 127 | STAssertTrue([calc.display isEqual:@"1.5"], calc.display); 128 | 129 | [typer type:@"2.7"]; 130 | STAssertTrue([calc.display isEqual:@"2.7"], calc.display); 131 | 132 | [typer type:@"="]; 133 | STAssertTrue([calc.display isEqual:@"4.2"], calc.display); 134 | } 135 | 136 | /** 137 | * x のテスト 138 | */ 139 | - (void)testMulti { 140 | [typer type:@"C 3 × 2 = "]; 141 | STAssertTrue([calc.display isEqual:@"6"], calc.display); 142 | 143 | [typer type:@"C 10 * 6 * 4 * 3 = "]; 144 | STAssertTrue([calc.display isEqual:@"720"], calc.display); 145 | } 146 | 147 | /** 148 | * ÷ のテスト 149 | */ 150 | - (void)testDiv { 151 | [typer type:@"C 6 ÷ 2 = "]; 152 | STAssertTrue([calc.display isEqual:@"3"], calc.display); 153 | 154 | [typer type:@"C 720 / 6 / 4 / 3 = "]; 155 | STAssertTrue([calc.display isEqual:@"10"], calc.display); 156 | } 157 | 158 | /** 159 | * +/- ボタンのテスト 160 | */ 161 | - (void)testNegative { 162 | [typer type:@"C 10 ±"]; 163 | STAssertTrue([calc.display isEqual:@"-10"], @"10 ±"); 164 | 165 | [typer type:@"±"]; 166 | STAssertTrue([calc.display isEqual:@"10"], @"もう一度"); 167 | 168 | [typer type:@"C"]; 169 | STAssertTrue([calc.display isEqual:@"0"], @"clear"); 170 | 171 | [typer type:@"±"]; 172 | STAssertTrue([calc.display isEqual:@"0"], @"0には-はない"); 173 | 174 | [typer type:@"C 1 + 2 ± ="]; 175 | STAssertTrue([calc.display isEqual:@"-1"], @"C 1 + 2 ± ="); 176 | 177 | [typer type:@"C 1 + 2 ±± ="]; 178 | STAssertTrue([calc.display isEqual:@"3"], @"C 1 + 2 ±± ="); 179 | 180 | [typer type:@"C 1 ± 3 + 3="]; 181 | STAssertTrue([calc.display isEqual:@"6"], @"最初の 1 ± は次の入力で無効に"); 182 | 183 | } 184 | 185 | - (void)testClear { 186 | [typer type:@"C 1"]; 187 | STAssertTrue(calc.entering.active, @"入力中"); 188 | STAssertTrue([calc.display isEqual:@"1"], @"1のはず"); 189 | 190 | [typer type:@"c"]; 191 | STAssertFalse(calc.entering.active, @"入力中じゃない"); 192 | STAssertTrue([calc.display isEqual:@"0"], @"0のはず"); 193 | 194 | [typer type:@"C 1 + 2"]; 195 | STAssertTrue(calc.entering.active, @"入力中"); 196 | STAssertTrue([calc.display isEqual:@"2"], @"2のはず"); 197 | 198 | [typer type:@"c"]; 199 | STAssertFalse(calc.entering.active, @"入力中じゃない"); 200 | STAssertTrue([calc.display isEqual:@"1"], @"1のはず"); 201 | 202 | [typer type:@"c"]; 203 | STAssertFalse(calc.entering.active, @"入力中じゃない"); 204 | STAssertTrue([calc.display isEqual:@"0"], @"0のはず"); 205 | } 206 | 207 | - (void)testError { 208 | /* 209 | エラーは Calculatorのステータスであるべきだが、displayとは 210 | 結びつくべきでない。エラーになったときにどういう表記にするかは 211 | 使う側の実装にゆだねるべき。 212 | */ 213 | [typer type:@"C"]; 214 | STAssertFalse(calc.engine.error, @"エラーじゃない"); 215 | 216 | [typer type:@"1 / 0 ="]; 217 | STAssertTrue(calc.engine.error, @"エラー!"); 218 | STAssertEquals(calc.engine.errorReason, CalcErrorDivideByZero, @"エラーはゼロ除算"); 219 | 220 | [typer type:@"1 ="]; 221 | STAssertTrue(calc.engine.error, @"クリアしない限りエラー!"); 222 | 223 | [typer type:@"c"]; 224 | STAssertFalse(calc.engine.error, @"クリアで解除"); 225 | 226 | // クリアで解除されるのは最後の入力値とエラーであるべき 227 | 228 | [typer type:@"C 10 / 0 = c"]; 229 | STAssertFalse(calc.engine.error, @"エラーは解除される"); 230 | STAssertTrue([calc.display isEqual:@"10"], @"最初の入力値、10が有効である"); 231 | 232 | [typer type:@"5"]; 233 | STAssertTrue([calc.display isEqual:@"5"], @"入力しなおして5"); 234 | 235 | [typer type:@"="]; 236 | STAssertTrue([calc.display isEqual:@"2"], @"10 / 5 = 10"); 237 | } 238 | 239 | - (void)testTricky { 240 | /* 241 | 最後の演算を覚えておくロジックを実装 242 | */ 243 | [typer type:@"C 1 + 2 ="]; 244 | STAssertTrue([calc.display isEqual:@"3"], @"これは3"); 245 | [typer type:@"="]; 246 | STAssertTrue([calc.display isEqual:@"5"], @"続けて= を押すと最後の演算を繰り返すので 3+2=5"); 247 | 248 | [typer type:@"= = = = ="]; 249 | STAssertTrue([calc.display isEqual:@"15"], @"さらに続けて5回= を押すと5+2*5=15"); 250 | 251 | [typer type:@"C 5 + 5 ="]; 252 | [typer type:@" + 3 ="]; 253 | STAssertTrue([calc.display isEqual:@"13"], @"10 + 3 = 13"); 254 | 255 | /* 256 | 一度演算が終わって結果が表示された後に、 257 | 別の演算を始めたら、結果をリセットしてから 258 | あらたな計算を始める 259 | */ 260 | [typer type:@"C 5 + 5 ="]; 261 | [typer type:@"1 + 2 ="]; 262 | STAssertTrue([calc.display isEqual:@"3"], @"クリアされてからなのでやはり3"); 263 | 264 | /* 265 | 似ているが、演算結果でなくいきなり数字を入れたパターン。 266 | 同じ結果のはず 267 | */ 268 | [typer type:@"C 10 ="]; 269 | [typer type:@"1 + 2 ="]; 270 | STAssertTrue([calc.display isEqual:@"3"], @"クリアされてからなのでやはり3"); 271 | 272 | /* 273 | .で初めても一緒 274 | */ 275 | [typer type:@"C 5 + 5 ="]; 276 | [typer type:@".5 ="]; 277 | STAssertTrue([calc.display isEqual:@"0.5"], @"Must be 0.5, but %@", calc.display); 278 | } 279 | 280 | @end 281 | -------------------------------------------------------------------------------- /FlipsideView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1024 5 | 10D571 6 | 782 7 | 1038.29 8 | 460.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 107 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | YES 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | YES 23 | 24 | YES 25 | 26 | 27 | YES 28 | 29 | 30 | 31 | YES 32 | 33 | IBFilesOwner 34 | IBCocoaTouchFramework 35 | 36 | 37 | IBFirstResponder 38 | IBCocoaTouchFramework 39 | 40 | 41 | 42 | 274 43 | 44 | YES 45 | 46 | 47 | 290 48 | {320, 44} 49 | 50 | NO 51 | NO 52 | IBCocoaTouchFramework 53 | 1 54 | 55 | YES 56 | 57 | 58 | Title 59 | 60 | IBCocoaTouchFramework 61 | 1 62 | 63 | 0 64 | 65 | IBCocoaTouchFramework 66 | 67 | 68 | 69 | 70 | {320, 460} 71 | 72 | 73 | 3 74 | MC4yNQA 75 | 76 | 2 77 | 78 | 79 | NO 80 | 81 | 2 82 | 83 | IBCocoaTouchFramework 84 | 85 | 86 | 87 | 88 | YES 89 | 90 | 91 | view 92 | 93 | 94 | 95 | 41 96 | 97 | 98 | 99 | done: 100 | 101 | 102 | 103 | 46 104 | 105 | 106 | 107 | 108 | YES 109 | 110 | 0 111 | 112 | 113 | 114 | 115 | 116 | -1 117 | 118 | 119 | File's Owner 120 | 121 | 122 | -2 123 | 124 | 125 | 126 | 127 | 40 128 | 129 | 130 | YES 131 | 132 | 133 | 134 | 135 | 136 | 42 137 | 138 | 139 | YES 140 | 141 | 142 | 143 | 144 | 145 | 43 146 | 147 | 148 | YES 149 | 150 | 151 | 152 | 153 | 154 | 44 155 | 156 | 157 | 158 | 159 | 160 | 161 | YES 162 | 163 | YES 164 | -1.CustomClassName 165 | -2.CustomClassName 166 | 40.IBEditorWindowLastContentRect 167 | 40.IBPluginDependency 168 | 42.IBPluginDependency 169 | 43.IBPluginDependency 170 | 44.IBPluginDependency 171 | 172 | 173 | YES 174 | FlipsideViewController 175 | UIResponder 176 | {{213, 676}, {320, 480}} 177 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 178 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 179 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 180 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 181 | 182 | 183 | 184 | YES 185 | 186 | 187 | YES 188 | 189 | 190 | 191 | 192 | YES 193 | 194 | 195 | YES 196 | 197 | 198 | 199 | 46 200 | 201 | 202 | 203 | YES 204 | 205 | FlipsideViewController 206 | UIViewController 207 | 208 | done: 209 | id 210 | 211 | 212 | delegate 213 | id 214 | 215 | 216 | IBProjectSource 217 | Classes/FlipsideViewController.h 218 | 219 | 220 | 221 | 222 | YES 223 | 224 | NSObject 225 | 226 | IBFrameworkSource 227 | Foundation.framework/Headers/NSError.h 228 | 229 | 230 | 231 | NSObject 232 | 233 | IBFrameworkSource 234 | Foundation.framework/Headers/NSFileManager.h 235 | 236 | 237 | 238 | NSObject 239 | 240 | IBFrameworkSource 241 | Foundation.framework/Headers/NSKeyValueCoding.h 242 | 243 | 244 | 245 | NSObject 246 | 247 | IBFrameworkSource 248 | Foundation.framework/Headers/NSKeyValueObserving.h 249 | 250 | 251 | 252 | NSObject 253 | 254 | IBFrameworkSource 255 | Foundation.framework/Headers/NSKeyedArchiver.h 256 | 257 | 258 | 259 | NSObject 260 | 261 | IBFrameworkSource 262 | Foundation.framework/Headers/NSObject.h 263 | 264 | 265 | 266 | NSObject 267 | 268 | IBFrameworkSource 269 | Foundation.framework/Headers/NSRunLoop.h 270 | 271 | 272 | 273 | NSObject 274 | 275 | IBFrameworkSource 276 | Foundation.framework/Headers/NSThread.h 277 | 278 | 279 | 280 | NSObject 281 | 282 | IBFrameworkSource 283 | Foundation.framework/Headers/NSURL.h 284 | 285 | 286 | 287 | NSObject 288 | 289 | IBFrameworkSource 290 | Foundation.framework/Headers/NSURLConnection.h 291 | 292 | 293 | 294 | NSObject 295 | 296 | IBFrameworkSource 297 | UIKit.framework/Headers/UIAccessibility.h 298 | 299 | 300 | 301 | NSObject 302 | 303 | IBFrameworkSource 304 | UIKit.framework/Headers/UINibLoading.h 305 | 306 | 307 | 308 | NSObject 309 | 310 | IBFrameworkSource 311 | UIKit.framework/Headers/UIResponder.h 312 | 313 | 314 | 315 | UIBarButtonItem 316 | UIBarItem 317 | 318 | IBFrameworkSource 319 | UIKit.framework/Headers/UIBarButtonItem.h 320 | 321 | 322 | 323 | UIBarItem 324 | NSObject 325 | 326 | IBFrameworkSource 327 | UIKit.framework/Headers/UIBarItem.h 328 | 329 | 330 | 331 | UINavigationBar 332 | UIView 333 | 334 | IBFrameworkSource 335 | UIKit.framework/Headers/UINavigationBar.h 336 | 337 | 338 | 339 | UINavigationItem 340 | NSObject 341 | 342 | 343 | 344 | UIResponder 345 | NSObject 346 | 347 | 348 | 349 | UISearchBar 350 | UIView 351 | 352 | IBFrameworkSource 353 | UIKit.framework/Headers/UISearchBar.h 354 | 355 | 356 | 357 | UISearchDisplayController 358 | NSObject 359 | 360 | IBFrameworkSource 361 | UIKit.framework/Headers/UISearchDisplayController.h 362 | 363 | 364 | 365 | UIView 366 | 367 | IBFrameworkSource 368 | UIKit.framework/Headers/UITextField.h 369 | 370 | 371 | 372 | UIView 373 | UIResponder 374 | 375 | IBFrameworkSource 376 | UIKit.framework/Headers/UIView.h 377 | 378 | 379 | 380 | UIViewController 381 | 382 | IBFrameworkSource 383 | UIKit.framework/Headers/UINavigationController.h 384 | 385 | 386 | 387 | UIViewController 388 | 389 | IBFrameworkSource 390 | UIKit.framework/Headers/UIPopoverController.h 391 | 392 | 393 | 394 | UIViewController 395 | 396 | IBFrameworkSource 397 | UIKit.framework/Headers/UISplitViewController.h 398 | 399 | 400 | 401 | UIViewController 402 | 403 | IBFrameworkSource 404 | UIKit.framework/Headers/UITabBarController.h 405 | 406 | 407 | 408 | UIViewController 409 | UIResponder 410 | 411 | IBFrameworkSource 412 | UIKit.framework/Headers/UIViewController.h 413 | 414 | 415 | 416 | 417 | 0 418 | IBCocoaTouchFramework 419 | 420 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 421 | 422 | 423 | 424 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 425 | 426 | 427 | YES 428 | Jagtaku-iPhoneApp.xcodeproj 429 | 3 430 | 107 431 | 432 | 433 | -------------------------------------------------------------------------------- /MainWindow.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1024 5 | 10D571 6 | 786 7 | 1038.29 8 | 460.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 112 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | 19 | YES 20 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 21 | 22 | 23 | YES 24 | 25 | YES 26 | 27 | 28 | YES 29 | 30 | 31 | 32 | YES 33 | 34 | IBFilesOwner 35 | IBCocoaTouchFramework 36 | 37 | 38 | IBFirstResponder 39 | IBCocoaTouchFramework 40 | 41 | 42 | IBCocoaTouchFramework 43 | 44 | 45 | 46 | 1316 47 | 48 | {320, 480} 49 | 50 | 51 | 1 52 | MCAwIDAAA 53 | 54 | NO 55 | YES 56 | 57 | IBCocoaTouchFramework 58 | YES 59 | 60 | 61 | MainView 62 | 63 | 64 | 1 65 | 66 | IBCocoaTouchFramework 67 | NO 68 | 69 | 70 | 71 | 72 | YES 73 | 74 | 75 | window 76 | 77 | 78 | 79 | 5 80 | 81 | 82 | 83 | mainViewController 84 | 85 | 86 | 87 | 24 88 | 89 | 90 | 91 | delegate 92 | 93 | 94 | 95 | 26 96 | 97 | 98 | 99 | 100 | YES 101 | 102 | 0 103 | 104 | 105 | 106 | 107 | 108 | 2 109 | 110 | 111 | YES 112 | 113 | 114 | 115 | 116 | -1 117 | 118 | 119 | File's Owner 120 | 121 | 122 | 3 123 | 124 | 125 | 126 | 127 | -2 128 | 129 | 130 | 131 | 132 | 22 133 | 134 | 135 | 136 | 137 | 138 | 139 | YES 140 | 141 | YES 142 | -1.CustomClassName 143 | -2.CustomClassName 144 | 2.IBAttributePlaceholdersKey 145 | 2.IBEditorWindowLastContentRect 146 | 2.IBPluginDependency 147 | 22.CustomClassName 148 | 22.IBEditorWindowLastContentRect 149 | 22.IBPluginDependency 150 | 3.CustomClassName 151 | 3.IBPluginDependency 152 | 153 | 154 | YES 155 | UIApplication 156 | UIResponder 157 | 158 | YES 159 | 160 | 161 | YES 162 | 163 | 164 | {{190, 376}, {320, 480}} 165 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 166 | MainViewController 167 | {{0, 905}, {320, 480}} 168 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 169 | Jagtaku_iPhoneAppAppDelegate 170 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 171 | 172 | 173 | 174 | YES 175 | 176 | 177 | YES 178 | 179 | 180 | 181 | 182 | YES 183 | 184 | 185 | YES 186 | 187 | 188 | 189 | 26 190 | 191 | 192 | 193 | YES 194 | 195 | MainViewController 196 | UIViewController 197 | 198 | showInfo: 199 | id 200 | 201 | 202 | showInfo: 203 | 204 | showInfo: 205 | id 206 | 207 | 208 | 209 | IBProjectSource 210 | Classes/MainViewController.h 211 | 212 | 213 | 214 | UIWindow 215 | UIView 216 | 217 | IBUserSource 218 | 219 | 220 | 221 | 222 | Jagtaku_iPhoneAppAppDelegate 223 | NSObject 224 | 225 | YES 226 | 227 | YES 228 | mainViewController 229 | window 230 | 231 | 232 | YES 233 | MainViewController 234 | UIWindow 235 | 236 | 237 | 238 | YES 239 | 240 | YES 241 | mainViewController 242 | window 243 | 244 | 245 | YES 246 | 247 | mainViewController 248 | MainViewController 249 | 250 | 251 | window 252 | UIWindow 253 | 254 | 255 | 256 | 257 | IBProjectSource 258 | Classes/Jagtaku_iPhoneAppAppDelegate.h 259 | 260 | 261 | 262 | 263 | YES 264 | 265 | NSObject 266 | 267 | IBFrameworkSource 268 | Foundation.framework/Headers/NSError.h 269 | 270 | 271 | 272 | NSObject 273 | 274 | IBFrameworkSource 275 | Foundation.framework/Headers/NSFileManager.h 276 | 277 | 278 | 279 | NSObject 280 | 281 | IBFrameworkSource 282 | Foundation.framework/Headers/NSKeyValueCoding.h 283 | 284 | 285 | 286 | NSObject 287 | 288 | IBFrameworkSource 289 | Foundation.framework/Headers/NSKeyValueObserving.h 290 | 291 | 292 | 293 | NSObject 294 | 295 | IBFrameworkSource 296 | Foundation.framework/Headers/NSKeyedArchiver.h 297 | 298 | 299 | 300 | NSObject 301 | 302 | IBFrameworkSource 303 | Foundation.framework/Headers/NSObject.h 304 | 305 | 306 | 307 | NSObject 308 | 309 | IBFrameworkSource 310 | Foundation.framework/Headers/NSRunLoop.h 311 | 312 | 313 | 314 | NSObject 315 | 316 | IBFrameworkSource 317 | Foundation.framework/Headers/NSThread.h 318 | 319 | 320 | 321 | NSObject 322 | 323 | IBFrameworkSource 324 | Foundation.framework/Headers/NSURL.h 325 | 326 | 327 | 328 | NSObject 329 | 330 | IBFrameworkSource 331 | Foundation.framework/Headers/NSURLConnection.h 332 | 333 | 334 | 335 | NSObject 336 | 337 | IBFrameworkSource 338 | UIKit.framework/Headers/UIAccessibility.h 339 | 340 | 341 | 342 | NSObject 343 | 344 | IBFrameworkSource 345 | UIKit.framework/Headers/UINibLoading.h 346 | 347 | 348 | 349 | NSObject 350 | 351 | IBFrameworkSource 352 | UIKit.framework/Headers/UIResponder.h 353 | 354 | 355 | 356 | UIApplication 357 | UIResponder 358 | 359 | IBFrameworkSource 360 | UIKit.framework/Headers/UIApplication.h 361 | 362 | 363 | 364 | UIResponder 365 | NSObject 366 | 367 | 368 | 369 | UISearchBar 370 | UIView 371 | 372 | IBFrameworkSource 373 | UIKit.framework/Headers/UISearchBar.h 374 | 375 | 376 | 377 | UISearchDisplayController 378 | NSObject 379 | 380 | IBFrameworkSource 381 | UIKit.framework/Headers/UISearchDisplayController.h 382 | 383 | 384 | 385 | UIView 386 | 387 | IBFrameworkSource 388 | UIKit.framework/Headers/UITextField.h 389 | 390 | 391 | 392 | UIView 393 | UIResponder 394 | 395 | IBFrameworkSource 396 | UIKit.framework/Headers/UIView.h 397 | 398 | 399 | 400 | UIViewController 401 | 402 | IBFrameworkSource 403 | UIKit.framework/Headers/UINavigationController.h 404 | 405 | 406 | 407 | UIViewController 408 | 409 | IBFrameworkSource 410 | UIKit.framework/Headers/UIPopoverController.h 411 | 412 | 413 | 414 | UIViewController 415 | 416 | IBFrameworkSource 417 | UIKit.framework/Headers/UISplitViewController.h 418 | 419 | 420 | 421 | UIViewController 422 | 423 | IBFrameworkSource 424 | UIKit.framework/Headers/UITabBarController.h 425 | 426 | 427 | 428 | UIViewController 429 | UIResponder 430 | 431 | IBFrameworkSource 432 | UIKit.framework/Headers/UIViewController.h 433 | 434 | 435 | 436 | UIWindow 437 | UIView 438 | 439 | IBFrameworkSource 440 | UIKit.framework/Headers/UIWindow.h 441 | 442 | 443 | 444 | 445 | 0 446 | IBCocoaTouchFramework 447 | 448 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 449 | 450 | 451 | 452 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 453 | 454 | 455 | YES 456 | Jagtaku-iPhoneApp.xcodeproj 457 | 3 458 | 112 459 | 460 | 461 | -------------------------------------------------------------------------------- /Jagtaku-iPhoneApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1D3623260D0F684500981E51 /* Jagtaku_iPhoneAppAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* Jagtaku_iPhoneAppAppDelegate.m */; }; 11 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; 12 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 13 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; 14 | 280E754D0DD40C5E005A515E /* FlipsideView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 280E754A0DD40C5E005A515E /* FlipsideView.xib */; }; 15 | 280E754E0DD40C5E005A515E /* MainView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 280E754B0DD40C5E005A515E /* MainView.xib */; }; 16 | 280E754F0DD40C5E005A515E /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 280E754C0DD40C5E005A515E /* MainWindow.xib */; }; 17 | 288765590DF743DE002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765580DF743DE002DB57D /* CoreGraphics.framework */; }; 18 | 289233AE0DB2D0DB0083E9F9 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 289233A90DB2D0DB0083E9F9 /* MainViewController.m */; }; 19 | 289233B00DB2D0DB0083E9F9 /* FlipsideViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 289233AD0DB2D0DB0083E9F9 /* FlipsideViewController.m */; }; 20 | EB3D262112F109D000501B63 /* CalcAssistTest.m in Sources */ = {isa = PBXBuildFile; fileRef = EB3D25B712F0F2A900501B63 /* CalcAssistTest.m */; }; 21 | EB57C78612EDC270007BFEF6 /* EnteringValue.m in Sources */ = {isa = PBXBuildFile; fileRef = EB57C78512EDC270007BFEF6 /* EnteringValue.m */; }; 22 | EB57C79112EDC5C6007BFEF6 /* EnteringValue.m in Sources */ = {isa = PBXBuildFile; fileRef = EB57C78512EDC270007BFEF6 /* EnteringValue.m */; }; 23 | EB678B0712E8090800B50CDB /* Calcurator.m in Sources */ = {isa = PBXBuildFile; fileRef = EB678B0612E8090800B50CDB /* Calcurator.m */; }; 24 | EB678B4412E85ABD00B50CDB /* CalcuratorTest.m in Sources */ = {isa = PBXBuildFile; fileRef = EB678B4212E85AA900B50CDB /* CalcuratorTest.m */; }; 25 | EB678B4512E85AC200B50CDB /* Calcurator.m in Sources */ = {isa = PBXBuildFile; fileRef = EB678B0612E8090800B50CDB /* Calcurator.m */; }; 26 | EBFF926512E94EFC000FDEF8 /* CalcEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFF926412E94EFC000FDEF8 /* CalcEngine.m */; }; 27 | EBFF926812E94F8C000FDEF8 /* CalcEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFF926412E94EFC000FDEF8 /* CalcEngine.m */; }; 28 | EBFF92F412E9AEE5000FDEF8 /* CalcTyper.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFF92F312E9AEE5000FDEF8 /* CalcTyper.m */; }; 29 | EBFF92F912E9AF2D000FDEF8 /* CalcTyperTest.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFF92F812E9AF2D000FDEF8 /* CalcTyperTest.m */; }; 30 | EBFF934C12EBB71A000FDEF8 /* MockCalculator.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFF934B12EBB71A000FDEF8 /* MockCalculator.m */; }; 31 | /* End PBXBuildFile section */ 32 | 33 | /* Begin PBXContainerItemProxy section */ 34 | EB678B4C12E85BA100B50CDB /* PBXContainerItemProxy */ = { 35 | isa = PBXContainerItemProxy; 36 | containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; 37 | proxyType = 1; 38 | remoteGlobalIDString = EB678B3812E85A2F00B50CDB; 39 | remoteInfo = LogicTests; 40 | }; 41 | /* End PBXContainerItemProxy section */ 42 | 43 | /* Begin PBXFileReference section */ 44 | 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 45 | 1D3623240D0F684500981E51 /* Jagtaku_iPhoneAppAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Jagtaku_iPhoneAppAppDelegate.h; sourceTree = ""; }; 46 | 1D3623250D0F684500981E51 /* Jagtaku_iPhoneAppAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Jagtaku_iPhoneAppAppDelegate.m; sourceTree = ""; }; 47 | 1D6058910D05DD3D006BFB54 /* Jagtaku-iPhoneApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Jagtaku-iPhoneApp.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 49 | 280E754A0DD40C5E005A515E /* FlipsideView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FlipsideView.xib; sourceTree = ""; }; 50 | 280E754B0DD40C5E005A515E /* MainView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainView.xib; sourceTree = ""; }; 51 | 280E754C0DD40C5E005A515E /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; 52 | 288765580DF743DE002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 53 | 289233A80DB2D0DB0083E9F9 /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainViewController.h; path = Classes/MainViewController.h; sourceTree = ""; }; 54 | 289233A90DB2D0DB0083E9F9 /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MainViewController.m; path = Classes/MainViewController.m; sourceTree = ""; }; 55 | 289233AC0DB2D0DB0083E9F9 /* FlipsideViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FlipsideViewController.h; path = Classes/FlipsideViewController.h; sourceTree = ""; }; 56 | 289233AD0DB2D0DB0083E9F9 /* FlipsideViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FlipsideViewController.m; path = Classes/FlipsideViewController.m; sourceTree = ""; }; 57 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 58 | 32CA4F630368D1EE00C91783 /* Jagtaku_iPhoneApp_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Jagtaku_iPhoneApp_Prefix.pch; sourceTree = ""; }; 59 | 8D1107310486CEB800E47090 /* Jagtaku_iPhoneApp-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Jagtaku_iPhoneApp-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; 60 | EB3D25B612F0F2A900501B63 /* CalcAssistTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalcAssistTest.h; sourceTree = ""; }; 61 | EB3D25B712F0F2A900501B63 /* CalcAssistTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CalcAssistTest.m; sourceTree = ""; }; 62 | EB57C78412EDC270007BFEF6 /* EnteringValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnteringValue.h; sourceTree = ""; }; 63 | EB57C78512EDC270007BFEF6 /* EnteringValue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnteringValue.m; sourceTree = ""; }; 64 | EB678B0512E8090800B50CDB /* Calcurator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Calcurator.h; sourceTree = ""; }; 65 | EB678B0612E8090800B50CDB /* Calcurator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Calcurator.m; sourceTree = ""; }; 66 | EB678B3912E85A2F00B50CDB /* LogicTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LogicTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | EB678B3A12E85A2F00B50CDB /* LogicTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "LogicTests-Info.plist"; sourceTree = ""; }; 68 | EB678B4112E85AA900B50CDB /* CalcuratorTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalcuratorTest.h; sourceTree = ""; }; 69 | EB678B4212E85AA900B50CDB /* CalcuratorTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CalcuratorTest.m; sourceTree = ""; }; 70 | EBFF926312E94EFC000FDEF8 /* CalcEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalcEngine.h; sourceTree = ""; }; 71 | EBFF926412E94EFC000FDEF8 /* CalcEngine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CalcEngine.m; sourceTree = ""; }; 72 | EBFF92F212E9AEE5000FDEF8 /* CalcTyper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalcTyper.h; sourceTree = ""; }; 73 | EBFF92F312E9AEE5000FDEF8 /* CalcTyper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CalcTyper.m; sourceTree = ""; }; 74 | EBFF92F712E9AF2D000FDEF8 /* CalcTyperTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalcTyperTest.h; sourceTree = ""; }; 75 | EBFF92F812E9AF2D000FDEF8 /* CalcTyperTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CalcTyperTest.m; sourceTree = ""; }; 76 | EBFF934A12EBB71A000FDEF8 /* MockCalculator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockCalculator.h; sourceTree = ""; }; 77 | EBFF934B12EBB71A000FDEF8 /* MockCalculator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MockCalculator.m; sourceTree = ""; }; 78 | /* End PBXFileReference section */ 79 | 80 | /* Begin PBXFrameworksBuildPhase section */ 81 | 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { 82 | isa = PBXFrameworksBuildPhase; 83 | buildActionMask = 2147483647; 84 | files = ( 85 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, 86 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, 87 | 288765590DF743DE002DB57D /* CoreGraphics.framework in Frameworks */, 88 | ); 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | EB678B3612E85A2F00B50CDB /* Frameworks */ = { 92 | isa = PBXFrameworksBuildPhase; 93 | buildActionMask = 2147483647; 94 | files = ( 95 | ); 96 | runOnlyForDeploymentPostprocessing = 0; 97 | }; 98 | /* End PBXFrameworksBuildPhase section */ 99 | 100 | /* Begin PBXGroup section */ 101 | 080E96DDFE201D6D7F000001 /* Application Delegate */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | 1D3623240D0F684500981E51 /* Jagtaku_iPhoneAppAppDelegate.h */, 105 | 1D3623250D0F684500981E51 /* Jagtaku_iPhoneAppAppDelegate.m */, 106 | ); 107 | name = "Application Delegate"; 108 | path = Classes; 109 | sourceTree = ""; 110 | }; 111 | 19C28FACFE9D520D11CA2CBB /* Products */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | 1D6058910D05DD3D006BFB54 /* Jagtaku-iPhoneApp.app */, 115 | EB678B3912E85A2F00B50CDB /* LogicTests.octest */, 116 | ); 117 | name = Products; 118 | sourceTree = ""; 119 | }; 120 | 281C6CD70DB2D82200F60ACC /* Flipside View */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | 289233AC0DB2D0DB0083E9F9 /* FlipsideViewController.h */, 124 | 289233AD0DB2D0DB0083E9F9 /* FlipsideViewController.m */, 125 | 280E754A0DD40C5E005A515E /* FlipsideView.xib */, 126 | ); 127 | name = "Flipside View"; 128 | sourceTree = ""; 129 | }; 130 | 289233A00DB2D0730083E9F9 /* Main View */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | 289233A80DB2D0DB0083E9F9 /* MainViewController.h */, 134 | 289233A90DB2D0DB0083E9F9 /* MainViewController.m */, 135 | 280E754B0DD40C5E005A515E /* MainView.xib */, 136 | ); 137 | name = "Main View"; 138 | sourceTree = ""; 139 | }; 140 | 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | EB678B4012E85A4E00B50CDB /* Tests */, 144 | EB678B0412E808E900B50CDB /* Models */, 145 | 289233A00DB2D0730083E9F9 /* Main View */, 146 | 281C6CD70DB2D82200F60ACC /* Flipside View */, 147 | 080E96DDFE201D6D7F000001 /* Application Delegate */, 148 | 29B97315FDCFA39411CA2CEA /* Other Sources */, 149 | 29B97317FDCFA39411CA2CEA /* Resources */, 150 | 29B97323FDCFA39411CA2CEA /* Frameworks */, 151 | 19C28FACFE9D520D11CA2CBB /* Products */, 152 | EB678B3A12E85A2F00B50CDB /* LogicTests-Info.plist */, 153 | ); 154 | name = CustomTemplate; 155 | sourceTree = ""; 156 | }; 157 | 29B97315FDCFA39411CA2CEA /* Other Sources */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | 32CA4F630368D1EE00C91783 /* Jagtaku_iPhoneApp_Prefix.pch */, 161 | 29B97316FDCFA39411CA2CEA /* main.m */, 162 | ); 163 | name = "Other Sources"; 164 | sourceTree = ""; 165 | }; 166 | 29B97317FDCFA39411CA2CEA /* Resources */ = { 167 | isa = PBXGroup; 168 | children = ( 169 | 280E754C0DD40C5E005A515E /* MainWindow.xib */, 170 | 8D1107310486CEB800E47090 /* Jagtaku_iPhoneApp-Info.plist */, 171 | ); 172 | name = Resources; 173 | sourceTree = ""; 174 | }; 175 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { 176 | isa = PBXGroup; 177 | children = ( 178 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, 179 | 1D30AB110D05D00D00671497 /* Foundation.framework */, 180 | 288765580DF743DE002DB57D /* CoreGraphics.framework */, 181 | ); 182 | name = Frameworks; 183 | sourceTree = ""; 184 | }; 185 | EB678B0412E808E900B50CDB /* Models */ = { 186 | isa = PBXGroup; 187 | children = ( 188 | EB678B0512E8090800B50CDB /* Calcurator.h */, 189 | EB678B0612E8090800B50CDB /* Calcurator.m */, 190 | EBFF926312E94EFC000FDEF8 /* CalcEngine.h */, 191 | EBFF926412E94EFC000FDEF8 /* CalcEngine.m */, 192 | EB57C78412EDC270007BFEF6 /* EnteringValue.h */, 193 | EB57C78512EDC270007BFEF6 /* EnteringValue.m */, 194 | EBFF92F212E9AEE5000FDEF8 /* CalcTyper.h */, 195 | EBFF92F312E9AEE5000FDEF8 /* CalcTyper.m */, 196 | ); 197 | name = Models; 198 | path = Classes; 199 | sourceTree = ""; 200 | }; 201 | EB678B4012E85A4E00B50CDB /* Tests */ = { 202 | isa = PBXGroup; 203 | children = ( 204 | EB678B4112E85AA900B50CDB /* CalcuratorTest.h */, 205 | EB678B4212E85AA900B50CDB /* CalcuratorTest.m */, 206 | EB3D25B612F0F2A900501B63 /* CalcAssistTest.h */, 207 | EB3D25B712F0F2A900501B63 /* CalcAssistTest.m */, 208 | EBFF92F712E9AF2D000FDEF8 /* CalcTyperTest.h */, 209 | EBFF92F812E9AF2D000FDEF8 /* CalcTyperTest.m */, 210 | EBFF935D12EBB97B000FDEF8 /* Mocks */, 211 | ); 212 | path = Tests; 213 | sourceTree = ""; 214 | }; 215 | EBFF935D12EBB97B000FDEF8 /* Mocks */ = { 216 | isa = PBXGroup; 217 | children = ( 218 | EBFF934A12EBB71A000FDEF8 /* MockCalculator.h */, 219 | EBFF934B12EBB71A000FDEF8 /* MockCalculator.m */, 220 | ); 221 | name = Mocks; 222 | sourceTree = ""; 223 | }; 224 | /* End PBXGroup section */ 225 | 226 | /* Begin PBXNativeTarget section */ 227 | 1D6058900D05DD3D006BFB54 /* Jagtaku-iPhoneApp */ = { 228 | isa = PBXNativeTarget; 229 | buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Jagtaku-iPhoneApp" */; 230 | buildPhases = ( 231 | 1D60588D0D05DD3D006BFB54 /* Resources */, 232 | 1D60588E0D05DD3D006BFB54 /* Sources */, 233 | 1D60588F0D05DD3D006BFB54 /* Frameworks */, 234 | ); 235 | buildRules = ( 236 | ); 237 | dependencies = ( 238 | EB678B4D12E85BA100B50CDB /* PBXTargetDependency */, 239 | ); 240 | name = "Jagtaku-iPhoneApp"; 241 | productName = "Jagtaku-iPhoneApp"; 242 | productReference = 1D6058910D05DD3D006BFB54 /* Jagtaku-iPhoneApp.app */; 243 | productType = "com.apple.product-type.application"; 244 | }; 245 | EB678B3812E85A2F00B50CDB /* LogicTests */ = { 246 | isa = PBXNativeTarget; 247 | buildConfigurationList = EB678B3E12E85A3000B50CDB /* Build configuration list for PBXNativeTarget "LogicTests" */; 248 | buildPhases = ( 249 | EB678B3412E85A2F00B50CDB /* Resources */, 250 | EB678B3512E85A2F00B50CDB /* Sources */, 251 | EB678B3612E85A2F00B50CDB /* Frameworks */, 252 | EB678B3712E85A2F00B50CDB /* ShellScript */, 253 | ); 254 | buildRules = ( 255 | ); 256 | dependencies = ( 257 | ); 258 | name = LogicTests; 259 | productName = LogicTests; 260 | productReference = EB678B3912E85A2F00B50CDB /* LogicTests.octest */; 261 | productType = "com.apple.product-type.bundle"; 262 | }; 263 | /* End PBXNativeTarget section */ 264 | 265 | /* Begin PBXProject section */ 266 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 267 | isa = PBXProject; 268 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Jagtaku-iPhoneApp" */; 269 | compatibilityVersion = "Xcode 3.2"; 270 | developmentRegion = English; 271 | hasScannedForEncodings = 1; 272 | knownRegions = ( 273 | English, 274 | Japanese, 275 | French, 276 | German, 277 | en, 278 | ); 279 | mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; 280 | projectDirPath = ""; 281 | projectRoot = ""; 282 | targets = ( 283 | 1D6058900D05DD3D006BFB54 /* Jagtaku-iPhoneApp */, 284 | EB678B3812E85A2F00B50CDB /* LogicTests */, 285 | ); 286 | }; 287 | /* End PBXProject section */ 288 | 289 | /* Begin PBXResourcesBuildPhase section */ 290 | 1D60588D0D05DD3D006BFB54 /* Resources */ = { 291 | isa = PBXResourcesBuildPhase; 292 | buildActionMask = 2147483647; 293 | files = ( 294 | 280E754D0DD40C5E005A515E /* FlipsideView.xib in Resources */, 295 | 280E754E0DD40C5E005A515E /* MainView.xib in Resources */, 296 | 280E754F0DD40C5E005A515E /* MainWindow.xib in Resources */, 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | }; 300 | EB678B3412E85A2F00B50CDB /* Resources */ = { 301 | isa = PBXResourcesBuildPhase; 302 | buildActionMask = 2147483647; 303 | files = ( 304 | ); 305 | runOnlyForDeploymentPostprocessing = 0; 306 | }; 307 | /* End PBXResourcesBuildPhase section */ 308 | 309 | /* Begin PBXShellScriptBuildPhase section */ 310 | EB678B3712E85A2F00B50CDB /* ShellScript */ = { 311 | isa = PBXShellScriptBuildPhase; 312 | buildActionMask = 2147483647; 313 | files = ( 314 | ); 315 | inputPaths = ( 316 | ); 317 | outputPaths = ( 318 | ); 319 | runOnlyForDeploymentPostprocessing = 0; 320 | shellPath = /bin/sh; 321 | shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; 322 | }; 323 | /* End PBXShellScriptBuildPhase section */ 324 | 325 | /* Begin PBXSourcesBuildPhase section */ 326 | 1D60588E0D05DD3D006BFB54 /* Sources */ = { 327 | isa = PBXSourcesBuildPhase; 328 | buildActionMask = 2147483647; 329 | files = ( 330 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */, 331 | 1D3623260D0F684500981E51 /* Jagtaku_iPhoneAppAppDelegate.m in Sources */, 332 | 289233AE0DB2D0DB0083E9F9 /* MainViewController.m in Sources */, 333 | 289233B00DB2D0DB0083E9F9 /* FlipsideViewController.m in Sources */, 334 | EB678B0712E8090800B50CDB /* Calcurator.m in Sources */, 335 | EBFF926512E94EFC000FDEF8 /* CalcEngine.m in Sources */, 336 | EB57C79112EDC5C6007BFEF6 /* EnteringValue.m in Sources */, 337 | ); 338 | runOnlyForDeploymentPostprocessing = 0; 339 | }; 340 | EB678B3512E85A2F00B50CDB /* Sources */ = { 341 | isa = PBXSourcesBuildPhase; 342 | buildActionMask = 2147483647; 343 | files = ( 344 | EB678B4412E85ABD00B50CDB /* CalcuratorTest.m in Sources */, 345 | EB678B4512E85AC200B50CDB /* Calcurator.m in Sources */, 346 | EBFF926812E94F8C000FDEF8 /* CalcEngine.m in Sources */, 347 | EBFF92F412E9AEE5000FDEF8 /* CalcTyper.m in Sources */, 348 | EBFF92F912E9AF2D000FDEF8 /* CalcTyperTest.m in Sources */, 349 | EBFF934C12EBB71A000FDEF8 /* MockCalculator.m in Sources */, 350 | EB57C78612EDC270007BFEF6 /* EnteringValue.m in Sources */, 351 | EB3D262112F109D000501B63 /* CalcAssistTest.m in Sources */, 352 | ); 353 | runOnlyForDeploymentPostprocessing = 0; 354 | }; 355 | /* End PBXSourcesBuildPhase section */ 356 | 357 | /* Begin PBXTargetDependency section */ 358 | EB678B4D12E85BA100B50CDB /* PBXTargetDependency */ = { 359 | isa = PBXTargetDependency; 360 | target = EB678B3812E85A2F00B50CDB /* LogicTests */; 361 | targetProxy = EB678B4C12E85BA100B50CDB /* PBXContainerItemProxy */; 362 | }; 363 | /* End PBXTargetDependency section */ 364 | 365 | /* Begin XCBuildConfiguration section */ 366 | 1D6058940D05DD3E006BFB54 /* Debug */ = { 367 | isa = XCBuildConfiguration; 368 | buildSettings = { 369 | ALWAYS_SEARCH_USER_PATHS = NO; 370 | COPY_PHASE_STRIP = NO; 371 | GCC_DYNAMIC_NO_PIC = NO; 372 | GCC_OPTIMIZATION_LEVEL = 0; 373 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 374 | GCC_PREFIX_HEADER = Jagtaku_iPhoneApp_Prefix.pch; 375 | INFOPLIST_FILE = "Jagtaku_iPhoneApp-Info.plist"; 376 | PRODUCT_NAME = "Jagtaku-iPhoneApp"; 377 | }; 378 | name = Debug; 379 | }; 380 | 1D6058950D05DD3E006BFB54 /* Release */ = { 381 | isa = XCBuildConfiguration; 382 | buildSettings = { 383 | ALWAYS_SEARCH_USER_PATHS = NO; 384 | COPY_PHASE_STRIP = YES; 385 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 386 | GCC_PREFIX_HEADER = Jagtaku_iPhoneApp_Prefix.pch; 387 | INFOPLIST_FILE = "Jagtaku_iPhoneApp-Info.plist"; 388 | PRODUCT_NAME = "Jagtaku-iPhoneApp"; 389 | VALIDATE_PRODUCT = YES; 390 | }; 391 | name = Release; 392 | }; 393 | C01FCF4F08A954540054247B /* Debug */ = { 394 | isa = XCBuildConfiguration; 395 | buildSettings = { 396 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 397 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 398 | GCC_C_LANGUAGE_STANDARD = c99; 399 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 400 | GCC_WARN_UNUSED_VARIABLE = YES; 401 | PREBINDING = NO; 402 | SDKROOT = iphoneos; 403 | }; 404 | name = Debug; 405 | }; 406 | C01FCF5008A954540054247B /* Release */ = { 407 | isa = XCBuildConfiguration; 408 | buildSettings = { 409 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 410 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 411 | GCC_C_LANGUAGE_STANDARD = c99; 412 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 413 | GCC_WARN_UNUSED_VARIABLE = YES; 414 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 415 | PREBINDING = NO; 416 | SDKROOT = iphoneos; 417 | }; 418 | name = Release; 419 | }; 420 | EB678B3C12E85A3000B50CDB /* Debug */ = { 421 | isa = XCBuildConfiguration; 422 | buildSettings = { 423 | ALWAYS_SEARCH_USER_PATHS = NO; 424 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 425 | COPY_PHASE_STRIP = NO; 426 | FRAMEWORK_SEARCH_PATHS = ( 427 | "\"$(SDKROOT)/Developer/Library/Frameworks\"", 428 | "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", 429 | ); 430 | GCC_DYNAMIC_NO_PIC = NO; 431 | GCC_ENABLE_FIX_AND_CONTINUE = NO; 432 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 433 | GCC_OPTIMIZATION_LEVEL = 0; 434 | INFOPLIST_FILE = "LogicTests-Info.plist"; 435 | OTHER_LDFLAGS = ( 436 | "-framework", 437 | Foundation, 438 | "-framework", 439 | SenTestingKit, 440 | "-framework", 441 | UIKit, 442 | ); 443 | PREBINDING = NO; 444 | PRODUCT_NAME = LogicTests; 445 | SDKROOT = iphoneos; 446 | WRAPPER_EXTENSION = octest; 447 | }; 448 | name = Debug; 449 | }; 450 | EB678B3D12E85A3000B50CDB /* Release */ = { 451 | isa = XCBuildConfiguration; 452 | buildSettings = { 453 | ALWAYS_SEARCH_USER_PATHS = NO; 454 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 455 | COPY_PHASE_STRIP = YES; 456 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 457 | FRAMEWORK_SEARCH_PATHS = ( 458 | "\"$(SDKROOT)/Developer/Library/Frameworks\"", 459 | "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", 460 | ); 461 | GCC_ENABLE_FIX_AND_CONTINUE = NO; 462 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 463 | INFOPLIST_FILE = "LogicTests-Info.plist"; 464 | OTHER_LDFLAGS = ( 465 | "-framework", 466 | Foundation, 467 | "-framework", 468 | SenTestingKit, 469 | "-framework", 470 | UIKit, 471 | ); 472 | PREBINDING = NO; 473 | PRODUCT_NAME = LogicTests; 474 | SDKROOT = iphoneos; 475 | WRAPPER_EXTENSION = octest; 476 | ZERO_LINK = NO; 477 | }; 478 | name = Release; 479 | }; 480 | /* End XCBuildConfiguration section */ 481 | 482 | /* Begin XCConfigurationList section */ 483 | 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Jagtaku-iPhoneApp" */ = { 484 | isa = XCConfigurationList; 485 | buildConfigurations = ( 486 | 1D6058940D05DD3E006BFB54 /* Debug */, 487 | 1D6058950D05DD3E006BFB54 /* Release */, 488 | ); 489 | defaultConfigurationIsVisible = 0; 490 | defaultConfigurationName = Release; 491 | }; 492 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Jagtaku-iPhoneApp" */ = { 493 | isa = XCConfigurationList; 494 | buildConfigurations = ( 495 | C01FCF4F08A954540054247B /* Debug */, 496 | C01FCF5008A954540054247B /* Release */, 497 | ); 498 | defaultConfigurationIsVisible = 0; 499 | defaultConfigurationName = Release; 500 | }; 501 | EB678B3E12E85A3000B50CDB /* Build configuration list for PBXNativeTarget "LogicTests" */ = { 502 | isa = XCConfigurationList; 503 | buildConfigurations = ( 504 | EB678B3C12E85A3000B50CDB /* Debug */, 505 | EB678B3D12E85A3000B50CDB /* Release */, 506 | ); 507 | defaultConfigurationIsVisible = 0; 508 | defaultConfigurationName = Release; 509 | }; 510 | /* End XCConfigurationList section */ 511 | }; 512 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; 513 | } 514 | -------------------------------------------------------------------------------- /MainView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1056 5 | 10J567 6 | 823 7 | 1038.35 8 | 462.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 132 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | YES 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | YES 23 | 24 | YES 25 | 26 | 27 | YES 28 | 29 | 30 | 31 | YES 32 | 33 | IBFilesOwner 34 | IBCocoaTouchFramework 35 | 36 | 37 | IBFirstResponder 38 | IBCocoaTouchFramework 39 | 40 | 41 | 42 | 274 43 | 44 | YES 45 | 46 | 47 | 265 48 | {{289, 11}, {18, 19}} 49 | 50 | NO 51 | NO 52 | IBCocoaTouchFramework 53 | 0 54 | 0 55 | 56 | Helvetica-Bold 57 | 15 58 | 16 59 | 60 | 3 61 | YES 62 | 63 | 1 64 | MSAxIDEAA 65 | 66 | 67 | 1 68 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 69 | 70 | 71 | 3 72 | MAA 73 | 74 | 75 | 76 | 77 | 292 78 | {{20, 12}, {280, 21}} 79 | 80 | NO 81 | YES 82 | 7 83 | NO 84 | IBCocoaTouchFramework 85 | Result 86 | 87 | 1 88 | MCAwIDAAA 89 | 90 | 91 | 3 92 | MQA 93 | 94 | 1 95 | 6 96 | 2 97 | 3 98 | 99 | 100 | 101 | 292 102 | {{20, 41}, {280, 21}} 103 | 104 | NO 105 | YES 106 | 7 107 | NO 108 | IBCocoaTouchFramework 109 | Entering 110 | 111 | 112 | 1 113 | 6 114 | 2 115 | 3 116 | 117 | 118 | 119 | 292 120 | {{20, 66}, {64, 56}} 121 | 122 | NO 123 | IBCocoaTouchFramework 124 | 0 125 | 0 126 | 127 | 1 128 | c 129 | 130 | 131 | 1 132 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 133 | 134 | 135 | 3 136 | MC41AA 137 | 138 | 139 | 140 | 141 | 292 142 | {{92, 66}, {64, 57}} 143 | 144 | NO 145 | IBCocoaTouchFramework 146 | 0 147 | 0 148 | 149 | 1 150 | +/- 151 | 152 | 153 | 1 154 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 155 | 156 | 157 | 158 | 159 | 160 | 292 161 | {{164, 66}, {64, 57}} 162 | 163 | NO 164 | IBCocoaTouchFramework 165 | 0 166 | 0 167 | 168 | 1 169 | ÷ 170 | 171 | 172 | 1 173 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 174 | 175 | 176 | 177 | 178 | 179 | 292 180 | {{236, 66}, {64, 57}} 181 | 182 | NO 183 | IBCocoaTouchFramework 184 | 0 185 | 0 186 | 187 | 1 188 | x 189 | 190 | 191 | 1 192 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 193 | 194 | 195 | 196 | 197 | 198 | 292 199 | {{20, 131}, {64, 56}} 200 | 201 | NO 202 | IBCocoaTouchFramework 203 | 0 204 | 0 205 | 206 | 1 207 | 7 208 | 209 | 210 | 1 211 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 212 | 213 | 214 | 215 | 216 | 217 | 292 218 | {{92, 131}, {64, 57}} 219 | 220 | NO 221 | IBCocoaTouchFramework 222 | 0 223 | 0 224 | 225 | 1 226 | 8 227 | 228 | 229 | 1 230 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 231 | 232 | 233 | 234 | 235 | 236 | 292 237 | {{164, 131}, {64, 57}} 238 | 239 | NO 240 | IBCocoaTouchFramework 241 | 0 242 | 0 243 | 244 | 1 245 | 9 246 | 247 | 248 | 1 249 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 250 | 251 | 252 | 253 | 254 | 255 | 292 256 | {{236, 131}, {64, 57}} 257 | 258 | NO 259 | IBCocoaTouchFramework 260 | 0 261 | 0 262 | 263 | 1 264 | - 265 | 266 | 267 | 1 268 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 269 | 270 | 271 | 272 | 273 | 274 | 292 275 | {{20, 196}, {64, 56}} 276 | 277 | NO 278 | IBCocoaTouchFramework 279 | 0 280 | 0 281 | 282 | 1 283 | 4 284 | 285 | 286 | 1 287 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 288 | 289 | 290 | 291 | 292 | 293 | 292 294 | {{92, 196}, {64, 57}} 295 | 296 | NO 297 | IBCocoaTouchFramework 298 | 0 299 | 0 300 | 301 | 1 302 | 5 303 | 304 | 305 | 1 306 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 307 | 308 | 309 | 310 | 311 | 312 | 292 313 | {{164, 196}, {64, 57}} 314 | 315 | NO 316 | IBCocoaTouchFramework 317 | 0 318 | 0 319 | 320 | 1 321 | 6 322 | 323 | 324 | 1 325 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 326 | 327 | 328 | 329 | 330 | 331 | 292 332 | {{236, 196}, {64, 57}} 333 | 334 | NO 335 | IBCocoaTouchFramework 336 | 0 337 | 0 338 | 339 | 1 340 | + 341 | 342 | 343 | 1 344 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 345 | 346 | 347 | 348 | 349 | 350 | 292 351 | {{20, 261}, {64, 56}} 352 | 353 | NO 354 | IBCocoaTouchFramework 355 | 0 356 | 0 357 | 358 | 1 359 | 1 360 | 361 | 362 | 1 363 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 364 | 365 | 366 | 367 | 368 | 369 | 292 370 | {{92, 261}, {64, 57}} 371 | 372 | NO 373 | IBCocoaTouchFramework 374 | 0 375 | 0 376 | 377 | 1 378 | 2 379 | 380 | 381 | 1 382 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 383 | 384 | 385 | 386 | 387 | 388 | 292 389 | {{164, 261}, {64, 57}} 390 | 391 | NO 392 | IBCocoaTouchFramework 393 | 0 394 | 0 395 | 396 | 1 397 | 3 398 | 399 | 400 | 1 401 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 402 | 403 | 404 | 405 | 406 | 407 | 292 408 | {{236, 261}, {64, 57}} 409 | 410 | NO 411 | IBCocoaTouchFramework 412 | 0 413 | 0 414 | 415 | 1 416 | 417 | 418 | 1 419 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 420 | 421 | 422 | 423 | 424 | 425 | 292 426 | {{20, 326}, {64, 56}} 427 | 428 | NO 429 | IBCocoaTouchFramework 430 | 0 431 | 0 432 | 433 | 1 434 | 0 435 | 436 | 437 | 1 438 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 439 | 440 | 441 | 442 | 443 | 444 | 292 445 | {{92, 326}, {64, 57}} 446 | 447 | NO 448 | IBCocoaTouchFramework 449 | 0 450 | 0 451 | 452 | 1 453 | . 454 | 455 | 456 | 1 457 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 458 | 459 | 460 | 461 | 462 | 463 | 292 464 | {{164, 326}, {64, 57}} 465 | 466 | NO 467 | IBCocoaTouchFramework 468 | 0 469 | 0 470 | 471 | 1 472 | = 473 | 474 | 475 | 1 476 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 477 | 478 | 479 | 480 | 481 | 482 | 292 483 | {{236, 326}, {64, 57}} 484 | 485 | NO 486 | IBCocoaTouchFramework 487 | 0 488 | 0 489 | 490 | 1 491 | 492 | 493 | 1 494 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 495 | 496 | 497 | 498 | 499 | 500 | 292 501 | {{20, 391}, {64, 56}} 502 | 503 | NO 504 | IBCocoaTouchFramework 505 | 0 506 | 0 507 | 508 | 1 509 | 510 | 511 | 512 | 1 513 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 514 | 515 | 516 | 517 | 518 | 519 | 292 520 | {{92, 391}, {64, 57}} 521 | 522 | NO 523 | IBCocoaTouchFramework 524 | 0 525 | 0 526 | 527 | 1 528 | 529 | 530 | 531 | 1 532 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 533 | 534 | 535 | 536 | 537 | 538 | 292 539 | {{164, 391}, {64, 57}} 540 | 541 | NO 542 | IBCocoaTouchFramework 543 | 0 544 | 0 545 | 546 | 1 547 | 548 | 549 | 550 | 1 551 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 552 | 553 | 554 | 555 | 556 | 557 | 292 558 | {{236, 391}, {64, 57}} 559 | 560 | NO 561 | IBCocoaTouchFramework 562 | 0 563 | 0 564 | 565 | 1 566 | 567 | 568 | 569 | 1 570 | MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA 571 | 572 | 573 | 574 | 575 | {320, 460} 576 | 577 | 578 | NO 579 | 580 | IBCocoaTouchFramework 581 | 582 | 583 | 584 | 585 | YES 586 | 587 | 588 | view 589 | 590 | 591 | 592 | 35 593 | 594 | 595 | 596 | showInfo: 597 | 598 | 599 | 7 600 | 601 | 38 602 | 603 | 604 | 605 | enteringDisplay 606 | 607 | 608 | 609 | 65 610 | 611 | 612 | 613 | resultDisplay 614 | 615 | 616 | 617 | 66 618 | 619 | 620 | 621 | digit0 622 | 623 | 624 | 7 625 | 626 | 67 627 | 628 | 629 | 630 | digit1 631 | 632 | 633 | 7 634 | 635 | 68 636 | 637 | 638 | 639 | digit2 640 | 641 | 642 | 7 643 | 644 | 69 645 | 646 | 647 | 648 | digit3 649 | 650 | 651 | 7 652 | 653 | 70 654 | 655 | 656 | 657 | digit4 658 | 659 | 660 | 7 661 | 662 | 71 663 | 664 | 665 | 666 | digit5 667 | 668 | 669 | 7 670 | 671 | 72 672 | 673 | 674 | 675 | digit6 676 | 677 | 678 | 7 679 | 680 | 73 681 | 682 | 683 | 684 | digit7 685 | 686 | 687 | 7 688 | 689 | 74 690 | 691 | 692 | 693 | digit8 694 | 695 | 696 | 7 697 | 698 | 75 699 | 700 | 701 | 702 | digit9 703 | 704 | 705 | 7 706 | 707 | 76 708 | 709 | 710 | 711 | div 712 | 713 | 714 | 7 715 | 716 | 77 717 | 718 | 719 | 720 | man 721 | 722 | 723 | 7 724 | 725 | 78 726 | 727 | 728 | 729 | minus 730 | 731 | 732 | 7 733 | 734 | 79 735 | 736 | 737 | 738 | plus 739 | 740 | 741 | 7 742 | 743 | 80 744 | 745 | 746 | 747 | ouku 748 | 749 | 750 | 7 751 | 752 | 81 753 | 754 | 755 | 756 | period 757 | 758 | 759 | 7 760 | 761 | 82 762 | 763 | 764 | 765 | result 766 | 767 | 768 | 7 769 | 770 | 83 771 | 772 | 773 | 774 | sen 775 | 776 | 777 | 7 778 | 779 | 84 780 | 781 | 782 | 783 | mul 784 | 785 | 786 | 7 787 | 788 | 85 789 | 790 | 791 | 792 | plusMinus 793 | 794 | 795 | 7 796 | 797 | 86 798 | 799 | 800 | 801 | clear 802 | 803 | 804 | 7 805 | 806 | 87 807 | 808 | 809 | 810 | hyaku 811 | 812 | 813 | 7 814 | 815 | 88 816 | 817 | 818 | 819 | 820 | YES 821 | 822 | 0 823 | 824 | 825 | 826 | 827 | 828 | -1 829 | 830 | 831 | File's Owner 832 | 833 | 834 | -2 835 | 836 | 837 | 838 | 839 | 34 840 | 841 | 842 | YES 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 871 | 872 | 873 | 874 | 36 875 | 876 | 877 | 878 | 879 | 39 880 | 881 | 882 | 883 | 884 | 40 885 | 886 | 887 | 888 | 889 | 41 890 | 891 | 892 | 893 | 894 | 42 895 | 896 | 897 | 898 | 899 | 43 900 | 901 | 902 | 903 | 904 | 44 905 | 906 | 907 | 908 | 909 | 45 910 | 911 | 912 | 913 | 914 | 46 915 | 916 | 917 | 918 | 919 | 47 920 | 921 | 922 | 923 | 924 | 48 925 | 926 | 927 | 928 | 929 | 49 930 | 931 | 932 | 933 | 934 | 50 935 | 936 | 937 | 938 | 939 | 51 940 | 941 | 942 | 943 | 944 | 52 945 | 946 | 947 | 948 | 949 | 53 950 | 951 | 952 | 953 | 954 | 54 955 | 956 | 957 | 958 | 959 | 55 960 | 961 | 962 | 963 | 964 | 56 965 | 966 | 967 | 968 | 969 | 57 970 | 971 | 972 | 973 | 974 | 59 975 | 976 | 977 | 978 | 979 | 60 980 | 981 | 982 | 983 | 984 | 58 985 | 986 | 987 | 988 | 989 | 61 990 | 991 | 992 | 993 | 994 | 62 995 | 996 | 997 | 998 | 999 | 63 1000 | 1001 | 1002 | 1003 | 1004 | 64 1005 | 1006 | 1007 | 1008 | 1009 | 1010 | 1011 | YES 1012 | 1013 | YES 1014 | -1.CustomClassName 1015 | -2.CustomClassName 1016 | 34.IBEditorWindowLastContentRect 1017 | 34.IBPluginDependency 1018 | 36.IBPluginDependency 1019 | 36.IBViewBoundsToFrameTransform 1020 | 39.IBPluginDependency 1021 | 39.IBViewBoundsToFrameTransform 1022 | 40.IBPluginDependency 1023 | 40.IBViewBoundsToFrameTransform 1024 | 41.IBPluginDependency 1025 | 41.IBViewBoundsToFrameTransform 1026 | 42.IBPluginDependency 1027 | 42.IBViewBoundsToFrameTransform 1028 | 43.IBPluginDependency 1029 | 43.IBViewBoundsToFrameTransform 1030 | 44.IBPluginDependency 1031 | 44.IBViewBoundsToFrameTransform 1032 | 45.IBPluginDependency 1033 | 45.IBViewBoundsToFrameTransform 1034 | 46.IBPluginDependency 1035 | 46.IBViewBoundsToFrameTransform 1036 | 47.IBPluginDependency 1037 | 47.IBViewBoundsToFrameTransform 1038 | 48.IBPluginDependency 1039 | 48.IBViewBoundsToFrameTransform 1040 | 49.IBPluginDependency 1041 | 49.IBViewBoundsToFrameTransform 1042 | 50.IBPluginDependency 1043 | 50.IBViewBoundsToFrameTransform 1044 | 51.IBPluginDependency 1045 | 51.IBViewBoundsToFrameTransform 1046 | 52.IBPluginDependency 1047 | 52.IBViewBoundsToFrameTransform 1048 | 53.IBPluginDependency 1049 | 53.IBViewBoundsToFrameTransform 1050 | 54.IBPluginDependency 1051 | 54.IBViewBoundsToFrameTransform 1052 | 55.IBPluginDependency 1053 | 55.IBViewBoundsToFrameTransform 1054 | 56.IBPluginDependency 1055 | 56.IBViewBoundsToFrameTransform 1056 | 57.IBPluginDependency 1057 | 57.IBViewBoundsToFrameTransform 1058 | 58.IBPluginDependency 1059 | 58.IBViewBoundsToFrameTransform 1060 | 59.IBPluginDependency 1061 | 59.IBViewBoundsToFrameTransform 1062 | 60.IBPluginDependency 1063 | 60.IBViewBoundsToFrameTransform 1064 | 61.IBPluginDependency 1065 | 61.IBViewBoundsToFrameTransform 1066 | 62.IBPluginDependency 1067 | 62.IBViewBoundsToFrameTransform 1068 | 63.IBPluginDependency 1069 | 63.IBViewBoundsToFrameTransform 1070 | 64.IBPluginDependency 1071 | 64.IBViewBoundsToFrameTransform 1072 | 1073 | 1074 | YES 1075 | MainViewController 1076 | UIResponder 1077 | {{341, 244}, {320, 480}} 1078 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1079 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1080 | 1081 | P4AAAL+AAABDjQAAw9GAAA 1082 | 1083 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1084 | 1085 | AUGgAABBQAAAA 1086 | 1087 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1088 | 1089 | P4AAAL+AAABByAAAwhAAAA 1090 | 1091 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1092 | 1093 | P4AAAL+AAABBoAAAwwwAAA 1094 | 1095 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1096 | 1097 | P4AAAL+AAABCuAAAww0AAA 1098 | 1099 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1100 | 1101 | P4AAAL+AAABDJAAAww0AAA 1102 | 1103 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1104 | 1105 | P4AAAL+AAABDbAAAww0AAA 1106 | 1107 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1108 | 1109 | P4AAAL+AAABBoAAAw00AAA 1110 | 1111 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1112 | 1113 | P4AAAL+AAABCuAAAw04AAA 1114 | 1115 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1116 | 1117 | P4AAAL+AAABDJAAAw04AAA 1118 | 1119 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1120 | 1121 | P4AAAL+AAABDbAAAw04AAA 1122 | 1123 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1124 | 1125 | P4AAAL+AAABBoAAAw4cAAA 1126 | 1127 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1128 | 1129 | P4AAAL+AAABCuAAAw4eAAA 1130 | 1131 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1132 | 1133 | P4AAAL+AAABDJAAAw4eAAA 1134 | 1135 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1136 | 1137 | P4AAAL+AAABDbAAAw4eAAA 1138 | 1139 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1140 | 1141 | P4AAAL+AAABBoAAAw6eAAA 1142 | 1143 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1144 | 1145 | P4AAAL+AAABCuAAAw6gAAA 1146 | 1147 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1148 | 1149 | P4AAAL+AAABDJAAAw6gAAA 1150 | 1151 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1152 | 1153 | P4AAAL+AAABDbAAAw6gAAA 1154 | 1155 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1156 | 1157 | AUGgAABDowAAA 1158 | 1159 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1160 | 1161 | AUK4AABDowAAA 1162 | 1163 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1164 | 1165 | AUMkAABDowAAA 1166 | 1167 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1168 | 1169 | AUNsAABDowAAA 1170 | 1171 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1172 | 1173 | P4AAAL+AAABByAAAw8CAAA 1174 | 1175 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1176 | 1177 | P4AAAL+AAABCwgAAw8EAAA 1178 | 1179 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1180 | 1181 | P4AAAL+AAABDKQAAw8EAAA 1182 | 1183 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1184 | 1185 | P4AAAL+AAABDcQAAw8EAAA 1186 | 1187 | 1188 | 1189 | 1190 | YES 1191 | 1192 | 1193 | YES 1194 | 1195 | 1196 | 1197 | 1198 | YES 1199 | 1200 | 1201 | YES 1202 | 1203 | 1204 | 1205 | 88 1206 | 1207 | 1208 | 1209 | YES 1210 | 1211 | MainViewController 1212 | UIViewController 1213 | 1214 | YES 1215 | 1216 | YES 1217 | clear 1218 | digit0 1219 | digit1 1220 | digit2 1221 | digit3 1222 | digit4 1223 | digit5 1224 | digit6 1225 | digit7 1226 | digit8 1227 | digit9 1228 | div 1229 | hyaku 1230 | man 1231 | minus 1232 | mul 1233 | ouku 1234 | period 1235 | plus 1236 | plusMinus 1237 | result 1238 | sen 1239 | showInfo: 1240 | 1241 | 1242 | YES 1243 | id 1244 | id 1245 | id 1246 | id 1247 | id 1248 | id 1249 | id 1250 | id 1251 | id 1252 | id 1253 | id 1254 | id 1255 | id 1256 | id 1257 | id 1258 | id 1259 | id 1260 | id 1261 | id 1262 | id 1263 | id 1264 | id 1265 | id 1266 | 1267 | 1268 | 1269 | YES 1270 | 1271 | YES 1272 | clear 1273 | digit0 1274 | digit1 1275 | digit2 1276 | digit3 1277 | digit4 1278 | digit5 1279 | digit6 1280 | digit7 1281 | digit8 1282 | digit9 1283 | div 1284 | hyaku 1285 | man 1286 | minus 1287 | mul 1288 | ouku 1289 | period 1290 | plus 1291 | plusMinus 1292 | result 1293 | sen 1294 | showInfo: 1295 | 1296 | 1297 | YES 1298 | 1299 | clear 1300 | id 1301 | 1302 | 1303 | digit0 1304 | id 1305 | 1306 | 1307 | digit1 1308 | id 1309 | 1310 | 1311 | digit2 1312 | id 1313 | 1314 | 1315 | digit3 1316 | id 1317 | 1318 | 1319 | digit4 1320 | id 1321 | 1322 | 1323 | digit5 1324 | id 1325 | 1326 | 1327 | digit6 1328 | id 1329 | 1330 | 1331 | digit7 1332 | id 1333 | 1334 | 1335 | digit8 1336 | id 1337 | 1338 | 1339 | digit9 1340 | id 1341 | 1342 | 1343 | div 1344 | id 1345 | 1346 | 1347 | hyaku 1348 | id 1349 | 1350 | 1351 | man 1352 | id 1353 | 1354 | 1355 | minus 1356 | id 1357 | 1358 | 1359 | mul 1360 | id 1361 | 1362 | 1363 | ouku 1364 | id 1365 | 1366 | 1367 | period 1368 | id 1369 | 1370 | 1371 | plus 1372 | id 1373 | 1374 | 1375 | plusMinus 1376 | id 1377 | 1378 | 1379 | result 1380 | id 1381 | 1382 | 1383 | sen 1384 | id 1385 | 1386 | 1387 | showInfo: 1388 | id 1389 | 1390 | 1391 | 1392 | 1393 | YES 1394 | 1395 | YES 1396 | enteringDisplay 1397 | resultDisplay 1398 | 1399 | 1400 | YES 1401 | UILabel 1402 | UILabel 1403 | 1404 | 1405 | 1406 | YES 1407 | 1408 | YES 1409 | enteringDisplay 1410 | resultDisplay 1411 | 1412 | 1413 | YES 1414 | 1415 | enteringDisplay 1416 | UILabel 1417 | 1418 | 1419 | resultDisplay 1420 | UILabel 1421 | 1422 | 1423 | 1424 | 1425 | IBProjectSource 1426 | Classes/MainViewController.h 1427 | 1428 | 1429 | 1430 | 1431 | YES 1432 | 1433 | NSObject 1434 | 1435 | IBFrameworkSource 1436 | Foundation.framework/Headers/NSError.h 1437 | 1438 | 1439 | 1440 | NSObject 1441 | 1442 | IBFrameworkSource 1443 | Foundation.framework/Headers/NSFileManager.h 1444 | 1445 | 1446 | 1447 | NSObject 1448 | 1449 | IBFrameworkSource 1450 | Foundation.framework/Headers/NSKeyValueCoding.h 1451 | 1452 | 1453 | 1454 | NSObject 1455 | 1456 | IBFrameworkSource 1457 | Foundation.framework/Headers/NSKeyValueObserving.h 1458 | 1459 | 1460 | 1461 | NSObject 1462 | 1463 | IBFrameworkSource 1464 | Foundation.framework/Headers/NSKeyedArchiver.h 1465 | 1466 | 1467 | 1468 | NSObject 1469 | 1470 | IBFrameworkSource 1471 | Foundation.framework/Headers/NSObject.h 1472 | 1473 | 1474 | 1475 | NSObject 1476 | 1477 | IBFrameworkSource 1478 | Foundation.framework/Headers/NSRunLoop.h 1479 | 1480 | 1481 | 1482 | NSObject 1483 | 1484 | IBFrameworkSource 1485 | Foundation.framework/Headers/NSThread.h 1486 | 1487 | 1488 | 1489 | NSObject 1490 | 1491 | IBFrameworkSource 1492 | Foundation.framework/Headers/NSURL.h 1493 | 1494 | 1495 | 1496 | NSObject 1497 | 1498 | IBFrameworkSource 1499 | Foundation.framework/Headers/NSURLConnection.h 1500 | 1501 | 1502 | 1503 | NSObject 1504 | 1505 | IBFrameworkSource 1506 | UIKit.framework/Headers/UIAccessibility.h 1507 | 1508 | 1509 | 1510 | NSObject 1511 | 1512 | IBFrameworkSource 1513 | UIKit.framework/Headers/UINibLoading.h 1514 | 1515 | 1516 | 1517 | NSObject 1518 | 1519 | IBFrameworkSource 1520 | UIKit.framework/Headers/UIResponder.h 1521 | 1522 | 1523 | 1524 | UIButton 1525 | UIControl 1526 | 1527 | IBFrameworkSource 1528 | UIKit.framework/Headers/UIButton.h 1529 | 1530 | 1531 | 1532 | UIControl 1533 | UIView 1534 | 1535 | IBFrameworkSource 1536 | UIKit.framework/Headers/UIControl.h 1537 | 1538 | 1539 | 1540 | UILabel 1541 | UIView 1542 | 1543 | IBFrameworkSource 1544 | UIKit.framework/Headers/UILabel.h 1545 | 1546 | 1547 | 1548 | UIResponder 1549 | NSObject 1550 | 1551 | 1552 | 1553 | UISearchBar 1554 | UIView 1555 | 1556 | IBFrameworkSource 1557 | UIKit.framework/Headers/UISearchBar.h 1558 | 1559 | 1560 | 1561 | UISearchDisplayController 1562 | NSObject 1563 | 1564 | IBFrameworkSource 1565 | UIKit.framework/Headers/UISearchDisplayController.h 1566 | 1567 | 1568 | 1569 | UIView 1570 | 1571 | IBFrameworkSource 1572 | UIKit.framework/Headers/UIPrintFormatter.h 1573 | 1574 | 1575 | 1576 | UIView 1577 | 1578 | IBFrameworkSource 1579 | UIKit.framework/Headers/UITextField.h 1580 | 1581 | 1582 | 1583 | UIView 1584 | UIResponder 1585 | 1586 | IBFrameworkSource 1587 | UIKit.framework/Headers/UIView.h 1588 | 1589 | 1590 | 1591 | UIViewController 1592 | 1593 | IBFrameworkSource 1594 | UIKit.framework/Headers/UINavigationController.h 1595 | 1596 | 1597 | 1598 | UIViewController 1599 | 1600 | IBFrameworkSource 1601 | UIKit.framework/Headers/UIPopoverController.h 1602 | 1603 | 1604 | 1605 | UIViewController 1606 | 1607 | IBFrameworkSource 1608 | UIKit.framework/Headers/UISplitViewController.h 1609 | 1610 | 1611 | 1612 | UIViewController 1613 | 1614 | IBFrameworkSource 1615 | UIKit.framework/Headers/UITabBarController.h 1616 | 1617 | 1618 | 1619 | UIViewController 1620 | UIResponder 1621 | 1622 | IBFrameworkSource 1623 | UIKit.framework/Headers/UIViewController.h 1624 | 1625 | 1626 | 1627 | 1628 | 0 1629 | IBCocoaTouchFramework 1630 | 1631 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 1632 | 1633 | 1634 | 1635 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 1636 | 1637 | 1638 | YES 1639 | Jagtaku-iPhoneApp.xcodeproj 1640 | 3 1641 | 132 1642 | 1643 | 1644 | --------------------------------------------------------------------------------