split the flag tableview in worldwide and community
authorkoda
Mon, 11 Oct 2010 00:08:48 +0200
changeset 3950 296cbdd85e50
parent 3949 4c4c0a2507cc
child 3952 d6412423da45
split the flag tableview in worldwide and community
project_files/HedgewarsMobile/Classes/FlagsViewController.h
project_files/HedgewarsMobile/Classes/FlagsViewController.m
--- a/project_files/HedgewarsMobile/Classes/FlagsViewController.h	Sun Oct 10 16:51:40 2010 -0400
+++ b/project_files/HedgewarsMobile/Classes/FlagsViewController.h	Mon Oct 11 00:08:48 2010 +0200
@@ -26,11 +26,13 @@
     NSDictionary *teamDictionary;
 
     NSArray *flagArray;
+    NSArray *communityArray;
     NSIndexPath *lastIndexPath;
 }
 
 @property (nonatomic,retain) NSDictionary * teamDictionary;
 @property (nonatomic,retain) NSArray *flagArray;
+@property (nonatomic,retain) NSArray *communityArray;
 @property (nonatomic,retain) NSIndexPath *lastIndexPath;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/FlagsViewController.m	Sun Oct 10 16:51:40 2010 -0400
+++ b/project_files/HedgewarsMobile/Classes/FlagsViewController.m	Mon Oct 11 00:08:48 2010 +0200
@@ -23,7 +23,7 @@
 #import "CommodityFunctions.h"
 
 @implementation FlagsViewController
-@synthesize teamDictionary, flagArray, lastIndexPath;
+@synthesize teamDictionary, flagArray, communityArray, lastIndexPath;
 
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
@@ -36,48 +36,73 @@
 -(void) viewDidLoad {
     [super viewDidLoad];
 
-    self.flagArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:FLAGS_DIRECTORY() error:NULL];
+    NSMutableArray *array_na = [[NSMutableArray alloc] init];
+    NSMutableArray *array_cm = [[NSMutableArray alloc] init];
+    
+    for (NSString *name in [[NSFileManager defaultManager] contentsOfDirectoryAtPath:FLAGS_DIRECTORY() error:NULL]) {
+        if ([name hasPrefix:@"cm_"]) {
+            NSString *processed = [name substringFromIndex:3];
+            [array_cm addObject:processed];
+        } else
+             [array_na addObject:name];
+    }
+    
+    self.flagArray = array_na;
+    [array_na release];
+    self.communityArray = array_cm;
+    [array_cm release];
 
     self.title = NSLocalizedString(@"Set team flag",@"");
 }
 
 -(void) viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
+    // reloadData needed because team might change
     [self.tableView reloadData];
-    [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
+    //[self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
 }
 
 
 #pragma mark -
 #pragma mark Table view data source
 -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
-    return 1;
+    return 2;
 }
 
 -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return [flagArray count];
+    if (section == 0)
+        return [self.flagArray count];
+    else
+        return [self.communityArray count];
 }
 
 // Customize the appearance of table view cells.
 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-
     static NSString *CellIdentifier = @"Cell";
+    NSInteger row = [indexPath row];
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
     }
 
-    NSString *flag = [flagArray objectAtIndex:[indexPath row]];
-
-    NSString *flagFile = [[NSString alloc] initWithFormat:@"%@/%@", FLAGS_DIRECTORY(), flag];
+    NSString *flagName = nil;
+    NSArray *source = nil;
+    if ([indexPath section] == 0) {
+        source = self.flagArray;
+        flagName = [source objectAtIndex:row];
+    } else {
+        source = self.communityArray;
+        flagName = [NSString stringWithFormat:@"cm_%@",[source objectAtIndex:row]];
+    }
+    NSString *flagFile = [[NSString alloc] initWithFormat:@"%@/%@", FLAGS_DIRECTORY(), flagName];
     UIImage *flagSprite = [[UIImage alloc] initWithContentsOfFile:flagFile];
     [flagFile release];
     cell.imageView.image = flagSprite;
     [flagSprite release];
 
-    cell.textLabel.text = [flag stringByDeletingPathExtension];
-    if ([cell.textLabel.text isEqualToString:[self.teamDictionary objectForKey:@"flag"]]) {
+    cell.textLabel.text = [[source objectAtIndex:row] stringByDeletingPathExtension];
+    if ([[flagName stringByDeletingPathExtension] isEqualToString:[self.teamDictionary objectForKey:@"flag"]]) {
         cell.accessoryType = UITableViewCellAccessoryCheckmark;
         self.lastIndexPath = indexPath;
     } else {
@@ -87,16 +112,40 @@
     return cell;
 }
 
+-(NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section {
+    NSString *sectionTitle = nil;
+    switch (section) {
+        case 0:
+            sectionTitle = NSLocalizedString(@"Worldwide", @"");
+            break;
+        case 1:
+            sectionTitle = NSLocalizedString(@"Community", @"");
+            break;
+        default:
+            DLog(@"nope");
+            break;
+    }
+    return sectionTitle;
+}
+
 
 #pragma mark -
 #pragma mark Table view delegate
 -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     int newRow = [indexPath row];
     int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
-
-    if (newRow != oldRow) {
+    int newSection = [indexPath section];
+    int oldSection = (lastIndexPath != nil) ? [lastIndexPath section] : -1;
+    
+    if (newRow != oldRow || newSection != oldSection) {
+        NSString *flag = nil;
+        if ([indexPath section] == 0)
+            flag = [self.flagArray objectAtIndex:newRow];
+        else
+            flag = [NSString stringWithFormat:@"cm_%@",[self.communityArray objectAtIndex:newRow]];
+        
         // if the two selected rows differ update data on the hog dictionary and reload table content
-        [self.teamDictionary setValue:[[flagArray objectAtIndex:newRow] stringByDeletingPathExtension] forKey:@"flag"];
+        [self.teamDictionary setValue:[flag stringByDeletingPathExtension] forKey:@"flag"];
 
         // tell our boss to write this new stuff on disk
         [[NSNotificationCenter defaultCenter] postNotificationName:@"setWriteNeedTeams" object:nil];
@@ -117,14 +166,17 @@
 #pragma mark Memory management
 -(void) didReceiveMemoryWarning {
     // Releases the view if it doesn't have a superview.
+    // Relinquish ownership any cached data, images, etc that aren't in use.
+    self.lastIndexPath = nil;
+    MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
-    // Relinquish ownership any cached data, images, etc that aren't in use.
 }
 
 -(void) viewDidUnload {
     self.teamDictionary = nil;
     self.lastIndexPath = nil;
     self.flagArray = nil;
+    self.communityArray = nil;
     MSG_DIDUNLOAD();
     [super viewDidUnload];
 }
@@ -133,6 +185,7 @@
     [teamDictionary release];
     [lastIndexPath release];
     [flagArray release];
+    [communityArray release];
     [super dealloc];
 }