simplify the general settings and review minor stuff
authorkoda
Sat, 10 Apr 2010 20:48:09 +0000
changeset 3332 3c90a923f156
parent 3331 8e05feb871c3
child 3333 560e2766c445
simplify the general settings and review minor stuff
cocoaTouch/GameSetup.m
cocoaTouch/GeneralSettingsViewController.h
cocoaTouch/GeneralSettingsViewController.m
cocoaTouch/MainMenuViewController.m
cocoaTouch/SingleTeamViewController.h
cocoaTouch/SingleTeamViewController.m
cocoaTouch/SplitViewRootController.m
project_files/HedgewarsMobile/HedgewarsMobile.xcodeproj/vittorio.mode1v3
project_files/HedgewarsMobile/HedgewarsMobile.xcodeproj/vittorio.pbxuser
--- a/cocoaTouch/GameSetup.m	Sat Apr 10 19:04:39 2010 +0000
+++ b/cocoaTouch/GameSetup.m	Sat Apr 10 20:48:09 2010 +0000
@@ -336,10 +336,10 @@
     
 	gameArgs[0] = [username UTF8String];                                    //UserNick
 	gameArgs[1] = [ipcString UTF8String];                                   //ipcPort
-	gameArgs[2] = [[systemSettings objectForKey:@"sounds"] UTF8String];     //isSoundEnabled
-	gameArgs[3] = [[systemSettings objectForKey:@"music"] UTF8String];      //isMusicEnabled
+	gameArgs[2] = [[[systemSettings objectForKey:@"sounds"] stringValue] UTF8String];     //isSoundEnabled
+	gameArgs[3] = [[[systemSettings objectForKey:@"music"] stringValue] UTF8String];      //isMusicEnabled
 	gameArgs[4] = [localeString UTF8String];                                //cLocaleFName
-	gameArgs[5] = [[systemSettings objectForKey:@"alternate"] UTF8String];	//cAltDamage
+	gameArgs[5] = [[[systemSettings objectForKey:@"alternate"] stringValue] UTF8String];	//cAltDamage
 	gameArgs[6] = [wSize UTF8String];                                       //cScreenHeight
     gameArgs[7] = [hSize UTF8String];                                       //cScreenWidth
     
--- a/cocoaTouch/GeneralSettingsViewController.h	Sat Apr 10 19:04:39 2010 +0000
+++ b/cocoaTouch/GeneralSettingsViewController.h	Sat Apr 10 20:48:09 2010 +0000
@@ -9,18 +9,17 @@
 #import <UIKit/UIKit.h>
 
 
-@interface GeneralSettingsViewController : UITableViewController <UIActionSheetDelegate> {
-    NSDictionary *dataDict;
-	NSString *username;
-	NSString *password;
+@interface GeneralSettingsViewController : UITableViewController <UITextFieldDelegate> {
+    NSMutableDictionary *settingsDictionary;
+	UITextField *textFieldBeingEdited;
 	UISwitch *musicSwitch;
 	UISwitch *soundSwitch;
 	UISwitch *altDamageSwitch;
+    BOOL isWriteNeeded;
 }
 
-@property (nonatomic, retain) NSDictionary *dataDict;
-@property (nonatomic, retain) NSString *username;
-@property (nonatomic, retain) NSString *password;
+@property (nonatomic, retain) NSMutableDictionary *settingsDictionary;
+@property (nonatomic, retain) UITextField *textFieldBeingEdited;;
 @property (nonatomic, retain) UISwitch *musicSwitch;
 @property (nonatomic, retain) UISwitch *soundSwitch;
 @property (nonatomic, retain) UISwitch *altDamageSwitch;
--- a/cocoaTouch/GeneralSettingsViewController.m	Sat Apr 10 19:04:39 2010 +0000
+++ b/cocoaTouch/GeneralSettingsViewController.m	Sat Apr 10 20:48:09 2010 +0000
@@ -10,124 +10,141 @@
 #import "SDL_uikitappdelegate.h"
 
 @implementation GeneralSettingsViewController
-@synthesize dataDict, username, password, musicSwitch, soundSwitch, altDamageSwitch;
+@synthesize settingsDictionary, textFieldBeingEdited, musicSwitch, soundSwitch, altDamageSwitch;
 
--(void) dealloc {
-    [dataDict release];
-	[username release];
-	[password release];
-	[musicSwitch release];
-	[soundSwitch release];
-	[altDamageSwitch release];
-	[super dealloc];
-}
 
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
 }
 
 #pragma mark -
