diff -r 5c99b239340e -r c84067629035 project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m --- a/project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m Sun Jun 27 05:32:11 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m Sun Jun 27 16:44:24 2010 +0200 @@ -11,6 +11,9 @@ #import "CommodityFunctions.h" #import "UIImageExtra.h" +#define LABEL_TAG 12345 +#define SLIDER_TAG 54321 + @implementation SingleSchemeViewController @synthesize textFieldBeingEdited, schemeArray, basicSettingList, gameModifierArray; @@ -80,15 +83,24 @@ [mods release]; NSArray *basicSettings = [[NSArray alloc] initWithObjects: - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Damage Modifier",@""),@"title",@"Damage",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Turn Time",@""),@"title",@"Time",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Initial Health",@""),@"title",@"Health",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Sudden Death Timeout",@""),@"title",@"SuddenDeath",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Crate Drops",@""),@"title",@"Box",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Mines Time",@""),@"title",@"Time",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Mines Number",@""),@"title",@"Mine",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Dud Mines Probability",@""),@"title",@"Dud",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Explosives",@""),@"title",@"Damage",@"image",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Damage Modifier",@""),@"title",@"Damage",@"image", + [NSNumber numberWithInt:100],@"default",[NSNumber numberWithInt:10],@"min",[NSNumber numberWithInt:300],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Turn Time",@""),@"title",@"Time",@"image", + [NSNumber numberWithInt:45],@"default",[NSNumber numberWithInt:1],@"min",[NSNumber numberWithInt:99],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Initial Health",@""),@"title",@"Health",@"image", + [NSNumber numberWithInt:100],@"default",[NSNumber numberWithInt:50],@"min",[NSNumber numberWithInt:200],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Sudden Death Timeout",@""),@"title",@"SuddenDeath",@"image", + [NSNumber numberWithInt:15],@"default",[NSNumber numberWithInt:0],@"min",[NSNumber numberWithInt:50],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Crate Drops",@""),@"title",@"Box",@"image", + [NSNumber numberWithInt:5],@"default",[NSNumber numberWithInt:0],@"min",[NSNumber numberWithInt:9],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Mines Time",@""),@"title",@"Time",@"image", + [NSNumber numberWithInt:3],@"default",[NSNumber numberWithInt:0],@"min",[NSNumber numberWithInt:3],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Mines Number",@""),@"title",@"Mine",@"image", + [NSNumber numberWithInt:4],@"default",[NSNumber numberWithInt:1],@"min",[NSNumber numberWithInt:80],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Dud Mines Probability",@""),@"title",@"Dud",@"image", + [NSNumber numberWithInt:0],@"default",[NSNumber numberWithInt:0],@"min",[NSNumber numberWithInt:100],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Explosives",@""),@"title",@"Damage",@"image", + [NSNumber numberWithInt:2],@"default",[NSNumber numberWithInt:0],@"min",[NSNumber numberWithInt:40],@"max",nil], nil]; self.basicSettingList = basicSettings; [basicSettings release]; @@ -193,7 +205,7 @@ return 0; } --(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { +-(UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier0 = @"Cell0"; static NSString *CellIdentifier1 = @"Cell1"; static NSString *CellIdentifier2 = @"Cell2"; @@ -203,7 +215,7 @@ switch ([indexPath section]) { case 0: - cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier0]; + cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier0]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier0] autorelease]; @@ -233,20 +245,44 @@ cell.imageView.image = nil; break; case 1: - cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1]; + cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier1]; + NSDictionary *detail = [self.basicSettingList objectAtIndex:row]; + // need to offset this section (see format in CommodityFunctions.m and above) + NSInteger gmSize = [self.gameModifierArray count]; if (cell == nil) { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier1] autorelease]; + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(260, 12, 150, 23)]; + slider.maximumValue = [[detail objectForKey:@"max"] floatValue]; + slider.minimumValue = [[detail objectForKey:@"min"] floatValue]; + slider.tag = row+gmSize; + [slider addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged]; + [cell.contentView addSubview:slider]; + [slider release]; + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 7, 200, 30)]; + label.tag = LABEL_TAG; + label.backgroundColor = [UIColor clearColor]; + label.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; + [cell.contentView addSubview:label]; + [label release]; } UIImage *img = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/icon%@.png",BTN_DIRECTORY(),[[self.basicSettingList objectAtIndex:row] objectForKey:@"image"]]]; cell.imageView.image = [img scaleToSize:CGSizeMake(40, 40)]; [img release]; - cell.textLabel.text = [[self.basicSettingList objectAtIndex:row] objectForKey:@"title"]; - cell.detailTextLabel.text = nil; + + UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:LABEL_TAG]; + cellLabel.text = [[self.basicSettingList objectAtIndex:row] objectForKey:@"title"]; + + UISlider *cellSlider = (UISlider *)[cell.contentView viewWithTag:row+gmSize]; + cellSlider.value = [[self.schemeArray objectAtIndex:row+gmSize] floatValue]; + + // forced to use this weird format otherwise the label disappears when size of the text is bigger than the original + cell.detailTextLabel.text = [NSString stringWithFormat:@"%0.3d",[[self.schemeArray objectAtIndex:row+gmSize] intValue]]; break; case 2: - cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier2]; + cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier2]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier2] autorelease]; @@ -261,6 +297,7 @@ cell.imageView.image = image; [image release]; [cell.imageView.layer setCornerRadius:7.0f]; + [cell.imageView.layer setBorderWidth:1]; [cell.imageView.layer setMasksToBounds:YES]; cell.textLabel.text = [[self.gameModifierArray objectAtIndex:row] objectForKey:@"title"]; cell.detailTextLabel.text = [[self.gameModifierArray objectAtIndex:row] objectForKey:@"description"]; @@ -275,20 +312,55 @@ [self.schemeArray replaceObjectAtIndex:theSwitch.tag withObject:[NSNumber numberWithBool:theSwitch.on]]; } +-(void) sliderChanged:(id) sender { + // need to offset this section (see format in CommodityFunctions.m and above) + NSInteger gmSize = [self.gameModifierArray count]; + // the slider that changed is sent as object + UISlider *theSlider = (UISlider *)sender; + // create the indexPath of the row of the slider + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:theSlider.tag-gmSize inSection:1]; + // get its cell + UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; + // grab the associated label + UILabel *label = (UILabel *)cell.detailTextLabel; + // modify it + label.text = [NSString stringWithFormat:@"%0.3d",(int)theSlider.value]; + // save changes in the main array (remember that you need to offset it) + [self.schemeArray replaceObjectAtIndex:theSlider.tag withObject:[NSNumber numberWithInt:(int)theSlider.value]]; + NSLog(@"%@",self.schemeArray); +} #pragma mark - #pragma mark Table view delegate -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [aTableView cellForRowAtIndexPath:indexPath]; + UISwitch *sw = nil; + UISlider *cellSlider = nil; - if ([indexPath section] == 0) { - UITableViewCell *cell = [aTableView cellForRowAtIndexPath:indexPath]; - for (UIView *oneView in cell.contentView.subviews) { - if ([oneView isMemberOfClass:[UITextField class]]) { - textFieldBeingEdited = (UITextField *)oneView; - [textFieldBeingEdited becomeFirstResponder]; + switch ([indexPath section]) { + case 0: + for (UIView *oneView in cell.contentView.subviews) { + if ([oneView isMemberOfClass:[UITextField class]]) { + textFieldBeingEdited = (UITextField *)oneView; + [textFieldBeingEdited becomeFirstResponder]; + } } - } + break; + case 1: + cellSlider = (UISlider *)[cell.contentView viewWithTag:[indexPath row]+[self.gameModifierArray count]]; + [cellSlider setValue:[[[self.basicSettingList objectAtIndex:[indexPath row]] objectForKey:@"default"] floatValue] animated:YES]; + [self sliderChanged:cellSlider]; + //cell.detailTextLabel.text = [[[self.basicSettingList objectAtIndex:[indexPath row]] objectForKey:@"default"] stringValue]; + break; + case 2: + sw = (UISwitch *)cell.accessoryView; + [sw setOn:!sw.on animated:YES]; + [self toggleSwitch:sw]; + break; + default: + break; } + [aTableView deselectRowAtIndexPath:indexPath animated:YES]; }