diff -r fcbdee9cdd74 -r b894922d58cc project_files/HedgewarsMobile/Classes/MainMenuViewController.m --- a/project_files/HedgewarsMobile/Classes/MainMenuViewController.m Tue Sep 08 19:20:58 2015 +0300 +++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController.m Mon Nov 16 22:57:24 2015 +0300 @@ -20,7 +20,8 @@ #import "MainMenuViewController.h" #import #import "GameConfigViewController.h" -#import "SettingsContainerViewController.h" +#import "MGSplitViewController.h" +#import "SettingsBaseViewController.h" #import "AboutViewController.h" #import "SavedGamesViewController.h" #import "RestoreViewController.h" @@ -29,10 +30,23 @@ #import "ServerProtocolNetwork.h" #import "GameInterfaceBridge.h" +#import "SettingsBaseViewController.h" +#import "GeneralSettingsViewController.h" +#import "TeamSettingsViewController.h" +#import "WeaponSettingsViewController.h" +#import "SchemeSettingsViewController.h" +#import "SupportViewController.h" + +#ifdef DEBUG +#import "GameLogViewController.h" +#endif + +@interface MainMenuViewController () +@property (retain, nonatomic) IBOutlet UIButton *simpleGameButton; +@property (retain, nonatomic) IBOutlet UIButton *missionsButton; +@end @implementation MainMenuViewController -@synthesize gameConfigViewController, settingsViewController, aboutViewController, savedGamesViewController, - restoreViewController, missionsViewController; -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation { return rotationManager(interfaceOrientation); @@ -42,7 +56,13 @@ -(void) viewDidLoad { self.view.frame = [[UIScreen mainScreen] safeBounds]; [super viewDidLoad]; - + + [self.simpleGameButton setTitle:NSLocalizedString(@"Simple", nil) forState:UIControlStateNormal]; + [self.missionsButton setTitle:NSLocalizedString(@"Missions", nil) forState:UIControlStateNormal]; + + [self.simpleGameButton applyDarkBlueQuickStyle]; + [self.missionsButton applyDarkBlueQuickStyle]; + // get the app's version NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey]; @@ -62,19 +82,19 @@ // prompt for restoring any previous game NSString *saveString = [userDefaults objectForKey:@"savedGamePath"]; - if (saveString != nil && [saveString isEqualToString:@""] == NO && [[userDefaults objectForKey:@"saveIsValid"] boolValue]) { - if (self.restoreViewController == nil) { - NSString *xibName = [@"RestoreViewController-" stringByAppendingString:(IS_IPAD() ? @"iPad" : @"iPhone")]; - RestoreViewController *restored = [[RestoreViewController alloc] initWithNibName:xibName bundle:nil]; - if ([restored respondsToSelector:@selector(setModalPresentationStyle:)]) - restored.modalPresentationStyle = UIModalPresentationFormSheet; - self.restoreViewController = restored; - [restored release]; - } - [self performSelector:@selector(presentModalViewController:animated:) withObject:self.restoreViewController afterDelay:0.25]; - } else { + if (saveString != nil && [saveString isEqualToString:@""] == NO && [[userDefaults objectForKey:@"saveIsValid"] boolValue]) + { + NSString *xibName = [@"RestoreViewController-" stringByAppendingString:(IS_IPAD() ? @"iPad" : @"iPhone")]; + RestoreViewController *restored = [[RestoreViewController alloc] initWithNibName:xibName bundle:nil]; + if ([restored respondsToSelector:@selector(setModalPresentationStyle:)]) + restored.modalPresentationStyle = UIModalPresentationFormSheet; + + [self performSelector:@selector(presentViewController:) withObject:restored afterDelay:0.25]; + } + else + { // let's not prompt for rating when app crashed >_> - [Appirater appLaunched]; + [Appirater appLaunched:YES]; } /* @@ -82,6 +102,12 @@ */ } +- (void) presentViewController:(UIViewController *)vc +{ + [self presentViewController:vc animated:NO completion:nil]; + [vc release]; +} + -(void) viewWillAppear:(BOOL)animated { [[AudioManagerController mainManager] playBackgroundMusic]; [super viewWillAppear:animated]; @@ -92,99 +118,134 @@ UIButton *button = (UIButton *)sender; UIAlertView *alert; NSString *xib = nil; - NSString *debugStr = nil; [[AudioManagerController mainManager] playClickSound]; switch (button.tag) { case 0: - if (nil == self.gameConfigViewController) { - xib = IS_IPAD() ? @"GameConfigViewController-iPad" : @"GameConfigViewController-iPhone"; + xib = IS_IPAD() ? @"GameConfigViewController-iPad" : @"GameConfigViewController-iPhone"; - GameConfigViewController *gcvc = [[GameConfigViewController alloc] initWithNibName:xib bundle:nil]; - gcvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; - self.gameConfigViewController = gcvc; - [gcvc release]; - } - [self presentModalViewController:self.gameConfigViewController animated:YES]; + GameConfigViewController *gcvc = [[GameConfigViewController alloc] initWithNibName:xib bundle:nil]; + gcvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; + + [self presentViewController:gcvc animated:YES completion:nil]; + [gcvc release]; break; case 2: - if (nil == self.settingsViewController) { - SettingsContainerViewController *svrc = [[SettingsContainerViewController alloc] initWithNibName:nil bundle:nil]; - svrc.modalTransitionStyle = UIModalTransitionStyleCoverVertical; - self.settingsViewController = svrc; - [svrc release]; + if (IS_IPAD()) + { + // the contents on the right of the splitview, setting targetController to nil to avoid creating the table + SettingsBaseViewController *rightController = [[SettingsBaseViewController alloc] init]; + rightController.targetController = nil; + UINavigationController *rightNavController = [[UINavigationController alloc] initWithRootViewController:rightController]; + [rightController release]; + + // the contens on the left of the splitview, setting targetController that will receive push/pop actions + SettingsBaseViewController *leftController = [[SettingsBaseViewController alloc] init]; + leftController.targetController = rightNavController.topViewController; + UINavigationController *leftNavController = [[UINavigationController alloc] initWithRootViewController:leftController]; + [leftController release]; + + MGSplitViewController *splitViewRootController = [[MGSplitViewController alloc] init]; + splitViewRootController.delegate = nil; + splitViewRootController.showsMasterInPortrait = YES; + splitViewRootController.viewControllers = [NSArray arrayWithObjects:leftNavController, rightNavController, nil]; + [leftNavController release]; + [rightNavController release]; + + [self presentViewController:splitViewRootController animated:YES completion:nil]; + [splitViewRootController release]; } - [self presentModalViewController:self.settingsViewController animated:YES]; + else + { + NSMutableArray *tabBarNavigationControllers = [[NSMutableArray alloc] initWithCapacity:5]; + + UIViewController *generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped]; + generalSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"General",@"") imageName:@"flower" selectedImageName:@"flower_filled"]; + UINavigationController *generalNavController = [[UINavigationController alloc] initWithRootViewController:generalSettingsViewController]; + [generalSettingsViewController release]; + [tabBarNavigationControllers addObject:generalNavController]; + [generalNavController release]; + + UIViewController *teamSettingsViewController = [[TeamSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped]; + teamSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Teams",@"") imageName:@"teams" selectedImageName:@"teams_filled"]; + UINavigationController *teamNavController = [[UINavigationController alloc] initWithRootViewController:teamSettingsViewController]; + [teamSettingsViewController release]; + [tabBarNavigationControllers addObject:teamNavController]; + [teamNavController release]; + + UIViewController *weaponSettingsViewController = [[WeaponSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped]; + weaponSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Weapons",@"") imageName:@"bullet" selectedImageName:@"bullet_filled"]; + UINavigationController *weaponNavController = [[UINavigationController alloc] initWithRootViewController:weaponSettingsViewController]; + [weaponSettingsViewController release]; + [tabBarNavigationControllers addObject:weaponNavController]; + [weaponNavController release]; + + UIViewController *schemeSettingsViewController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped]; + schemeSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Schemes",@"") imageName:@"target" selectedImageName:@"target_filled"]; + UINavigationController *schemeNavController = [[UINavigationController alloc] initWithRootViewController:schemeSettingsViewController]; + [schemeSettingsViewController release]; + [tabBarNavigationControllers addObject:schemeNavController]; + [schemeNavController release]; + + UIViewController *supportViewController = [[SupportViewController alloc] initWithStyle:UITableViewStyleGrouped]; + supportViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Support",@"") imageName:@"heart" selectedImageName:@"heart_filled"]; + UINavigationController *supportNavController = [[UINavigationController alloc] initWithRootViewController:supportViewController]; + [supportViewController release]; + [tabBarNavigationControllers addObject:supportNavController]; + [supportNavController release]; + + UITabBarController *settingsTabController = [[UITabBarController alloc] init]; + settingsTabController.viewControllers = tabBarNavigationControllers; + [tabBarNavigationControllers release]; + + [self presentViewController:settingsTabController animated:YES completion:nil]; + [settingsTabController release]; + } break; case 3: #ifdef DEBUG - if ([[NSFileManager defaultManager] fileExistsAtPath:DEBUG_FILE()]) - debugStr = [[NSString alloc] initWithContentsOfFile:DEBUG_FILE()]; - else - debugStr = [[NSString alloc] initWithString:@"Here be log"]; - UITextView *scroll = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width)]; - scroll.text = debugStr; - [debugStr release]; - scroll.editable = NO; - scroll.alpha = 0; - - UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; - [btn addTarget:scroll action:@selector(removeFromSuperview) forControlEvents:UIControlEventTouchUpInside]; - [btn addTarget:btn action:@selector(removeFromSuperview) forControlEvents:UIControlEventTouchUpInside]; - btn.frame = CGRectMake(self.view.frame.size.height-58, -6, 64, 64); - btn.backgroundColor = [UIColor blackColor]; - btn.titleLabel.textColor = [UIColor whiteColor]; - btn.titleLabel.textAlignment = UITextAlignmentCenter; - btn.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]]; - [btn setTitle:@"Close" forState:UIControlStateNormal]; - btn.alpha = 0; - [btn.layer setCornerRadius:10.0f]; - [btn.layer setMasksToBounds:YES]; - - [self.view addSubview:scroll]; - [self.view addSubview:btn]; - - [UIView beginAnimations:@"fadein" context:NULL]; - [UIView setAnimationDuration:0.25f]; - btn.alpha = 1; - scroll.alpha = 1; - [UIView commitAnimations]; - [scroll release]; + { + GameLogViewController *gameLogVC = [[GameLogViewController alloc] init]; + UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:gameLogVC]; + [gameLogVC release]; + + [self presentViewController:navController animated:YES completion:nil]; + [navController release]; + } #else - debugStr = debugStr; // prevent compiler warning - if (nil == self.aboutViewController) { + { AboutViewController *about = [[AboutViewController alloc] initWithNibName:@"AboutViewController" bundle:nil]; about.modalTransitionStyle = UIModalTransitionStyleCoverVertical; if ([about respondsToSelector:@selector(setModalPresentationStyle:)]) about.modalPresentationStyle = UIModalPresentationFormSheet; - self.aboutViewController = about; + + [self presentViewController:about animated:YES completion:nil]; [about release]; } - [self presentModalViewController:self.aboutViewController animated:YES]; #endif break; case 4: - if (nil == self.savedGamesViewController) { + { SavedGamesViewController *savedgames = [[SavedGamesViewController alloc] initWithNibName:@"SavedGamesViewController" bundle:nil]; savedgames.modalTransitionStyle = UIModalTransitionStyleCoverVertical; if ([savedgames respondsToSelector:@selector(setModalPresentationStyle:)]) savedgames.modalPresentationStyle = UIModalPresentationPageSheet; - self.savedGamesViewController = savedgames; + + [self presentViewController:savedgames animated:YES completion:nil]; [savedgames release]; } - [self presentModalViewController:self.savedGamesViewController animated:YES]; break; case 5: - if (nil == self.missionsViewController) { + { xib = IS_IPAD() ? @"MissionTrainingViewController-iPad" : @"MissionTrainingViewController-iPhone"; MissionTrainingViewController *missions = [[MissionTrainingViewController alloc] initWithNibName:xib bundle:nil]; missions.modalTransitionStyle = IS_IPAD() ? UIModalTransitionStyleCoverVertical : UIModalTransitionStyleCrossDissolve; if ([missions respondsToSelector:@selector(setModalPresentationStyle:)]) missions.modalPresentationStyle = UIModalPresentationPageSheet; - self.missionsViewController = missions; + + [self presentViewController:missions animated:YES completion:nil]; [missions release]; } - [self presentModalViewController:self.missionsViewController animated:YES]; break; case 6: [GameInterfaceBridge registerCallingController:self]; @@ -202,42 +263,29 @@ } } +- (UITabBarItem *)tabBarItemWithTitle: (NSString *)title + imageName: (NSString *)imageName + selectedImageName: (NSString *)selectedImageName +{ + return [[[UITabBarItem alloc] initWithTitle:title + image:[UIImage imageNamed:imageName] + selectedImage:[UIImage imageNamed:selectedImageName]] autorelease]; +} + #pragma mark - -(void) viewDidUnload { - self.gameConfigViewController = nil; - self.settingsViewController = nil; - self.aboutViewController = nil; - self.savedGamesViewController = nil; - self.restoreViewController = nil; - self.missionsViewController = nil; MSG_DIDUNLOAD(); [super viewDidUnload]; } -(void) didReceiveMemoryWarning { - if (self.settingsViewController.view.superview == nil) - self.settingsViewController = nil; - if (self.gameConfigViewController.view.superview == nil) - self.gameConfigViewController = nil; - if (self.aboutViewController.view.superview == nil) - self.aboutViewController = nil; - if (self.savedGamesViewController.view.superview == nil) - self.savedGamesViewController = nil; - if (self.restoreViewController.view.superview == nil) - self.restoreViewController = nil; - if (self.missionsViewController.view.superview == nil) - self.missionsViewController = nil; MSG_MEMCLEAN(); [super didReceiveMemoryWarning]; } -(void) dealloc { - releaseAndNil(settingsViewController); - releaseAndNil(gameConfigViewController); - releaseAndNil(aboutViewController); - releaseAndNil(savedGamesViewController); - releaseAndNil(restoreViewController); - releaseAndNil(missionsViewController); + [_simpleGameButton release]; + [_missionsButton release]; [super dealloc]; }