+#pragma mark textfield methods
+// return to previous table
+-(void) cancel:(id) sender {
+    if (textFieldBeingEdited != nil)
+        [self.textFieldBeingEdited resignFirstResponder];
+}
+
+// set the new value
+-(BOOL) save:(id) sender {
+    if (textFieldBeingEdited != nil) {
+        if (textFieldBeingEdited.tag == 0) {
+            [self.settingsDictionary setObject:textFieldBeingEdited.text forKey:@"username"];
+        } else {
+            [self.settingsDictionary setObject:textFieldBeingEdited.text forKey:@"password"];
+        }
+        
+        isWriteNeeded = YES;
+        [self.textFieldBeingEdited resignFirstResponder];
+        return YES;
+    }
+    return NO;
+}
+
+// the textfield is being modified, update the navigation controller
+-(void) textFieldDidBeginEditing:(UITextField *)aTextField{   
+    self.textFieldBeingEdited = aTextField;
+    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Cancel",@"from the settings table")
+                                                                     style:UIBarButtonItemStylePlain
+                                                                    target:self
+                                                                    action:@selector(cancel:)];
+    self.navigationItem.leftBarButtonItem = cancelButton;
+    [cancelButton release];
+    
+    UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Save",@"from the settings table")
+                                                                     style:UIBarButtonItemStyleDone
+                                                                    target:self
+                                                                    action:@selector(save:)];
+    self.navigationItem.rightBarButtonItem = saveButton;
+    [saveButton release];
+}
+
+// we save every time a textfield is edited, so we don't risk to update only the hogs or only the temname 
+-(BOOL) textFieldShouldEndEditing:(UITextField *)aTextField {
+    return [self save:nil];
+}
+
+// the textfield has been modified, check for empty strings and restore original navigation bar
+-(void) textFieldDidEndEditing:(UITextField *)aTextField{
+    self.textFieldBeingEdited = nil;
+    self.navigationItem.rightBarButtonItem = self.navigationItem.backBarButtonItem;
+    self.navigationItem.leftBarButtonItem = nil;
+}
+
+// limit the size of the field to 64 characters like in original frontend
+-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
+    int limit = 64;
+    return !([textField.text length] > limit && [string length] > range.length);
+}
+
+
+#pragma mark -
 #pragma mark View Lifecycle
 -(void) viewDidLoad {
+	[super viewDidLoad];
     self.musicSwitch = [[UISwitch alloc] init];
 	self.soundSwitch = [[UISwitch alloc] init];
 	self.altDamageSwitch = [[UISwitch alloc] init];
-	[self.soundSwitch addTarget:self action:@selector(sameValueSwitch) forControlEvents:UIControlEventValueChanged];
-	[self.musicSwitch addTarget:self action:@selector(checkValueSwitch) forControlEvents:UIControlEventValueChanged];
-    
+	[self.soundSwitch addTarget:self action:@selector(alsoTurnOffMusic:) forControlEvents:UIControlEventValueChanged];
+	[self.musicSwitch addTarget:self action:@selector(dontTurnOnMusic:) forControlEvents:UIControlEventValueChanged];
+	[self.altDamageSwitch addTarget:self action:@selector(justUpdateDictionary:) forControlEvents:UIControlEventValueChanged];
+
     NSString *filePath = [[SDLUIKitDelegate sharedAppDelegate] dataFilePath:@"settings.plist"];
-    NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:filePath];
-    self.dataDict = dictionary;
+    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
+    self.settingsDictionary = dictionary;
     [dictionary release];
-	[super viewDidLoad];
 }
 
