project_files/HedgewarsMobile/Classes/MasterViewController.m
changeset 3701 8c449776ebe6
parent 3697 d5b30d6373fc
child 3737 2ba6ac8a114b
equal deleted inserted replaced
3699:e5e2cbc90891 3701:8c449776ebe6
    13 #import "WeaponSettingsViewController.h"
    13 #import "WeaponSettingsViewController.h"
    14 #import "SchemeSettingsViewController.h"
    14 #import "SchemeSettingsViewController.h"
    15 #import "CommodityFunctions.h"
    15 #import "CommodityFunctions.h"
    16 
    16 
    17 @implementation MasterViewController
    17 @implementation MasterViewController
    18 @synthesize detailViewController, controllerNames, lastIndexPath;
    18 @synthesize targetController, controllerNames, lastIndexPath;
    19 
    19 
    20 
    20 
    21 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    21 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    22     return rotationManager(interfaceOrientation);
    22     return rotationManager(interfaceOrientation);
    23 }
    23 }
    27 #pragma mark View lifecycle
    27 #pragma mark View lifecycle
    28 -(void) viewDidLoad {
    28 -(void) viewDidLoad {
    29     [super viewDidLoad];
    29     [super viewDidLoad];
    30 
    30 
    31     // the list of selectable controllers
    31     // the list of selectable controllers
    32     controllerNames = [[NSArray alloc] initWithObjects:NSLocalizedString(@"General",@""),
    32     NSArray *array = [[NSArray alloc] initWithObjects:NSLocalizedString(@"General",@""),
    33                                                        NSLocalizedString(@"Teams",@""),
    33                                                       NSLocalizedString(@"Teams",@""),
    34                                                        NSLocalizedString(@"Weapons",@""),
    34                                                       NSLocalizedString(@"Weapons",@""),
    35                                                        NSLocalizedString(@"Schemes",@""),
    35                                                       NSLocalizedString(@"Schemes",@""),
    36                                                        nil];
    36                                                       nil];
    37     // the "Done" button on top left
    37     self.controllerNames = array;
    38     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
    38     [array release];
    39                                                                                           target:self
    39 
    40                                                                                           action:@selector(dismissSplitView)];
    40     // targetControllers tells whether we're on the right or left side of the splitview -- on iphone we only use the right side
       
    41     if (targetController == nil && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
       
    42         if (nil == generalSettingsViewController)
       
    43             generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
    44         generalSettingsViewController.navigationItem.hidesBackButton = YES;
       
    45         [self.navigationController pushViewController:generalSettingsViewController animated:NO];
       
    46     } else {
       
    47         self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
       
    48                                                                                               target:self
       
    49                                                                                               action:@selector(dismissSplitView)];
       
    50     }
    41 }
    51 }
    42 
    52 
    43 #pragma mark -
    53 #pragma mark -
    44 #pragma mark Table view data source
    54 #pragma mark Table view data source
    45 
       
    46 -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
    55 -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
    47     return 1;
    56     return 1;
    48 }
    57 }
    49 
    58 
    50 -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    59 -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    56     static NSString *CellIdentifier = @"Cell";
    65     static NSString *CellIdentifier = @"Cell";
    57 
    66 
    58     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    67     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    59     if (cell == nil) {
    68     if (cell == nil) {
    60         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    69         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    61         cell.textLabel.text = [controllerNames objectAtIndex:[indexPath row]];
       
    62     }
    70     }
       
    71 
       
    72     cell.textLabel.text = [controllerNames objectAtIndex:[indexPath row]];
       
    73     if (nil == targetController) {
       
    74         UIImage *icon = [[UIImage alloc] initWithContentsOfFile:@"Icon-Small.png"];
       
    75         cell.imageView.image = icon;
       
    76         [icon release];
       
    77         cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
       
    78     } else
       
    79         cell.accessoryType = UITableViewCellAccessoryNone;
    63 
    80 
    64     return cell;
    81     return cell;
    65 }
    82 }
    66 
    83 
    67 #pragma mark -
    84 #pragma mark -
    71     int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
    88     int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
    72     UIViewController *nextController = nil;
    89     UIViewController *nextController = nil;
    73 
    90 
    74     if (newRow != oldRow) {
    91     if (newRow != oldRow) {
    75         [self.tableView deselectRowAtIndexPath:lastIndexPath animated:YES];
    92         [self.tableView deselectRowAtIndexPath:lastIndexPath animated:YES];
    76         [detailViewController.navigationController popToRootViewControllerAnimated:NO];
    93         [targetController.navigationController popToRootViewControllerAnimated:NO];
    77 
    94 
    78         switch (newRow) {
    95         switch (newRow) {
    79             case 0:
    96             case 0:
    80                 if (nil == generalSettingsViewController)
    97                 if (nil == generalSettingsViewController)
    81                     generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
    98                     generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
    96                     schemeSettingsViewController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
   113                     schemeSettingsViewController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
    97                 nextController = schemeSettingsViewController;
   114                 nextController = schemeSettingsViewController;
    98                 break;
   115                 break;
    99         }
   116         }
   100 
   117 
   101         nextController.navigationItem.hidesBackButton = YES;
       
   102         nextController.title = [controllerNames objectAtIndex:newRow];
   118         nextController.title = [controllerNames objectAtIndex:newRow];
   103         [detailViewController.navigationController pushViewController:nextController animated:NO];
       
   104         self.lastIndexPath = indexPath;
   119         self.lastIndexPath = indexPath;
   105         [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
   120         [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
       
   121 
       
   122         if (nil == targetController) {
       
   123             nextController.navigationItem.hidesBackButton = NO;
       
   124             [self.navigationController pushViewController:nextController animated:YES];
       
   125         } else {
       
   126             nextController.navigationItem.hidesBackButton = YES;
       
   127             [targetController.navigationController pushViewController:nextController animated:NO];
       
   128         }
   106     }
   129     }
   107 }
   130 }
   108 
   131 
   109 
   132 
   110 #pragma mark -
   133 #pragma mark -
   123         schemeSettingsViewController = nil;
   146         schemeSettingsViewController = nil;
   124     MSG_MEMCLEAN();
   147     MSG_MEMCLEAN();
   125 }
   148 }
   126 
   149 
   127 -(void) viewDidUnload {
   150 -(void) viewDidUnload {
   128     self.detailViewController = nil;
   151     self.targetController = nil;
   129     self.controllerNames = nil;
   152     self.controllerNames = nil;
   130     self.lastIndexPath = nil;
   153     self.lastIndexPath = nil;
   131     generalSettingsViewController = nil;
   154     generalSettingsViewController = nil;
   132     teamSettingsViewController = nil;
   155     teamSettingsViewController = nil;
   133     weaponSettingsViewController = nil;
   156     weaponSettingsViewController = nil;
   135     MSG_DIDUNLOAD();
   158     MSG_DIDUNLOAD();
   136     [super viewDidUnload];
   159     [super viewDidUnload];
   137 }
   160 }
   138 
   161 
   139 -(void) dealloc {
   162 -(void) dealloc {
       
   163     targetController = nil;
   140     [controllerNames release];
   164     [controllerNames release];
   141     [detailViewController release];
       
   142     [lastIndexPath release];
   165     [lastIndexPath release];
   143     [generalSettingsViewController release];
   166     [generalSettingsViewController release];
   144     [teamSettingsViewController release];
   167     [teamSettingsViewController release];
   145     [weaponSettingsViewController release];
   168     [weaponSettingsViewController release];
   146     [schemeSettingsViewController release];
   169     [schemeSettingsViewController release];