diff -r f8d5ac50e307 -r bc125bea5849 project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m --- a/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m Tue Jul 20 03:14:43 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m Tue Jul 20 05:37:58 2010 +0200 @@ -8,6 +8,7 @@ #import "GeneralSettingsViewController.h" #import "CommodityFunctions.h" +#import "EditableCellView.h" @implementation GeneralSettingsViewController @synthesize settingsDictionary, textFieldBeingEdited, musicSwitch, soundSwitch, altDamageSwitch; @@ -26,19 +27,15 @@ } // set the new value --(BOOL) save:(id) sender { +-(void) save:(id) sender { if (textFieldBeingEdited != nil) { - if (textFieldBeingEdited.tag == 0) { + if (textFieldBeingEdited.tag == 0) [self.settingsDictionary setObject:textFieldBeingEdited.text forKey:@"username"]; - } else { + 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 @@ -68,11 +65,9 @@ // 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); + return !([textField.text length] > MAX_STRING_LENGTH && [string length] > range.length); } - #pragma mark - #pragma mark View Lifecycle -(void) viewDidLoad { @@ -91,7 +86,6 @@ -(void) viewWillAppear:(BOOL)animated { [self.tableView setContentOffset:CGPointMake(0,0) animated:NO]; - isWriteNeeded = NO; musicSwitch.on = [[settingsDictionary objectForKey:@"music"] boolValue]; soundSwitch.on = [[settingsDictionary objectForKey:@"sound"] boolValue]; @@ -101,13 +95,8 @@ } -(void) viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - if (isWriteNeeded) { - NSLog(@"writing preferences to file"); - [self.settingsDictionary writeToFile:SETTINGS_FILE() atomically:YES]; - isWriteNeeded = NO; - } + [super viewWillDisappear:animated]; + [self.settingsDictionary writeToFile:SETTINGS_FILE() atomically:YES]; } #pragma mark - @@ -118,23 +107,19 @@ [musicSwitch setOn:NO animated:YES]; [self.settingsDictionary setObject:[NSNumber numberWithBool:musicSwitch.on] forKey:@"music"]; } - isWriteNeeded = YES; } // if the sound system is off, don't enable background music -(void) dontTurnOnMusic:(id) sender { - if (NO == self.soundSwitch.on) { + if (NO == self.soundSwitch.on) [musicSwitch setOn:NO animated:YES]; - } else { + else [self.settingsDictionary setObject:[NSNumber numberWithBool:musicSwitch.on] forKey:@"music"]; - isWriteNeeded = YES; - } } -(void) justUpdateDictionary:(id) sender { UISwitch *theSwitch = (UISwitch *)sender; [self.settingsDictionary setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"alternate"]; - isWriteNeeded = YES; } #pragma mark - @@ -145,13 +130,13 @@ -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { switch (section) { - case kNetworkFields: + case 0: // user and pass return 2; break; - case kAudioFields: + case 1: // audio return 2; break; - case kOtherFields: + case 2: // alternate damage return 1; break; default: @@ -165,42 +150,37 @@ 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]; - - 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; - + UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:cellIdentifier]; UITextField *aTextField; switch (section) { - case kNetworkFields: + case 0: + if (nil == cell) { + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease]; + if (section == 0) { + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(-9, 10, 100, [UIFont labelFontSize] + 4)]; + label.textAlignment = UITextAlignmentRight; + label.backgroundColor = [UIColor clearColor]; + label.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; + 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]; + + UITextField *aTextField = [[UITextField alloc] initWithFrame: + CGRectMake(110, 10, (cell.frame.size.width + cell.frame.size.width/3) - 90, [UIFont labelFontSize] + 4)]; + 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]; + } + } for (UIView *oneView in cell.contentView.subviews) if ([oneView isMemberOfClass:[UITextField class]]) aTextField = (UITextField *)oneView; @@ -209,6 +189,7 @@ case 0: aTextField.placeholder = NSLocalizedString(@"Insert your username (if you have one)",@""); aTextField.text = [self.settingsDictionary objectForKey:@"username"]; + aTextField.secureTextEntry = NO; break; case 1: aTextField.placeholder = NSLocalizedString(@"Insert your password",@""); @@ -220,7 +201,11 @@ } break; - case kAudioFields: + cell.accessoryView = nil; + case 1: + if (nil == cell) + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease]; + switch (row) { case 0: cell.textLabel.text = NSLocalizedString(@"Sound", @""); @@ -235,31 +220,38 @@ } break; - case kOtherFields: - cell.selectionStyle = UITableViewCellSelectionStyleNone; + case 2: + if (nil == cell) + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease]; + cell.textLabel.text = NSLocalizedString(@"Alternate Damage", @""); cell.accessoryView = altDamageSwitch; break; default: break; } + + cell.accessoryType = UITableViewCellAccessoryNone; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.imageView.image = nil; + return cell; } -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { NSString *sectionTitle = nil; switch (section) { - case kNetworkFields: + case 0: sectionTitle = NSLocalizedString(@"Network Configuration", @""); break; - case kAudioFields: + case 1: sectionTitle = NSLocalizedString(@"Audio Preferences", @""); break; - case kOtherFields: + case 2: sectionTitle = NSLocalizedString(@"Other Settings", @""); break; default: - NSLog(@"Nope"); + DLog(@"Nope"); break; } return sectionTitle; @@ -313,7 +305,7 @@ #pragma mark Table view delegate -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell; - if (kNetworkFields == [indexPath section]) { + if (0 == [indexPath section]) { cell = [aTableView cellForRowAtIndexPath:indexPath]; for (UIView *oneView in cell.contentView.subviews) { if ([oneView isMemberOfClass:[UITextField class]]) {