--(void) viewDidUnload {
-    self.dataDict = nil;
-	self.username = nil;
-	self.password = nil;
-	self.musicSwitch = nil;
-	self.soundSwitch = nil;
-	self.altDamageSwitch = nil;
-	[super viewDidUnload];
-}
+
 
 -(void) viewWillAppear:(BOOL)animated {
     [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
-    
-    username = [NSString stringWithString:[dataDict objectForKey:@"username"]];
-    password = [NSString stringWithString:[dataDict objectForKey:@"password"]];   
+    isWriteNeeded = NO;
     
-    if (1 == [[dataDict objectForKey:@"music"] intValue]) {
-        musicSwitch.on = YES;
-    } else {
-        musicSwitch.on = NO;
-    }
-    if (1 == [[dataDict objectForKey:@"sounds"] intValue]) {
-        soundSwitch.on = YES;
-    } else {
-        soundSwitch.on = NO;
-    }
-    if (1 == [[dataDict objectForKey:@"alternate"] intValue]) {
-        altDamageSwitch.on = YES;
-    } else {
-        altDamageSwitch.on = NO;
-    }
-
+    musicSwitch.on = [[settingsDictionary objectForKey:@"music"] boolValue];
+    soundSwitch.on = [[settingsDictionary objectForKey:@"sound"] boolValue];
+    altDamageSwitch.on = [[settingsDictionary objectForKey:@"alternate"] boolValue];
+    
     [super viewWillAppear:animated];
 }
 
 -(void) viewWillDisappear:(BOOL)animated {
     [super viewWillDisappear:animated];
     
-	NSMutableDictionary *saveDict = [[NSMutableDictionary alloc] init];
-	NSString *tmpMus = (musicSwitch.on) ? @"1" : @"0";
-	NSString *tmpEff = (soundSwitch.on) ? @"1" : @"0";
-	NSString *tmpAlt = (altDamageSwitch.on) ? @"1" : @"0";
-	 
-	[saveDict setObject:username forKey:@"username"];
-	[saveDict setObject:password forKey:@"password"];
-	[saveDict setObject:tmpMus forKey:@"music"];
-	[saveDict setObject:tmpEff forKey:@"sounds"];
-	[saveDict setObject:tmpAlt forKey:@"alternate"];
-	
-    if (![dataDict isEqualToDictionary:saveDict]) {
+    if (isWriteNeeded) {
        	NSLog(@"writing preferences to file");
-        [saveDict writeToFile:[[SDLUIKitDelegate sharedAppDelegate] dataFilePath:@"settings.plist"] atomically:YES];
-        // this will also relase the previous dictionary
-        self.dataDict = saveDict;
+        [self.settingsDictionary writeToFile:[[SDLUIKitDelegate sharedAppDelegate] dataFilePath:@"settings.plist"] atomically:YES];
+        isWriteNeeded = NO;
     }
-	[saveDict release];
 }
 
 #pragma mark -
-// set music off when sound is turned off
--(void) sameValueSwitch {
+// if the sound system is off, turn off also the background music 
+-(void) alsoTurnOffMusic:(id) sender {
+    [self.settingsDictionary setObject:[NSNumber numberWithBool:soundSwitch.on] forKey:@"sound"];
 	if (YES == self.musicSwitch.on) {
 		[musicSwitch setOn:NO animated:YES];
+        [self.settingsDictionary setObject:[NSNumber numberWithBool:musicSwitch.on] forKey:@"music"];
 	}
+    isWriteNeeded = YES;
 }
 
-// don't enable music when sound is off
--(void) checkValueSwitch {
+// if the sound system is off, don't enable background music 
+-(void) dontTurnOnMusic:(id) sender {
 	if (NO == self.soundSwitch.on) {
-		[musicSwitch setOn:!musicSwitch.on animated:YES];
-	}
+		[musicSwitch setOn:NO animated:YES];
+	} else {
+        [self.settingsDictionary setObject:[NSNumber numberWithBool:musicSwitch.on] forKey:@"music"];
+        isWriteNeeded = YES;
+    }
 }
 
-/*
-// makes the keyboard go away when background is tapped
--(IBAction) backgroundTap: (id)sender {
-//	[username resignFirstResponder];
-//	[password resignFirstResponder];
+-(void) justUpdateDictionary:(id) sender {
+    UISwitch *theSwitch = (UISwitch *)sender;
+    [self.settingsDictionary setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"alternate"];
+    isWriteNeeded = YES;
 }
 
-// makes the keyboard go away when "Done" is tapped
--(IBAction) textFieldDoneEditing: (id)sender {
-	[sender resignFirstResponder];
-}
-*/
-
 /*
 #pragma mark -
 #pragma mark UIActionSheet Methods
@@ -187,63 +204,73 @@
 			return 1;
 			break;
 		default:
-			NSLog(@"Warning: unset case value for numberOfRowsInSection!");
 			break;
 	}
 	return 0;
 }
 
 -(UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-	static NSString *cellIdentifier1 = @"systemSettingsCell1";
-	static NSString *cellIdentifier2 = @"systemSettingsCell2";
-	
-	UITableViewCell *cell = nil;
-	
-	switch ([indexPath section]) {
-		case kNetworkFields:
-            cell = [aTableView dequeueReusableCellWithIdentifier:cellIdentifier1];
-            if (nil == cell) {
-                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
-                                           reuseIdentifier:cellIdentifier1] autorelease];
-            }
-            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+	static NSString *cellIdentifier = @"systemSettingsCell";
+	NSInteger row = [indexPath row];
+    NSInteger section = [indexPath section];
+    
+	UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:cellIdentifier];
+    if (nil == cell) {
+        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
+        if (section == kNetworkFields) {
+            UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(-15, 10, 100, 25)];
+            label.textAlignment = UITextAlignmentRight;
+            label.backgroundColor = [UIColor clearColor];
+            label.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize] + 2];
+            if (row == 0) 
+                label.text = NSLocalizedString(@"Nickname","from the settings table");
+            else 
+                label.text = NSLocalizedString(@"Password","from the settings table");
+            [cell.contentView addSubview:label];
+            [label release];
             
-			switch ([indexPath row]) {
+            UITextField *aTextField = [[UITextField alloc] initWithFrame:
+                                       CGRectMake(110, 12, (cell.frame.size.width + cell.frame.size.width/3) - 90, 25)];
+            aTextField.clearsOnBeginEditing = NO;
+            aTextField.returnKeyType = UIReturnKeyDone;
+            aTextField.adjustsFontSizeToFitWidth = YES;
+            aTextField.delegate = self;
+            aTextField.tag = row;
+            aTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
+            [aTextField addTarget:self action:@selector(save:) forControlEvents:UIControlEventEditingDidEndOnExit];
+            [cell.contentView addSubview:aTextField];
+            [aTextField release];
+        }
+    }
+    
+    cell.accessoryType = UITableViewCellAccessoryNone;
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    cell.imageView.image = nil;
+    
+    UITextField *aTextField;
+    switch (section) {
+        case kNetworkFields:
+            for (UIView *oneView in cell.contentView.subviews) 
+                if ([oneView isMemberOfClass:[UITextField class]]) 
+                    aTextField = (UITextField *)oneView;
+
+            switch (row) {
 				case 0:                    
-					cell.textLabel.text = NSLocalizedString(@"Nickname", @"");
-                    if ([username isEqualToString:@""]) {
-                        cell.detailTextLabel.text = @"insert username...";
-                        cell.detailTextLabel.font = [UIFont italicSystemFontOfSize:[UIFont systemFontSize]];
-                        cell.detailTextLabel.textColor = [UIColor grayColor];
-                    } else {
-                        cell.detailTextLabel.text = username;
-                    }
+                    aTextField.placeholder = NSLocalizedString(@"Insert your username (if you have one)",@"");
+                    aTextField.text = [self.settingsDictionary objectForKey:@"username"];
 					break;
 				case 1:                    
-					cell.textLabel.text = NSLocalizedString(@"Password", @"");
-                    if ([password isEqualToString:@""]) {
-                        cell.detailTextLabel.text = @"insert password...";
-                        cell.detailTextLabel.font = [UIFont italicSystemFontOfSize:[UIFont systemFontSize]];
-                        cell.detailTextLabel.textColor = [UIColor grayColor];
-                    } else {
-                        cell.detailTextLabel.text = @"••••••••";
-                    }
+                    aTextField.placeholder = NSLocalizedString(@"Insert your password",@"");
+                    aTextField.text = [self.settingsDictionary objectForKey:@"password"];
+                    aTextField.secureTextEntry = YES;
 					break;
 				default:
-					NSLog(@"Warning: unset case value in kNetworkFields section!");
 					break;
 			}
 			break;
             
 		case kAudioFields:
-            cell = [aTableView dequeueReusableCellWithIdentifier:cellIdentifier2];
-            if (nil == cell) {
-                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
-                                               reuseIdentifier:cellIdentifier2] autorelease];
-            }
-            cell.selectionStyle = UITableViewCellSelectionStyleNone;
-
-			switch ([indexPath row]) {
+			switch (row) {
 				case 0:
 					cell.textLabel.text = NSLocalizedString(@"Sound", @"");
 					cell.accessoryView = soundSwitch;
@@ -253,18 +280,11 @@
 					cell.accessoryView = musicSwitch;
 					break;
 				default:
-					NSLog(@"Warning: unset case value in kAudioFields section!");
 					break;
 			}
-            // this makes the row not selectable
 			break;
             
 		case kOtherFields:
-            cell = [aTableView dequeueReusableCellWithIdentifier:cellIdentifier2];
-            if (nil == cell) {
-                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
-                                               reuseIdentifier:cellIdentifier2] autorelease];
-            }
             cell.selectionStyle = UITableViewCellSelectionStyleNone;
 			cell.textLabel.text = NSLocalizedString(@"Alternate Damage", @"");
 			cell.accessoryView = altDamageSwitch;
@@ -336,4 +356,49 @@
 }
 */
 
+
+#pragma mark -
+#pragma mark Table view delegate
+-(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell;
+    if (kNetworkFields == [indexPath section]) {
+        cell = [aTableView cellForRowAtIndexPath:indexPath];
+        for (UIView *oneView in cell.contentView.subviews) {
+            if ([oneView isMemberOfClass:[UITextField class]]) {
+                textFieldBeingEdited = (UITextField *)oneView;
+                [textFieldBeingEdited becomeFirstResponder];
+            }
+        }
+        [aTableView deselectRowAtIndexPath:indexPath animated:NO];
+    }
+}
+
+
+#pragma mark -
+#pragma mark Memory management
+-(void) didReceiveMemoryWarning {
+    // Releases the view if it doesn't have a superview.
+    [super didReceiveMemoryWarning];
+    // Relinquish ownership any cached data, images, etc that aren't in use.
+}
+
+-(void) viewDidUnload {
+    self.settingsDictionary = nil;
+	self.textFieldBeingEdited = nil;
+	self.musicSwitch = nil;
+	self.soundSwitch = nil;
+	self.altDamageSwitch = nil;
+	[super viewDidUnload];
+}
+
+-(void) dealloc {
+    [settingsDictionary release];
+	[textFieldBeingEdited release];
+	[musicSwitch release];
+	[soundSwitch release];
+	[altDamageSwitch release];
+	[super dealloc];
+}
+
+
 @end
--- a/cocoaTouch/MainMenuViewController.m	Sat Apr 10 19:04:39 2010 +0000
+++ b/cocoaTouch/MainMenuViewController.m	Sat Apr 10 20:48:09 2010 +0000
@@ -85,12 +85,12 @@
     
     // create settings.plist
     NSMutableDictionary *saveDict = [[NSMutableDictionary alloc] init];
-	
+
     [saveDict setObject:@"" forKey:@"username"];
     [saveDict setObject:@"" forKey:@"password"];
-    [saveDict setObject:@"1" forKey:@"music"];
-    [saveDict setObject:@"1" forKey:@"sounds"];
-    [saveDict setObject:@"0" forKey:@"alternate"];
+    [saveDict setObject:[NSNumber numberWithBool:YES] forKey:@"music"];
+    [saveDict setObject:[NSNumber numberWithBool:YES] forKey:@"sound"];
+    [saveDict setObject:[NSNumber numberWithBool:NO] forKey:@"alternate"];
 
     NSString *filePath = [[SDLUIKitDelegate sharedAppDelegate] dataFilePath:@"settings.plist"];
     [saveDict writeToFile:filePath atomically:YES];
--- a/cocoaTouch/SingleTeamViewController.h	Sat Apr 10 19:04:39 2010 +0000
+++ b/cocoaTouch/SingleTeamViewController.h	Sat Apr 10 20:48:09 2010 +0000
@@ -13,7 +13,6 @@
     NSMutableDictionary *teamDictionary;
     
     UITextField *textFieldBeingEdited;
-    NSInteger selectedHog;
     NSString *teamName;
     NSArray *hatArray;
     
--- a/cocoaTouch/SingleTeamViewController.m	Sat Apr 10 19:04:39 2010 +0000
+++ b/cocoaTouch/SingleTeamViewController.m	Sat Apr 10 20:48:09 2010 +0000
@@ -33,16 +33,17 @@
 
 // set the new value
 -(BOOL) save:(id) sender {
+    NSInteger index = textFieldBeingEdited.tag;
     if (textFieldBeingEdited != nil) {
-        if (TEAMNAME_TAG == selectedHog) {
+        if (TEAMNAME_TAG == index) {
             NSLog(@"%@", textFieldBeingEdited.text);
             [self.teamDictionary setObject:textFieldBeingEdited.text forKey:@"teamname"];
         } else {
             //replace the old value with the new one
-            NSDictionary *oldHog = [[teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:selectedHog];
+            NSDictionary *oldHog = [[teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:index];
             NSMutableDictionary *newHog = [[NSMutableDictionary alloc] initWithDictionary: oldHog];
             [newHog setObject:textFieldBeingEdited.text forKey:@"hogname"];
-            [[teamDictionary objectForKey:@"hedgehogs"] replaceObjectAtIndex:selectedHog withObject:newHog];
+            [[teamDictionary objectForKey:@"hedgehogs"] replaceObjectAtIndex:index withObject:newHog];
             [newHog release];
         }
         
@@ -56,7 +57,7 @@
 // the textfield is being modified, update the navigation controller
 -(void) textFieldDidBeginEditing:(UITextField *)aTextField{   
     self.textFieldBeingEdited = aTextField;
-    selectedHog = aTextField.tag;
+
     UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Cancel",@"from the hog name table")
                                                                      style:UIBarButtonItemStylePlain
                                                                     target:self
@@ -82,7 +83,7 @@
     if ([textFieldBeingEdited.text length] == 0) 
         textFieldBeingEdited.text = [NSString stringWithFormat:@"hedgehog %d",textFieldBeingEdited.tag];
 
-    //self.textFieldBeingEdited = nil;
+    self.textFieldBeingEdited = nil;
     self.navigationItem.rightBarButtonItem = self.navigationItem.backBarButtonItem;
     self.navigationItem.leftBarButtonItem = nil;
 }
@@ -254,6 +255,7 @@
             aTextField.returnKeyType = UIReturnKeyDone;
             aTextField.adjustsFontSizeToFitWidth = YES;
             aTextField.delegate = self;
+            aTextField.tag = [indexPath row];
             aTextField.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize] + 2];
             aTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
             [aTextField addTarget:self action:@selector(save:) forControlEvents:UIControlEventEditingDidEndOnExit];
@@ -287,7 +289,6 @@
                     // we find the uitextfied and we'll use its tag to understand which one is being edited
                     UITextField *textFieldFound = (UITextField *)oneView;
                     textFieldFound.text = [[hogArray objectAtIndex:row] objectForKey:@"hogname"];
-                    textFieldFound.tag = row;
                 }
             }
 
@@ -333,7 +334,6 @@
             for (UIView *oneView in cell.contentView.subviews) {
                 if ([oneView isMemberOfClass:[UITextField class]]) {
                     textFieldBeingEdited = (UITextField *)oneView;
-                    textFieldBeingEdited.tag = row;
                     [textFieldBeingEdited becomeFirstResponder];
                 }
             }
--- a/cocoaTouch/SplitViewRootController.m	Sat Apr 10 19:04:39 2010 +0000
+++ b/cocoaTouch/SplitViewRootController.m	Sat Apr 10 20:48:09 2010 +0000
@@ -44,7 +44,6 @@
         UINavigationController *mainNavController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
     
         masterViewController.detailViewController = self.detailViewController;
-                NSLog(@"%d", [detailViewController retainCount]);
 
         [masterViewController release];
 
@@ -54,7 +53,6 @@
         
         [splitViewRootController setDelegate: self.detailViewController];
         [detailViewController release];
-                NSLog(@"%d", [detailViewController retainCount]);
 
         // add view to main controller
         [self.view addSubview:[splitViewRootController view]];
--- a/project_files/HedgewarsMobile/HedgewarsMobile.xcodeproj/vittorio.mode1v3	Sat Apr 10 19:04:39 2010 +0000
+++ b/project_files/HedgewarsMobile/HedgewarsMobile.xcodeproj/vittorio.mode1v3	Sat Apr 10 20:48:09 2010 +0000
@@ -197,49 +197,7 @@
 	<key>Notifications</key>
 	<array/>
 	<key>OpenEditors</key>
-	<array>
-		<dict>
-			<key>Content</key>
-			<dict>
-				<key>PBXProjectModuleGUID</key>
-				<string>61A0965211700517008A8930</string>
-				<key>PBXProjectModuleLabel</key>
-				<string>CommodityFunctions.h</string>
-				<key>PBXSplitModuleInNavigatorKey</key>
-				<dict>
-					<key>Split0</key>
-					<dict>
-						<key>PBXProjectModuleGUID</key>
-						<string>61A0965311700517008A8930</string>
-						<key>PBXProjectModuleLabel</key>
-						<string>CommodityFunctions.h</string>
-						<key>_historyCapacity</key>
-						<integer>0</integer>
-						<key>bookmark</key>
-						<string>61A096AF1170071E008A8930</string>
-						<key>history</key>
-						<array>
-							<string>61A0965411700517008A8930</string>
-							<string>61A0965511700517008A8930</string>
-						</array>
-					</dict>
-					<key>SplitCount</key>
-					<string>1</string>
-				</dict>
-				<key>StatusBarVisibility</key>
-				<true/>
-			</dict>
-			<key>Geometry</key>
-			<dict>
-				<key>Frame</key>
-				<string>{{0, 20}, {1058, 695}}</string>
-				<key>PBXModuleWindowStatusBarHidden2</key>
-				<false/>
-				<key>RubberWindowFrame</key>
-				<string>556 181 1058 736 0 0 1920 1178 </string>
-			</dict>
-		</dict>
-	</array>
+	<array/>
 	<key>PerspectiveWidths</key>
 	<array>
 		<integer>-1</integer>
@@ -271,8 +229,6 @@
 			<key>Layout</key>
 			<array>
 				<dict>
-					<key>BecomeActive</key>
-					<true/>
 					<key>ContentConfiguration</key>
 					<dict>
 						<key>PBXBottomSmartGroupGIDs</key>
@@ -313,9 +269,7 @@
 								<string>61A11AC31168DA2B00359010</string>
 								<string>611B0A94116B621600112153</string>
 								<string>61A11AD01168DB1F00359010</string>
-								<string>29B97315FDCFA39411CA2CEA</string>
 								<string>29B97317FDCFA39411CA2CEA</string>
-								<string>61798A5E114AE08600BA94A9</string>
 								<string>1C37FBAC04509CD000000102</string>
 								<string>1C37FAAC04509CD000000102</string>
 								<string>1C37FABC05509CD000000102</string>
@@ -323,14 +277,12 @@
 							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
 							<array>
 								<array>
-									<integer>55</integer>
-									<integer>52</integer>
-									<integer>47</integer>
+									<integer>1</integer>
 									<integer>0</integer>
 								</array>
 							</array>
 							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
-							<string>{{0, 558}, {246, 558}}</string>
+							<string>{{0, 0}, {246, 558}}</string>
 						</dict>
 						<key>PBXTopSmartGroupGIDs</key>
 						<array/>
@@ -365,7 +317,7 @@
 								<key>PBXProjectModuleGUID</key>
 								<string>1CE0B20306471E060097A5F4</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>CommodityFunctions.m</string>
+								<string>SingleTeamViewController.m</string>
 								<key>PBXSplitModuleInNavigatorKey</key>
 								<dict>
 									<key>Split0</key>
@@ -373,11 +325,11 @@
 										<key>PBXProjectModuleGUID</key>
 										<string>1CE0B20406471E060097A5F4</string>
 										<key>PBXProjectModuleLabel</key>
-										<string>CommodityFunctions.m</string>
+										<string>SingleTeamViewController.m</string>
 										<key>_historyCapacity</key>
 										<integer>0</integer>
 										<key>bookmark</key>
-										<string>61A096AE1170071E008A8930</string>
+										<string>6110C12B11711B9E002E5B93</string>
 										<key>history</key>
 										<array>
 											<string>6179889D114AA5BD00BA94A9</string>
@@ -564,8 +516,8 @@
 											<string>6188FE61116F77AF004F3690</string>
 											<string>617E1DB5116FEE5B002EF3D8</string>
 											<string>617E1DB6116FEE5B002EF3D8</string>
+											<string>6110C12A11711B9E002E5B93</string>
 											<string>61A0965B1170057A008A8930</string>
-											<string>619C523C116E56330049FD84</string>
 										</array>
 									</dict>
 									<key>SplitCount</key>
@@ -577,16 +529,18 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {533, 91}}</string>
+								<string>{{0, 0}, {533, 73}}</string>
 								<key>RubberWindowFrame</key>
 								<string>130 456 801 617 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 							<key>Proportion</key>
-							<string>91pt</string>
+							<string>73pt</string>
 						</dict>
 						<dict>
+							<key>BecomeActive</key>
+							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
@@ -597,14 +551,14 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 96}, {533, 480}}</string>
+								<string>{{0, 78}, {533, 498}}</string>
 								<key>RubberWindowFrame</key>
 								<string>130 456 801 617 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
 							<key>Proportion</key>
-							<string>480pt</string>
+							<string>498pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
@@ -623,9 +577,9 @@
 			</array>
 			<key>TableOfContents</key>
 			<array>
-				<string>61A0958A116FF221008A8930</string>
+				<string>6110C12C11711B9E002E5B93</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
-				<string>61A0958B116FF221008A8930</string>
+				<string>6110C12D11711B9E002E5B93</string>
 				<string>1CE0B20306471E060097A5F4</string>
 				<string>1CE0B20506471E060097A5F4</string>
 			</array>
@@ -763,13 +717,11 @@
 	<integer>5</integer>
 	<key>WindowOrderList</key>
 	<array>
-		<string>61A095A4116FF245008A8930</string>
-		<string>61A09596116FF221008A8930</string>
-		<string>1C78EAAD065D492600B07095</string>
+		<string>6110C12E11711B9E002E5B93</string>
+		<string>6110C12F11711B9E002E5B93</string>
 		<string>1CD10A99069EF8BA00B06720</string>
 		<string>61798848114AA42600BA94A9</string>
-		<string>6188FE8E116F8291004F3690</string>
-		<string>61A0965211700517008A8930</string>
+		<string>1C78EAAD065D492600B07095</string>
 		<string>/Users/vittorio/hedgewars/trunk/project_files/HedgewarsMobile/HedgewarsMobile.xcodeproj</string>
 	</array>
 	<key>WindowString</key>
@@ -850,7 +802,7 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>61798848114AA42600BA94A9</string>
-				<string>61A0958D116FF221008A8930</string>
+				<string>6110C0DB11700EC8002E5B93</string>
 				<string>1CD0528F0623707200166675</string>
 				<string>XCMainBuildResultsModuleGUID</string>
 			</array>
@@ -974,13 +926,13 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>1CD10A99069EF8BA00B06720</string>
-				<string>61A0958E116FF221008A8930</string>
+				<string>6110C0DC11700EC8002E5B93</string>
 				<string>1C162984064C10D400B95A72</string>
-				<string>61A0958F116FF221008A8930</string>
-				<string>61A09590116FF221008A8930</string>
-				<string>61A09591116FF221008A8930</string>
-				<string>61A09592116FF221008A8930</string>
-				<string>61A09593116FF221008A8930</string>
+				<string>6110C0DD11700EC8002E5B93</string>
+				<string>6110C0DE11700EC8002E5B93</string>
+				<string>6110C0DF11700EC8002E5B93</string>
+				<string>6110C0E011700EC8002E5B93</string>
+				<string>6110C0E111700EC8002E5B93</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.debugV3</string>
@@ -1144,7 +1096,7 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>1C78EAAD065D492600B07095</string>
-				<string>61A09594116FF221008A8930</string>
+				<string>6110C0E211700EC8002E5B93</string>
 				<string>1C78EAAC065D492600B07095</string>
 			</array>
 			<key>ToolbarConfiguration</key>
@@ -1154,7 +1106,7 @@
 			<key>WindowToolGUID</key>
 			<string>1C78EAAD065D492600B07095</string>
 			<key>WindowToolIsVisible</key>
-			<false/>
+			<true/>
 		</dict>
 		<dict>
 			<key>Identifier</key>
--- a/project_files/HedgewarsMobile/HedgewarsMobile.xcodeproj/vittorio.pbxuser	Sat Apr 10 19:04:39 2010 +0000
+++ b/project_files/HedgewarsMobile/HedgewarsMobile.xcodeproj/vittorio.pbxuser	Sat Apr 10 20:48:09 2010 +0000
@@ -107,14 +107,16 @@
 					PBXFileDataSource_Warnings_ColumnID,
 				);
 			};
