project_files/HedgewarsMobile/Classes/MasterViewController.m
changeset 6074 047eaed35cbb
parent 6000 dbcebcd3d79f
--- a/project_files/HedgewarsMobile/Classes/MasterViewController.m	Fri Sep 30 17:04:20 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/MasterViewController.m	Sat Oct 01 02:40:26 2011 +0200
@@ -28,7 +28,7 @@
 #import "SupportViewController.h"
 
 @implementation MasterViewController
-@synthesize rootController, targetController, controllerNames, lastIndexPath;
+@synthesize targetController, controllerNames, lastIndexPath;
 
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
@@ -39,9 +39,7 @@
 #pragma mark -
 #pragma mark View lifecycle
 -(void) viewDidLoad {
-    [super viewDidLoad];
-
-    // the list of selectable controllers
+    // the list of available controllers
     NSArray *array = [[NSArray alloc] initWithObjects:NSLocalizedString(@"General",@""),
                                                       NSLocalizedString(@"Teams",@""),
                                                       NSLocalizedString(@"Weapons",@""),
@@ -51,18 +49,95 @@
     self.controllerNames = array;
     [array release];
 
-    // targetControllers tells whether we're on the right or left side of the splitview -- on iphone we only use the right side
-    if (targetController == nil && IS_IPAD()) {
-        if (nil == generalSettingsViewController)
+    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
+                                                                                target:self
+                                                                                action:@selector(dismissSplitView)];
+    if (IS_IPAD()) {
+        // this class gets loaded twice, we tell the difference by looking at targetController
+        if (self.targetController != nil) {
+            UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
+            tableView.delegate = self;
+            tableView.dataSource = self;
+            [tableView reloadData];
+            [self.view addSubview:tableView];
+            [self tableView:tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
+            [tableView release];
+            self.navigationItem.leftBarButtonItem = doneButton;
+        }
+    } else {
+        // this class just loads all controllers and set up tabbar and navigation controllers
+        NSMutableArray *tabBarNavigationControllers = [[NSMutableArray alloc] initWithCapacity:5];
+        UINavigationController *navController = nil;
+
+        if (nil == generalSettingsViewController) {
             generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-        generalSettingsViewController.navigationItem.hidesBackButton = YES;
-        [generalSettingsViewController viewWillAppear:YES];
-        [self.navigationController pushViewController:generalSettingsViewController animated:NO];
-    } else {
-        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
-                                                                                              target:self
-                                                                                              action:@selector(dismissSplitView)];
+            generalSettingsViewController.tabBarItem.title = [self.controllerNames objectAtIndex:0];
+            generalSettingsViewController.tabBarItem.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/TargetBee.png",GRAPHICS_DIRECTORY()]];
+            navController = [[UINavigationController alloc] initWithRootViewController:generalSettingsViewController];
+            generalSettingsViewController.navigationItem.backBarButtonItem = doneButton;
+            generalSettingsViewController.navigationItem.leftBarButtonItem = doneButton;
+            [generalSettingsViewController release];
+            [tabBarNavigationControllers addObject:navController];
+            releaseAndNil(navController);
+        }
+        if (nil == teamSettingsViewController) {
+            teamSettingsViewController = [[TeamSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
+            teamSettingsViewController.tabBarItem.title = [self.controllerNames objectAtIndex:1];
+            teamSettingsViewController.tabBarItem.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/Egg.png",GRAPHICS_DIRECTORY()]];
+            navController = [[UINavigationController alloc] initWithRootViewController:teamSettingsViewController];
+            teamSettingsViewController.navigationItem.backBarButtonItem = doneButton;
+            teamSettingsViewController.navigationItem.leftBarButtonItem = doneButton;
+            [tabBarNavigationControllers addObject:navController];
+            releaseAndNil(navController);
+        }
+        if (nil == weaponSettingsViewController) {
+            weaponSettingsViewController = [[WeaponSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
+            weaponSettingsViewController.tabBarItem.title = [self.controllerNames objectAtIndex:2];
+            weaponSettingsViewController.tabBarItem.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/cheese.png",GRAPHICS_DIRECTORY()]];
+            navController = [[UINavigationController alloc] initWithRootViewController:weaponSettingsViewController];
+            weaponSettingsViewController.navigationItem.backBarButtonItem = doneButton;
+            weaponSettingsViewController.navigationItem.leftBarButtonItem = doneButton;
+            [tabBarNavigationControllers addObject:navController];
+            releaseAndNil(navController);
+        }
+        if (nil == schemeSettingsViewController) {
+            schemeSettingsViewController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
+            schemeSettingsViewController.tabBarItem.title = [self.controllerNames objectAtIndex:3];
+            schemeSettingsViewController.tabBarItem.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/Targetp.png",GRAPHICS_DIRECTORY()]];
+            navController = [[UINavigationController alloc] initWithRootViewController:schemeSettingsViewController];
+            schemeSettingsViewController.navigationItem.backBarButtonItem = doneButton;
+            schemeSettingsViewController.navigationItem.leftBarButtonItem = doneButton;
+            [tabBarNavigationControllers addObject:navController];
+            releaseAndNil(navController);
+        }
+        if (nil == supportViewController) {
+            supportViewController = [[SupportViewController alloc] initWithStyle:UITableViewStyleGrouped];
+            supportViewController.tabBarItem.title = [self.controllerNames objectAtIndex:4];
+            supportViewController.tabBarItem.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/Seduction.png",GRAPHICS_DIRECTORY()]];
+            navController = [[UINavigationController alloc] initWithRootViewController:supportViewController];
+            supportViewController.navigationItem.backBarButtonItem = doneButton;
+            supportViewController.navigationItem.leftBarButtonItem = doneButton;
+            [tabBarNavigationControllers addObject:navController];
+            releaseAndNil(navController);
+        }
+
+        UITabBarController *tabController = [[UITabBarController alloc] init];
+        tabController.viewControllers = tabBarNavigationControllers;
+        tabController.delegate = self;
+
+        [self.view addSubview:tabController.view];
     }
+    [doneButton release];
+    [super viewDidLoad];
+}
+
+-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
+    [viewController viewWillAppear:NO];
+}
+
+-(void) dismissSplitView {
+    [AudioManagerController playBackSound];
+    [[[HedgewarsAppDelegate sharedAppDelegate] mainViewController] dismissModalViewControllerAnimated:YES];
 }
 
 #pragma mark -
@@ -72,7 +147,7 @@
 }
 
 -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return [controllerNames count];
+    return [self.controllerNames count];
 }
 
 // Customize the appearance of table view cells.
@@ -106,11 +181,7 @@
             break;
     }
     
-    if (nil == targetController)
-        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
-    else
-        cell.accessoryType = UITableViewCellAccessoryNone;
-
+    cell.accessoryType = UITableViewCellAccessoryNone;
     cell.textLabel.text = [controllerNames objectAtIndex:[indexPath row]];
     UIImage *icon = [[UIImage alloc] initWithContentsOfFile:iconStr];
     cell.imageView.image = icon;
@@ -127,7 +198,7 @@
     UIViewController *nextController = nil;
 
     if (newRow != oldRow) {
-        [self.tableView deselectRowAtIndexPath:lastIndexPath animated:YES];
+        [tableView deselectRowAtIndexPath:lastIndexPath animated:YES];
         [targetController.navigationController popToRootViewControllerAnimated:NO];
 
         switch (newRow) {
@@ -158,18 +229,13 @@
                 break;
         }
 
-        nextController.title = [controllerNames objectAtIndex:newRow];
         self.lastIndexPath = indexPath;
-        [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
+        [tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
 
-        if (nil == targetController) {
-            nextController.navigationItem.hidesBackButton = NO;
-            [self.navigationController pushViewController:nextController animated:YES];
-        } else {
-            [AudioManagerController playClickSound];
-            nextController.navigationItem.hidesBackButton = YES;
-            [targetController.navigationController pushViewController:nextController animated:NO];
-        }
+        nextController.navigationItem.hidesBackButton = YES;
+        [nextController viewWillAppear:NO];
+        [targetController.navigationController pushViewController:nextController animated:NO];
+        [AudioManagerController playClickSound];
     }
 }
 
@@ -192,8 +258,6 @@
 }
 
 -(void) viewDidUnload {
-    //self.rootController = nil;
-    //self.targetController = nil;
     self.controllerNames = nil;
     self.lastIndexPath = nil;
     generalSettingsViewController = nil;
@@ -206,7 +270,6 @@
 }
 
 -(void) dealloc {
-    releaseAndNil(rootController);
     releaseAndNil(targetController);
     releaseAndNil(controllerNames);
     releaseAndNil(lastIndexPath);
@@ -218,9 +281,5 @@
     [super dealloc];
 }
 
--(IBAction) dismissSplitView {
-    [self.rootController dismissModalViewControllerAnimated:YES];
-}
-
 @end