--- a/project_files/HedgewarsMobile/Classes/SingleTeamViewController.m Wed Jun 23 21:39:14 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/SingleTeamViewController.m Wed Jun 23 21:49:19 2010 +0200
@@ -1,453 +0,0 @@
-//
-// SingleTeamViewController.m
-// HedgewarsMobile
-//
-// Created by Vittorio on 02/04/10.
-// Copyright 2010 __MyCompanyName__. All rights reserved.
-//
-
-#import "SingleTeamViewController.h"
-#import "HogHatViewController.h"
-#import "GravesViewController.h"
-#import "VoicesViewController.h"
-#import "FortsViewController.h"
-#import "FlagsViewController.h"
-#import "LevelViewController.h"
-#import "CommodityFunctions.h"
-#import "UIImageExtra.h"
-
-#define TEAMNAME_TAG 1234
-
-@implementation SingleTeamViewController
-@synthesize teamDictionary, normalHogSprite, secondaryItems, textFieldBeingEdited, teamName;
-
-
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
- return rotationManager(interfaceOrientation);
-}
-
-
-#pragma mark -
-#pragma mark textfield methods
--(void) cancel:(id) sender {
- if (textFieldBeingEdited != nil)
- [self.textFieldBeingEdited resignFirstResponder];
-}
-
-// set the new value
--(BOOL) save:(id) sender {
- NSInteger index = textFieldBeingEdited.tag;
-
- if (textFieldBeingEdited != nil) {
- if (TEAMNAME_TAG == index) {
- [self.teamDictionary setObject:textFieldBeingEdited.text forKey:@"teamname"];
- } else {
- //replace the old value with the new one
- NSMutableDictionary *hog = [[teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:index];
- [hog setObject:textFieldBeingEdited.text forKey:@"hogname"];
- }
-
- 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 hog name table")
- style:UIBarButtonItemStylePlain
- target:self
- action:@selector(cancel:)];
- self.navigationItem.leftBarButtonItem = cancelButton;
- [cancelButton release];
-
- UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Save",@"from the hog name table")
- style:UIBarButtonItemStyleDone
- target:self
- action:@selector(save:)];
- self.navigationItem.rightBarButtonItem = saveButton;
- [saveButton release];
-}
-
-// the textfield has been modified, check for empty strings and restore original navigation bar
--(void) textFieldDidEndEditing:(UITextField *)aTextField{
- if ([textFieldBeingEdited.text length] == 0)
- textFieldBeingEdited.text = [NSString stringWithFormat:@"hedgehog %d",textFieldBeingEdited.tag];
-
- 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];
-
- // labels for the entries
- NSArray *array = [[NSArray alloc] initWithObjects:
- NSLocalizedString(@"Grave",@""),
- NSLocalizedString(@"Voice",@""),
- NSLocalizedString(@"Fort",@""),
- NSLocalizedString(@"Flag",@""),
- NSLocalizedString(@"Level",@""),nil];
- self.secondaryItems = array;
- [array release];
-
- // load the base hog image, drawing will occure in cellForRow...
- NSString *normalHogFile = [[NSString alloc] initWithFormat:@"%@/Hedgehog.png",GRAPHICS_DIRECTORY()];
- UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:normalHogFile andCutAt:CGRectMake(96, 0, 32, 32)];
- [normalHogFile release];
- self.normalHogSprite = hogSprite;
- [hogSprite release];
-
- // listen if any childController modifies the plist and write it if needed
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setWriteNeeded) name:@"setWriteNeedTeams" object:nil];
- isWriteNeeded = NO;
-}
-
--(void) viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
-
- // load data about the team and write if there has been a change
- if (isWriteNeeded)
- [self writeFile];
-
- NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@.plist",TEAMS_DIRECTORY(),self.title];
- NSMutableDictionary *teamDict = [[NSMutableDictionary alloc] initWithContentsOfFile:teamFile];
- self.teamDictionary = teamDict;
- [teamDict release];
- [teamFile release];
-
- self.teamName = self.title;
-
- [self.tableView reloadData];
-}
-
-// write on file if there has been a change
--(void) viewWillDisappear:(BOOL)animated {
- [super viewWillDisappear:animated];
-
- // end the editing of the current field
- if (textFieldBeingEdited != nil) {
- [self save:nil];
- }
-
- if (isWriteNeeded)
- [self writeFile];
-}
-
-#pragma mark -
-// needed by other classes to warn about a user change
--(void) setWriteNeeded {
- isWriteNeeded = YES;
-}
-
--(void) writeFile {
- NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@.plist",TEAMS_DIRECTORY(),self.title];
-
- NSString *newTeamName = [self.teamDictionary objectForKey:@"teamname"];
- if (![newTeamName isEqualToString:self.teamName]) {
- //delete old
- [[NSFileManager defaultManager] removeItemAtPath:teamFile error:NULL];
- [teamFile release];
- self.title = newTeamName;
- self.teamName = newTeamName;
- teamFile = [[NSString alloc] initWithFormat:@"%@/%@.plist",TEAMS_DIRECTORY(),newTeamName];
- }
-
- [self.teamDictionary writeToFile:teamFile atomically:YES];
- NSLog(@"writing: %@",teamDictionary);
- isWriteNeeded = NO;
- [teamFile release];
-}
-
-#pragma mark -
-#pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
- return 3;
-}
-
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
- NSInteger rows = 0;
- switch (section) {
- case 0: // team name
- rows = 1;
- break;
- case 1: // team members
- rows = MAX_HOGS;
- break;
- case 2: // team details
- rows = [self.secondaryItems count];
- break;
- default:
- break;
- }
- return rows;
-}
-
--(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString *CellIdentifier0 = @"Cell0";
- static NSString *CellIdentifier1 = @"Cell1";
- static NSString *CellIdentifier2 = @"Cell2";
-
- NSArray *hogArray;
- UITableViewCell *cell = nil;
- NSInteger row = [indexPath row];
- UIImage *accessoryImage;
-
- switch ([indexPath section]) {
- case 0:
- cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier0];
- if (cell == nil) {
- cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
- reuseIdentifier:CellIdentifier0] autorelease];
- // create a uitextfield for each row, expand it to take the maximum size
- UITextField *aTextField = [[UITextField alloc]
- initWithFrame:CGRectMake(5, 12, (cell.frame.size.width + cell.frame.size.width/3) - 42, 25)];
- aTextField.clearsOnBeginEditing = NO;
- 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];
- [cell.contentView addSubview:aTextField];
- [aTextField release];
- }
-
- cell.imageView.image = nil;
- cell.accessoryType = UITableViewCellAccessoryNone;
- for (UIView *oneView in cell.contentView.subviews) {
- if ([oneView isMemberOfClass:[UITextField class]]) {
- // we find the uitextfied and we'll use its tag to understand which one is being edited
- UITextField *textFieldFound = (UITextField *)oneView;
- textFieldFound.text = [self.teamDictionary objectForKey:@"teamname"];
- textFieldFound.tag = TEAMNAME_TAG;
- }
- }
- break;
- case 1:
- cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
- if (cell == nil) {
- cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
- reuseIdentifier:CellIdentifier1] autorelease];
-
- // create a uitextfield for each row, expand it to take the maximum size
- UITextField *aTextField = [[UITextField alloc]
- initWithFrame:CGRectMake(42, 12, (cell.frame.size.width + cell.frame.size.width/3) - 42, 25)];
- aTextField.clearsOnBeginEditing = NO;
- 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];
- [cell.contentView addSubview:aTextField];
- [aTextField release];
- }
-
- hogArray = [self.teamDictionary objectForKey:@"hedgehogs"];
-
- NSString *hatFile = [[NSString alloc] initWithFormat:@"%@/%@.png", HATS_DIRECTORY(), [[hogArray objectAtIndex:row] objectForKey:@"hat"]];
- UIImage *hatSprite = [[UIImage alloc] initWithContentsOfFile: hatFile andCutAt:CGRectMake(0, 0, 32, 32)];
- [hatFile release];
- cell.imageView.image = [self.normalHogSprite mergeWith:hatSprite atPoint:CGPointMake(0, -5)];
- [hatSprite release];
-
- for (UIView *oneView in cell.contentView.subviews) {
- if ([oneView isMemberOfClass:[UITextField class]]) {
- // 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"];
- }
- }
-
- cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
- break;
- case 2:
- cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
- if (cell == nil) {
- cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
- reuseIdentifier:CellIdentifier2] autorelease];
- }
-
- cell.textLabel.text = [self.secondaryItems objectAtIndex:row];
- cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
- switch (row) {
- case 0: // grave
- accessoryImage = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.png",
- GRAVES_DIRECTORY(),[teamDictionary objectForKey:@"grave"]]
- andCutAt:CGRectMake(0,0,32,32)];
- cell.imageView.image = accessoryImage;
- [accessoryImage release];
- break;
- case 2: // fort
- accessoryImage = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%@L.png",
- FORTS_DIRECTORY(),[teamDictionary objectForKey:@"fort"]]];
- cell.imageView.image = [accessoryImage scaleToSize:CGSizeMake(42, 42)];
- [accessoryImage release];
- break;
-
- case 3: // flags
- accessoryImage = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.png",
- FLAGS_DIRECTORY(),[teamDictionary objectForKey:@"flag"]]];
- cell.imageView.image = accessoryImage;
- [accessoryImage release];
- break;
- case 4: // level
- accessoryImage = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%d.png",
- BOTLEVELS_DIRECTORY(),[[[[teamDictionary objectForKey:@"hedgehogs"]
- objectAtIndex:0] objectForKey:@"level"]
- intValue]]];
- cell.imageView.image = accessoryImage;
- [accessoryImage release];
- break;
- default:
- cell.imageView.image = nil;
- break;
- }
- break;
- }
-
- return cell;
-}
-
-
-#pragma mark -
-#pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- NSInteger row = [indexPath row];
- NSInteger section = [indexPath section];
- UITableViewController *nextController = nil;
- UITableViewCell *cell;
-
- if (2 == section) {
- switch (row) {
- case 0: // grave
- if (nil == gravesViewController)
- gravesViewController = [[GravesViewController alloc] initWithStyle:UITableViewStyleGrouped];
-
- nextController = gravesViewController;
- break;
- case 1: // voice
- if (nil == voicesViewController)
- voicesViewController = [[VoicesViewController alloc] initWithStyle:UITableViewStyleGrouped];
-
- nextController = voicesViewController;
- break;
- case 2: // fort
- if (nil == fortsViewController)
- fortsViewController = [[FortsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-
- nextController = fortsViewController;
- break;
- case 3: // flag
- if (nil == flagsViewController)
- flagsViewController = [[FlagsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-
- nextController = flagsViewController;
- break;
- case 4: // level
- if (nil == levelViewController)
- levelViewController = [[LevelViewController alloc] initWithStyle:UITableViewStyleGrouped];
-
- nextController = levelViewController;
- break;
- }
-
- nextController.title = [secondaryItems objectAtIndex:row];
- [nextController setTeamDictionary:teamDictionary];
- [self.navigationController pushViewController:nextController animated:YES];
- } else {
- 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];
- }
-
-}
-
-// action to perform when you want to change a hog hat
--(void) tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
- if (nil == hogHatViewController) {
- hogHatViewController = [[HogHatViewController alloc] initWithStyle:UITableViewStyleGrouped];
- }
-
- // cache the dictionary file of the team, so that other controllers can modify it
- hogHatViewController.teamDictionary = self.teamDictionary;
- hogHatViewController.selectedHog = [indexPath row];
-
- [self.navigationController pushViewController:hogHatViewController animated:YES];
-}
-
-
-#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.
- if (hogHatViewController.view.superview == nil)
- hogHatViewController = nil;
- if (gravesViewController.view.superview == nil)
- gravesViewController = nil;
- if (voicesViewController.view.superview == nil)
- voicesViewController = nil;
- if (fortsViewController.view.superview == nil)
- fortsViewController = nil;
- if (flagsViewController.view.superview == nil)
- flagsViewController = nil;
- if (levelViewController.view.superview == nil)
- levelViewController = nil;
-}
-
--(void) viewDidUnload {
- self.teamDictionary = nil;
- self.textFieldBeingEdited = nil;
- self.teamName = nil;
- self.normalHogSprite = nil;
- self.secondaryItems = nil;
- hogHatViewController = nil;
- flagsViewController = nil;
- fortsViewController = nil;
- gravesViewController = nil;
- levelViewController = nil;
- [super viewDidUnload];
- MSG_DIDUNLOAD();
-}
-
--(void) dealloc {
- [teamDictionary release];
- [textFieldBeingEdited release];
- [teamName release];
- [normalHogSprite release];
- [secondaryItems release];
- [hogHatViewController release];
- [fortsViewController release];
- [gravesViewController release];
- [flagsViewController release];
- [levelViewController release];
- [super dealloc];
-}
-
-
-@end
-