-			PBXPerProjectTemplateStateSaveDate = 292549135;
-			PBXWorkspaceStateSaveDate = 292549135;
+			PBXPerProjectTemplateStateSaveDate = 292555371;
+			PBXWorkspaceStateSaveDate = 292555371;
 		};
 		perUserProjectItems = {
 			61056377116C0393003C420C /* PBXBookmark */ = 61056377116C0393003C420C /* PBXBookmark */;
 			6105637A116C0393003C420C /* PBXTextBookmark */ = 6105637A116C0393003C420C /* PBXTextBookmark */;
 			610563DE116C15E5003C420C /* PBXTextBookmark */ = 610563DE116C15E5003C420C /* PBXTextBookmark */;
 			610563DF116C15E5003C420C /* PBXTextBookmark */ = 610563DF116C15E5003C420C /* PBXTextBookmark */;
+			6110C12A11711B9E002E5B93 /* PBXTextBookmark */ = 6110C12A11711B9E002E5B93 /* PBXTextBookmark */;
+			6110C12B11711B9E002E5B93 /* PBXTextBookmark */ = 6110C12B11711B9E002E5B93 /* PBXTextBookmark */;
 			611B0AC6116B6E8B00112153 /* PBXTextBookmark */ = 611B0AC6116B6E8B00112153 /* PBXTextBookmark */;
 			611B0C42116BAF3A00112153 /* PBXTextBookmark */ = 611B0C42116BAF3A00112153 /* PBXTextBookmark */;
 			611FD81F1155111700C2203D /* PBXTextBookmark */ = 611FD81F1155111700C2203D /* PBXTextBookmark */;
@@ -162,7 +164,6 @@
 			619C51C7116E42850049FD84 /* PBXTextBookmark */ = 619C51C7116E42850049FD84 /* PBXTextBookmark */;
 			619C51CB116E42850049FD84 /* PBXTextBookmark */ = 619C51CB116E42850049FD84 /* PBXTextBookmark */;
 			619C51E0116E45820049FD84 /* PBXTextBookmark */ = 619C51E0116E45820049FD84 /* PBXTextBookmark */;
-			619C523C116E56330049FD84 /* PBXTextBookmark */ = 619C523C116E56330049FD84 /* PBXTextBookmark */;
 			619C523D116E56330049FD84 /* PBXBookmark */ = 619C523D116E56330049FD84 /* PBXBookmark */;
 			619C523F116E56330049FD84 /* PBXBookmark */ = 619C523F116E56330049FD84 /* PBXBookmark */;
 			619C5241116E56330049FD84 /* PBXBookmark */ = 619C5241116E56330049FD84 /* PBXBookmark */;
@@ -266,11 +267,7 @@
 			619C5892116E73B00049FD84 /* PBXBookmark */ = 619C5892116E73B00049FD84 /* PBXBookmark */;
 			619C58B2116E76080049FD84 /* PBXBookmark */ = 619C58B2116E76080049FD84 /* PBXBookmark */;
 			619C58B3116E76080049FD84 /* PBXTextBookmark */ = 619C58B3116E76080049FD84 /* PBXTextBookmark */;
-			61A0965411700517008A8930 /* PBXTextBookmark */ = 61A0965411700517008A8930 /* PBXTextBookmark */;
-			61A0965511700517008A8930 /* PBXTextBookmark */ = 61A0965511700517008A8930 /* PBXTextBookmark */;
 			61A0965B1170057A008A8930 /* PBXTextBookmark */ = 61A0965B1170057A008A8930 /* PBXTextBookmark */;
-			61A096AE1170071E008A8930 /* PBXTextBookmark */ = 61A096AE1170071E008A8930 /* PBXTextBookmark */;
-			61A096AF1170071E008A8930 /* PBXTextBookmark */ = 61A096AF1170071E008A8930 /* PBXTextBookmark */;
 			61CCBE60116135FF00833FE8 /* PBXTextBookmark */ = 61CCBE60116135FF00833FE8 /* PBXTextBookmark */;
 			61CCBF1E116162CA00833FE8 /* PBXTextBookmark */ = 61CCBF1E116162CA00833FE8 /* PBXTextBookmark */;
 			61CCBF451161637F00833FE8 /* PBXTextBookmark */ = 61CCBF451161637F00833FE8 /* PBXTextBookmark */;
@@ -354,19 +351,39 @@
 		path = "/Users/vittorio/hedgewars/Library/SDL-1.3/SDL/src/video/SDL_renderer_gles.c";
 		sourceTree = "<absolute>";
 	};
