project_files/HedgewarsMobile/Classes/SettingsBaseViewController.m
branchios-revival
changeset 11217 e68b3e392091
parent 11216 76fd61a88c1e
child 12872 00215a7ec5f5
equal deleted inserted replaced
11216:76fd61a88c1e 11217:e68b3e392091
    24 #import "SchemeSettingsViewController.h"
    24 #import "SchemeSettingsViewController.h"
    25 #import "SupportViewController.h"
    25 #import "SupportViewController.h"
    26 
    26 
    27 
    27 
    28 @implementation SettingsBaseViewController
    28 @implementation SettingsBaseViewController
    29 @synthesize tabController, targetController, controllerNames, lastIndexPath;
    29 @synthesize targetController, controllerNames, lastIndexPath;
    30 
    30 
    31 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    31 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    32     return rotationManager(interfaceOrientation);
    32     return rotationManager(interfaceOrientation);
    33 }
    33 }
    34 
    34 
    43                                                       NSLocalizedString(@"Support",@""),
    43                                                       NSLocalizedString(@"Support",@""),
    44                                                       nil];
    44                                                       nil];
    45     self.controllerNames = array;
    45     self.controllerNames = array;
    46     [array release];
    46     [array release];
    47 
    47 
    48     if (IS_IPAD()) {
    48     if (IS_IPAD())
       
    49     {
    49         // this class gets loaded twice, we tell the difference by looking at targetController
    50         // this class gets loaded twice, we tell the difference by looking at targetController
    50         if (self.targetController != nil) {
    51         if (self.targetController != nil)
       
    52         {
    51             UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
    53             UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
       
    54             tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    52             tableView.delegate = self;
    55             tableView.delegate = self;
    53             tableView.dataSource = self;
    56             tableView.dataSource = self;
    54             [tableView reloadData];
    57             [tableView reloadData];
    55             [self.view addSubview:tableView];
    58             [self.view addSubview:tableView];
    56             [self tableView:tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    59             [self tableView:tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    57             [tableView release];
    60             [tableView release];
    58             self.navigationItem.leftBarButtonItem = [self doneButton];
    61             self.navigationItem.leftBarButtonItem = [self doneButton];
    59         }
    62         }
    60     } else {
    63     }
    61         // this class just loads all controllers and set up tabbar and navigation controllers
    64     else
    62         NSMutableArray *tabBarNavigationControllers = [[NSMutableArray alloc] initWithCapacity:5];
    65     {
    63         UINavigationController *navController = nil;
    66         //iPhone part moved to MainMenuViewController
    64 
       
    65         if (nil == generalSettingsViewController) {
       
    66             generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
    67             generalSettingsViewController.tabBarItem = [self tabBarItemWithTitle:[self.controllerNames objectAtIndex:0] imageName:@"flower" selectedImageName:@"flower_filled"];
       
    68             navController = [[UINavigationController alloc] initWithRootViewController:generalSettingsViewController];
       
    69             UIBarButtonItem *generalSettingsDoneButton = [self doneButton];
       
    70             generalSettingsViewController.navigationItem.backBarButtonItem = generalSettingsDoneButton;
       
    71             generalSettingsViewController.navigationItem.leftBarButtonItem = generalSettingsDoneButton;
       
    72             [generalSettingsViewController release];
       
    73             [tabBarNavigationControllers addObject:navController];
       
    74             releaseAndNil(navController);
       
    75         }
       
    76         if (nil == teamSettingsViewController) {
       
    77             teamSettingsViewController = [[TeamSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
    78             teamSettingsViewController.tabBarItem = [self tabBarItemWithTitle:[self.controllerNames objectAtIndex:1] imageName:@"teams" selectedImageName:@"teams_filled"];
       
    79             navController = [[UINavigationController alloc] initWithRootViewController:teamSettingsViewController];
       
    80             UIBarButtonItem *teamSettingsDoneButton = [self doneButton];
       
    81             teamSettingsViewController.navigationItem.backBarButtonItem = teamSettingsDoneButton;
       
    82             teamSettingsViewController.navigationItem.leftBarButtonItem = teamSettingsDoneButton;
       
    83             [tabBarNavigationControllers addObject:navController];
       
    84             releaseAndNil(navController);
       
    85         }
       
    86         if (nil == weaponSettingsViewController) {
       
    87             weaponSettingsViewController = [[WeaponSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
    88             weaponSettingsViewController.tabBarItem = [self tabBarItemWithTitle:[self.controllerNames objectAtIndex:2] imageName:@"bullet" selectedImageName:@"bullet_filled"];
       
    89             navController = [[UINavigationController alloc] initWithRootViewController:weaponSettingsViewController];
       
    90             UIBarButtonItem *weaponSettingsDoneButton = [self doneButton];
       
    91             weaponSettingsViewController.navigationItem.backBarButtonItem = weaponSettingsDoneButton;
       
    92             weaponSettingsViewController.navigationItem.leftBarButtonItem = weaponSettingsDoneButton;
       
    93             [tabBarNavigationControllers addObject:navController];
       
    94             releaseAndNil(navController);
       
    95         }
       
    96         if (nil == schemeSettingsViewController) {
       
    97             schemeSettingsViewController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
    98             schemeSettingsViewController.tabBarItem = [self tabBarItemWithTitle:[self.controllerNames objectAtIndex:3] imageName:@"target" selectedImageName:@"target_filled"];
       
    99             navController = [[UINavigationController alloc] initWithRootViewController:schemeSettingsViewController];
       
   100             UIBarButtonItem *schemeSettingsDoneButton = [self doneButton];
       
   101             schemeSettingsViewController.navigationItem.backBarButtonItem = schemeSettingsDoneButton;
       
   102             schemeSettingsViewController.navigationItem.leftBarButtonItem = schemeSettingsDoneButton;
       
   103             [tabBarNavigationControllers addObject:navController];
       
   104             releaseAndNil(navController);
       
   105         }
       
   106         if (nil == supportViewController) {
       
   107             supportViewController = [[SupportViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
   108             supportViewController.tabBarItem = [self tabBarItemWithTitle:[self.controllerNames objectAtIndex:4] imageName:@"heart" selectedImageName:@"heart_filled"];
       
   109             navController = [[UINavigationController alloc] initWithRootViewController:supportViewController];
       
   110             UIBarButtonItem *supportViewDoneButton = [self doneButton];
       
   111             supportViewController.navigationItem.backBarButtonItem = supportViewDoneButton;
       
   112             supportViewController.navigationItem.leftBarButtonItem = supportViewDoneButton;
       
   113             [tabBarNavigationControllers addObject:navController];
       
   114             releaseAndNil(navController);
       
   115         }
       
   116 
       
   117         self.tabController = [[UITabBarController alloc] init];
       
   118         self.tabController.viewControllers = tabBarNavigationControllers;
       
   119         self.tabController.delegate = self;
       
   120 
       
   121         [self.view addSubview:self.tabController.view];
       
   122     }
    67     }
   123 
    68 
   124     [super viewDidLoad];
    69     [super viewDidLoad];
   125 }
    70 }
   126 
    71 
   129     return [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
    74     return [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
   130                                                          target:self
    75                                                          target:self
   131                                                          action:@selector(dismissSplitView)] autorelease];
    76                                                          action:@selector(dismissSplitView)] autorelease];
   132 }
    77 }
   133 
    78 
   134 - (UITabBarItem *)tabBarItemWithTitle: (NSString *)title
       
   135                             imageName: (NSString *)imageName
       
   136                     selectedImageName: (NSString *)selectedImageName
       
   137 {
       
   138     return [[[UITabBarItem alloc] initWithTitle:title
       
   139                                           image:[UIImage imageNamed:imageName]
       
   140                                   selectedImage:[UIImage imageNamed:selectedImageName]] autorelease];
       
   141 }
       
   142 
       
   143 -(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
       
   144     [viewController viewWillAppear:NO];
       
   145 }
       
   146 
       
   147 -(void) dismissSplitView {
    79 -(void) dismissSplitView {
   148     [[AudioManagerController mainManager] playBackSound];
    80     [[AudioManagerController mainManager] playBackSound];
   149     [[[HedgewarsAppDelegate sharedAppDelegate] mainViewController] dismissViewControllerAnimated:YES completion:nil];
    81     [[[HedgewarsAppDelegate sharedAppDelegate] mainViewController] dismissViewControllerAnimated:YES completion:nil];
   150 }
       
   151 
       
   152 -(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
       
   153     if (IS_IPAD() == NO)
       
   154         return;
       
   155 
       
   156     if (self.targetController != nil) {
       
   157         CGRect screenRect = [[UIScreen mainScreen] safeBounds];
       
   158         self.view.frame = CGRectMake(0, 0, 320, screenRect.size.height);
       
   159     }
       
   160 }
    82 }
   161 
    83 
   162 #pragma mark -
    84 #pragma mark -
   163 #pragma mark Table view data source
    85 #pragma mark Table view data source
   164 -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
    86 -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
   208     return cell;
   130     return cell;
   209 }
   131 }
   210 
   132 
   211 #pragma mark -
   133 #pragma mark -
   212 #pragma mark Table view delegate
   134 #pragma mark Table view delegate
   213 -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   135 -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
       
   136 {
   214     NSInteger newRow = [indexPath row];
   137     NSInteger newRow = [indexPath row];
   215     NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
   138     NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
   216     UIViewController *nextController = nil;
   139     UIViewController *nextController = nil;
   217 
   140 
   218     if (newRow != oldRow) {
   141     if (newRow != oldRow)
       
   142     {
   219         [tableView deselectRowAtIndexPath:lastIndexPath animated:YES];
   143         [tableView deselectRowAtIndexPath:lastIndexPath animated:YES];
   220         [targetController.navigationController popToRootViewControllerAnimated:NO];
   144         [targetController.navigationController popToRootViewControllerAnimated:NO];
   221 
   145 
   222         switch (newRow) {
   146         switch (newRow)
       
   147         {
   223             case 0:
   148             case 0:
   224                 if (nil == generalSettingsViewController)
   149                 nextController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];;
   225                     generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
   226                 nextController = generalSettingsViewController;
       
   227                 break;
   150                 break;
   228             case 1:
   151             case 1:
   229                 if (nil == teamSettingsViewController)
   152                 nextController = [[TeamSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
   230                     teamSettingsViewController = [[TeamSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
   231                 nextController = teamSettingsViewController;
       
   232                 break;
   153                 break;
   233             case 2:
   154             case 2:
   234                 if (nil == weaponSettingsViewController)
   155                 nextController = [[WeaponSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
   235                     weaponSettingsViewController = [[WeaponSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
   236                 nextController = weaponSettingsViewController;
       
   237                 break;
   156                 break;
   238             case 3:
   157             case 3:
   239                 if (nil == schemeSettingsViewController)
   158                 nextController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
   240                     schemeSettingsViewController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
   241                 nextController = schemeSettingsViewController;
       
   242                 break;
   159                 break;
   243             case 4:
   160             case 4:
   244                 if (nil == supportViewController)
   161                 nextController = [[SupportViewController alloc] initWithStyle:UITableViewStyleGrouped];
   245                     supportViewController = [[SupportViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
   246                 nextController = supportViewController;
       
   247                 break;
   162                 break;
   248         }
   163         }
   249 
   164 
   250         self.lastIndexPath = indexPath;
   165         self.lastIndexPath = indexPath;
   251         [tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
   166         [tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
   252 
   167 
   253         nextController.navigationItem.hidesBackButton = YES;
   168         nextController.navigationItem.hidesBackButton = YES;
   254         [nextController viewWillAppear:NO];
   169         [nextController viewWillAppear:NO];
   255         [targetController.navigationController pushViewController:nextController animated:NO];
   170         [targetController.navigationController pushViewController:nextController animated:NO];
       
   171         [nextController release];
       
   172         
   256         [[AudioManagerController mainManager] playClickSound];
   173         [[AudioManagerController mainManager] playClickSound];
   257     }
   174     }
   258 }
   175 }
   259 
   176 
   260 
   177 
   261 #pragma mark -
   178 #pragma mark -
   262 #pragma mark Memory management
   179 #pragma mark Memory management
   263 -(void) didReceiveMemoryWarning {
   180 -(void) didReceiveMemoryWarning
   264     if (generalSettingsViewController.view.superview == nil)
   181 {
   265         generalSettingsViewController = nil;
       
   266     if (teamSettingsViewController.view.superview == nil)
       
   267         teamSettingsViewController = nil;
       
   268     if (weaponSettingsViewController.view.superview == nil)
       
   269         weaponSettingsViewController = nil;
       
   270     if (schemeSettingsViewController.view.superview == nil)
       
   271         schemeSettingsViewController = nil;
       
   272     if (supportViewController.view.superview == nil)
       
   273         supportViewController = nil;
       
   274     if (tabController.view.superview == nil)
       
   275         tabController = nil;
       
   276     MSG_MEMCLEAN();
   182     MSG_MEMCLEAN();
   277     [super didReceiveMemoryWarning];
   183     [super didReceiveMemoryWarning];
   278 }
   184 }
   279 
   185 
   280 -(void) viewDidUnload {
   186 -(void) viewDidUnload
       
   187 {
   281     self.controllerNames = nil;
   188     self.controllerNames = nil;
   282     self.lastIndexPath = nil;
   189     self.lastIndexPath = nil;
   283     self.targetController = nil;
   190     self.targetController = nil;
   284     self.tabController = nil;
       
   285     generalSettingsViewController = nil;
       
   286     teamSettingsViewController = nil;
       
   287     weaponSettingsViewController = nil;
       
   288     schemeSettingsViewController = nil;
       
   289     supportViewController = nil;
       
   290     MSG_DIDUNLOAD();
   191     MSG_DIDUNLOAD();
   291     [super viewDidUnload];
   192     [super viewDidUnload];
   292 }
   193 }
   293 
   194 
   294 -(void) dealloc {
   195 -(void) dealloc
       
   196 {
   295     releaseAndNil(targetController);
   197     releaseAndNil(targetController);
   296     releaseAndNil(controllerNames);
   198     releaseAndNil(controllerNames);
   297     releaseAndNil(lastIndexPath);
   199     releaseAndNil(lastIndexPath);
   298     releaseAndNil(tabController);
       
   299     releaseAndNil(generalSettingsViewController);
       
   300     releaseAndNil(teamSettingsViewController);
       
   301     releaseAndNil(weaponSettingsViewController);
       
   302     releaseAndNil(schemeSettingsViewController);
       
   303     releaseAndNil(supportViewController);
       
   304     [super dealloc];
   200     [super dealloc];
   305 }
   201 }
   306 
   202 
   307 
       
   308 -(void) viewWillDisappear:(BOOL)animated {
       
   309     // this will send -viewWillDisappear: only the active view
       
   310     [self.tabController viewWillDisappear:animated];
       
   311     // let's send that to every page, even though only GeneralSettingsViewController needs it
       
   312     [generalSettingsViewController viewWillDisappear:animated];
       
   313     [teamSettingsViewController viewWillDisappear:animated];
       
   314     [weaponSettingsViewController viewWillDisappear:animated];
       
   315     [schemeSettingsViewController viewWillDisappear:animated];
       
   316     [supportViewController viewWillDisappear:animated];
       
   317     [super viewWillDisappear:animated];
       
   318 }
       
   319 
       
   320 @end
   203 @end
   321 
   204