--- 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];
}
--- a/project_files/HedgewarsMobile/Classes/UIImageExtra.m Sun Jun 27 05:32:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/UIImageExtra.m Sun Jun 27 16:44:24 2010 +0200
@@ -12,21 +12,22 @@
@implementation UIImage (extra)
-(UIImage *)scaleToSize:(CGSize) size {
- // Create a bitmap graphics context
- // This will also set it as the current context
- UIGraphicsBeginImageContext(size);
-
- // Draw the scaled image in the current context
- [self drawInRect:CGRectMake(0, 0, size.width, size.height)];
-
- // Create a new image from current context
- UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
-
- // Pop the current context from the stack
- UIGraphicsEndImageContext();
-
- // Return our new scaled image (autoreleased)
- return scaledImage;
+ DLog(@"warning - this is a very expensive operation, you should avoid using it");
+
+ // Create a bitmap graphics context; this will also set it as the current context
+ UIGraphicsBeginImageContext(size);
+
+ // Draw the scaled image in the current context
+ [self drawInRect:CGRectMake(0, 0, size.width, size.height)];
+
+ // Create a new image from current context
+ UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
+
+ // Pop the current context from the stack
+ UIGraphicsEndImageContext();
+
+ // Return our new scaled image (autoreleased)
+ return scaledImage;
}
-(UIImage *)mergeWith:(UIImage *)secondImage atPoint:(CGPoint) secondImagePoint {
@@ -35,12 +36,13 @@
}
-(UIImage *)mergeWith:(UIImage *)secondImage atPoint:(CGPoint) secondImagePoint atSize:(CGSize) resultingSize {
+ // Create a bitmap graphics context; this will also set it as the current context
UIGraphicsBeginImageContext(resultingSize);
- // drav the background image
+ // draw the background image in the current context
[self drawAtPoint:CGPointMake(0,0)];
- // draw the image on top of the first image
+ // draw the image on top of the first image (because the context is the same)
[secondImage drawAtPoint:secondImagePoint];
// create an image from the current contex (not thread safe)
@@ -79,38 +81,40 @@
}
-(UIImage *)convertToGrayScale {
- // Create image rectangle with current image width/height
- CGRect imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
-
- // Grayscale color space
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
-
- // Create bitmap content with current image size and grayscale colorspace
- CGContextRef context = CGBitmapContextCreate(nil, self.size.width, self.size.height, 8, 0, colorSpace, kCGImageAlphaNone);
-
- // Draw image into current context, with specified rectangle
- // using previously defined context (with grayscale colorspace)
- CGContextDrawImage(context, imageRect, [self CGImage]);
-
- // Create bitmap image info from pixel data in current context
- CGImageRef imageRef = CGBitmapContextCreateImage(context);
-
- // Create a new UIImage object
- UIImage *newImage = [UIImage imageWithCGImage:imageRef];
-
- // Release colorspace, context and bitmap information
- CGColorSpaceRelease(colorSpace);
- CGContextRelease(context);
- CFRelease(imageRef);
-
- // Return the new grayscale image
- return newImage;
+ // Create image rectangle with current image width/height
+ CGRect imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
+
+ // Grayscale color space
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
+
+ // Create bitmap content with current image size and grayscale colorspace
+ CGContextRef context = CGBitmapContextCreate(nil, self.size.width, self.size.height, 8, 0, colorSpace, kCGImageAlphaNone);
+
+ // Draw image into current context, with specified rectangle
+ // using previously defined context (with grayscale colorspace)
+ CGContextDrawImage(context, imageRect, [self CGImage]);
+
+ // Create bitmap image info from pixel data in current context
+ CGImageRef imageRef = CGBitmapContextCreateImage(context);
+
+ // Create a new UIImage object
+ UIImage *newImage = [UIImage imageWithCGImage:imageRef];
+
+ // Release colorspace, context and bitmap information
+ CGColorSpaceRelease(colorSpace);
+ CGContextRelease(context);
+ CFRelease(imageRef);
+
+ // Return the new grayscale image
+ return newImage;
}
// by http://iphonedevelopertips.com/cocoa/how-to-mask-an-image.html turned into a category by koda
-(UIImage*) maskImageWith:(UIImage *)maskImage {
- CGImageRef maskRef = maskImage.CGImage;
+ // prepare the reference image
+ CGImageRef maskRef = [maskImage CGImage];
+ // create the mask using parameters of the mask reference
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
@@ -118,21 +122,19 @@
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
+ // create an image in the current context
CGImageRef masked = CGImageCreateWithMask([self CGImage], mask);
-
CGImageRelease(mask);
UIImage* retImage = [UIImage imageWithCGImage:masked];
-
CGImageRelease(masked);
return retImage;
}
// by http://blog.sallarp.com/iphone-uiimage-round-corners/ turned into a category by koda
-void addRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth, float ovalHeight)
-{
- float fw, fh;
+void addRoundedRectToPath(CGContextRef context, CGRect rect, CGFloat ovalWidth, CGFloat ovalHeight) {
+ CGFloat fw, fh;
if (ovalWidth == 0 || ovalHeight == 0) {
CGContextAddRect(context, rect);
return;
@@ -151,13 +153,11 @@
CGContextRestoreGState(context);
}
--(UIImage *)makeRoundCornersOfSize:(CGSize) sizewh {
- UIImage * newImage = nil;
-
- NSInteger cornerWidth = sizewh.width;
- NSInteger cornerHeight = sizewh.height;
- int w = self.size.width;
- int h = self.size.height;
+-(UIImage *)makeRoundCornersOfSize:(CGSize) sizewh {
+ CGFloat cornerWidth = sizewh.width;
+ CGFloat cornerHeight = sizewh.height;
+ CGFloat w = self.size.width;
+ CGFloat h = self.size.height;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
@@ -168,17 +168,16 @@
CGContextClosePath(context);
CGContextClip(context);
- CGContextDrawImage(context, CGRectMake(0, 0, w, h), self.CGImage);
+ CGContextDrawImage(context, CGRectMake(0, 0, w, h), [self CGImage]);
CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
- newImage = [UIImage imageWithCGImage:imageMasked];
+ UIImage *newImage = [UIImage imageWithCGImage:imageMasked];
CGImageRelease(imageMasked);
return newImage;
}
-
@end