+	6110C12A11711B9E002E5B93 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 619C51BE116E40FC0049FD84 /* CommodityFunctions.m */;
+		name = "CommodityFunctions.m: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 51;
+		vrLoc = 0;
+	};
+	6110C12B11711B9E002E5B93 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 61A11AE01168DC6E00359010 /* SingleTeamViewController.m */;
+		name = "SingleTeamViewController.m: 133";
+		rLen = 1;
+		rLoc = 5496;
+		rType = 0;
+		vrLen = 128;
+		vrLoc = 1689;
+	};
 	611B0A9F116B626E00112153 /* GeneralSettingsViewController.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {472, 468}}";
-			sepNavSelRange = "{0, 0}";
-			sepNavVisRange = "{0, 144}";
+			sepNavIntBoundsRect = "{{0, 0}, {999, 639}}";
+			sepNavSelRange = "{288, 18}";
+			sepNavVisRange = "{0, 825}";
 		};
 	};
 	611B0AA0116B626E00112153 /* GeneralSettingsViewController.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {999, 4368}}";
-			sepNavSelRange = "{773, 0}";
-			sepNavVisRange = "{6031, 2352}";
-			sepNavWindowFrame = "{{225, 314}, {1058, 792}}";
+			sepNavIntBoundsRect = "{{0, 0}, {999, 5577}}";
+			sepNavSelRange = "{348, 17}";
+			sepNavVisRange = "{13122, 1287}";
+			sepNavWindowFrame = "{{413, 349}, {1058, 792}}";
 		};
 	};
 	611B0AC6116B6E8B00112153 /* PBXTextBookmark */ = {
@@ -384,7 +401,7 @@
 		fRef = 611B0AA0116B626E00112153 /* GeneralSettingsViewController.m */;
 		name = "GeneralSettingsViewController.m: 249";
 		rLen = 0;
-		rLoc = 8420;
+		rLoc = 10789;
 		rType = 0;
 		vrLen = 75;
 		vrLoc = 631;
@@ -533,7 +550,7 @@
 		fRef = 61A11ADF1168DC6E00359010 /* SingleTeamViewController.h */;
 		name = "SingleTeamViewController.h: 19";
 		rLen = 0;
-		rLoc = 551;
+		rLoc = 524;
 		rType = 0;
 		vrLen = 213;
 		vrLoc = 337;
@@ -677,9 +694,9 @@
 	};
 	617987E7114AA34C00BA94A9 /* hwengine.pas */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {838, 7787}}";
-			sepNavSelRange = "{7142, 0}";
-			sepNavVisRange = "{7692, 1318}";
+			sepNavIntBoundsRect = "{{0, 0}, {838, 7813}}";
+			sepNavSelRange = "{7090, 0}";
+			sepNavVisRange = "{6695, 1053}";
 			sepNavWindowFrame = "{{421, 176}, {897, 692}}";
 		};
 	};
@@ -828,9 +845,9 @@
 	};
 	617987FE114AA34C00BA94A9 /* uKeys.pas */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {663, 7020}}";
-			sepNavSelRange = "{2995, 0}";
-			sepNavVisRange = "{2933, 94}";
+			sepNavIntBoundsRect = "{{0, 0}, {862, 7007}}";
+			sepNavSelRange = "{2977, 18}";
+			sepNavVisRange = "{2541, 832}";
 			sepNavWindowFrame = "{{674, 505}, {921, 605}}";
 		};
 	};
@@ -1056,10 +1073,10 @@
 	};
 	6179886F114AA4D000BA94A9 /* MainMenuViewController.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {999, 2171}}";
-			sepNavSelRange = "{1964, 0}";
-			sepNavVisRange = "{927, 2336}";
-			sepNavWindowFrame = "{{682, 122}, {1058, 792}}";
+			sepNavIntBoundsRect = "{{0, 0}, {999, 2236}}";
+			sepNavSelRange = "{3355, 0}";
+			sepNavVisRange = "{1449, 2305}";
+			sepNavWindowFrame = "{{682, 125}, {1058, 792}}";
 		};
 	};
 	61798887114AA4E600BA94A9 /* GameSetup.h */ = {
@@ -1072,9 +1089,9 @@
 	};
 	61798888114AA4E600BA94A9 /* GameSetup.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1307, 4901}}";
-			sepNavSelRange = "{9610, 0}";
-			sepNavVisRange = "{8596, 1697}";
+			sepNavIntBoundsRect = "{{0, 0}, {1020, 4810}}";
+			sepNavSelRange = "{12923, 0}";
+			sepNavVisRange = "{10617, 2646}";
 			sepNavWindowFrame = "{{760, 256}, {1079, 870}}";
 		};
 	};
@@ -1210,17 +1227,17 @@
 	};
 	619C51BD116E40FC0049FD84 /* CommodityFunctions.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {999, 664}}";
+			sepNavIntBoundsRect = "{{0, 0}, {999, 641}}";
 			sepNavSelRange = "{416, 18}";
 			sepNavVisRange = "{0, 991}";
-			sepNavWindowFrame = "{{556, 125}, {1058, 792}}";
+			sepNavWindowFrame = "{{556, 211}, {1058, 792}}";
 		};
 	};
 	619C51BE116E40FC0049FD84 /* CommodityFunctions.m */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {472, 741}}";
 			sepNavSelRange = "{0, 0}";
-			sepNavVisRange = "{0, 88}";
+			sepNavVisRange = "{0, 51}";
 			sepNavWindowFrame = "{{556, 125}, {1058, 792}}";
 		};
 	};
@@ -1280,16 +1297,6 @@
 			sepNavWindowFrame = "{{67, 264}, {1058, 792}}";
 		};
 	};
-	619C523C116E56330049FD84 /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 619C51BE116E40FC0049FD84 /* CommodityFunctions.m */;
-		name = "CommodityFunctions.m: 1";
-		rLen = 0;
-		rLoc = 0;
-		rType = 0;
-		vrLen = 3;
-		vrLoc = 0;
-	};
 	619C523D116E56330049FD84 /* PBXBookmark */ = {
 		isa = PBXBookmark;
 		fRef = 619C523E116E56330049FD84 /* hh_small.png */;
@@ -2451,56 +2458,16 @@
 		vrLen = 222;
 		vrLoc = 0;
 	};
-	61A0965411700517008A8930 /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 619C51BE116E40FC0049FD84 /* CommodityFunctions.m */;
-		name = "CommodityFunctions.m: 50";
-		rLen = 0;
-		rLoc = 2016;
-		rType = 0;
-		vrLen = 2010;
-		vrLoc = 48;
-	};
-	61A0965511700517008A8930 /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 619C51BD116E40FC0049FD84 /* CommodityFunctions.h */;
-		name = "CommodityFunctions.h: 20";
-		rLen = 0;
-		rLoc = 990;
-		rType = 0;
-		vrLen = 857;
-		vrLoc = 0;
-	};
 	61A0965B1170057A008A8930 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 61A11AE01168DC6E00359010 /* SingleTeamViewController.m */;
 		name = "SingleTeamViewController.m: 132";
 		rLen = 1;
-		rLoc = 5501;
+		rLoc = 5496;
 		rType = 0;
 		vrLen = 41;
 		vrLoc = 1746;
 	};
-	61A096AE1170071E008A8930 /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 619C51BE116E40FC0049FD84 /* CommodityFunctions.m */;
-		name = "CommodityFunctions.m: 1";
-		rLen = 0;
-		rLoc = 0;
-		rType = 0;
-		vrLen = 88;
-		vrLoc = 0;
-	};
-	61A096AF1170071E008A8930 /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 619C51BD116E40FC0049FD84 /* CommodityFunctions.h */;
-		name = "CommodityFunctions.h: 15";
-		rLen = 18;
-		rLoc = 416;
-		rType = 0;
-		vrLen = 991;
-		vrLoc = 0;
-	};
 	61A11A4C1168D13600359010 /* PopoverMenuViewController.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {999, 664}}";
@@ -2511,9 +2478,9 @@
 	};
 	61A11A4D1168D13600359010 /* PopoverMenuViewController.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {810, 1573}}";
-			sepNavSelRange = "{299, 0}";
-			sepNavVisRange = "{0, 7}";
+			sepNavIntBoundsRect = "{{0, 0}, {999, 1638}}";
+			sepNavSelRange = "{2200, 2}";
+			sepNavVisRange = "{1818, 1812}";
 			sepNavWindowFrame = "{{84, 318}, {1058, 792}}";
 		};
 	};
@@ -2526,9 +2493,9 @@
 	};
 	61A11AC01168D8B600359010 /* SplitViewRootController.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {999, 1235}}";
-			sepNavSelRange = "{1067, 0}";
-			sepNavVisRange = "{0, 2105}";
+			sepNavIntBoundsRect = "{{0, 0}, {999, 1300}}";
+			sepNavSelRange = "{2368, 0}";
+			sepNavVisRange = "{709, 2090}";
 			sepNavWindowFrame = "{{195, 264}, {1058, 792}}";
 		};
 	};
@@ -2581,18 +2548,18 @@
 	};
 	61A11ADF1168DC6E00359010 /* SingleTeamViewController.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {999, 616}}";
-			sepNavSelRange = "{272, 19}";
-			sepNavVisRange = "{0, 992}";
+			sepNavIntBoundsRect = "{{0, 0}, {999, 639}}";
+			sepNavSelRange = "{380, 0}";
+			sepNavVisRange = "{0, 965}";
 			sepNavWindowFrame = "{{38, 374}, {1002, 778}}";
 		};
 	};
 	61A11AE01168DC6E00359010 /* SingleTeamViewController.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {999, 5005}}";
-			sepNavSelRange = "{6261, 0}";
-			sepNavVisRange = "{6192, 1915}";
-			sepNavWindowFrame = "{{701, 215}, {1058, 792}}";
+			sepNavIntBoundsRect = "{{0, 0}, {761, 5148}}";
+			sepNavSelRange = "{5496, 1}";
+			sepNavVisRange = "{1689, 128}";
+			sepNavWindowFrame = "{{714, 185}, {1058, 792}}";
 		};
 	};
 	61A11AE21168DC9400359010 /* HogHatViewController.h */ = {
@@ -2825,9 +2792,9 @@
 	};
 	61CE250C115E749A0098C467 /* OverlayViewController.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {472, 4251}}";
+			sepNavIntBoundsRect = "{{0, 0}, {985, 4186}}";
 			sepNavSelRange = "{391, 0}";
-			sepNavVisRange = "{221, 26}";
+			sepNavVisRange = "{2215, 1678}";
 			sepNavWindowFrame = "{{690, 149}, {938, 967}}";
 		};
 	};