project_files/HedgewarsMobile/Classes/VoicesViewController.m
author koda
Tue, 23 Aug 2011 03:46:17 +0200
changeset 5662 99083392cd4f
parent 5208 878e551f0b4a
child 6078 8c0cc07731e5
permissions -rw-r--r--
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3829
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
     1
/*
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
     2
 * Hedgewars-iOS, a Hedgewars port for iOS devices
4976
088d40d8aba2 Happy 2011 :)
koda
parents: 3971
diff changeset
     3
 * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
3829
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
     4
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
     8
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    12
 * GNU General Public License for more details.
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    13
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    14
 * You should have received a copy of the GNU General Public License
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    15
 * along with this program; if not, write to the Free Software
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    17
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    18
 * File created on 02/04/2010.
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    19
 */
81db3c85784b headers ftw, also right project file
koda
parents: 3697
diff changeset
    20
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    21
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    22
#import "VoicesViewController.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    23
#import "CommodityFunctions.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    24
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    25
@implementation VoicesViewController
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    26
@synthesize teamDictionary, voiceArray, lastIndexPath;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    27
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    28
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    29
-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    30
    return rotationManager(interfaceOrientation);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    31
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    32
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    33
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    34
#pragma mark View lifecycle
3662
a44406f4369b polish polish polish polish (also: panning horizontal fix, panning momentum, settings page reworked yet again, memory leaks, crashes, segfaults)
koda
parents: 3547
diff changeset
    35
-(void) viewDidLoad {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    36
    [super viewDidLoad];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    37
    srandom(time(NULL));
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    38
3667
9359a70df013 use external libs more consistently
koda
parents: 3662
diff changeset
    39
    voiceBeingPlayed = NULL;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    40
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    41
    // load all the voices names and store them into voiceArray
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    42
    // it's here and not in viewWillAppear because user cannot add/remove them
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    43
    NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:VOICES_DIRECTORY() error:NULL];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    44
    self.voiceArray = array;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
    45
3662
a44406f4369b polish polish polish polish (also: panning horizontal fix, panning momentum, settings page reworked yet again, memory leaks, crashes, segfaults)
koda
parents: 3547
diff changeset
    46
    self.title = NSLocalizedString(@"Set hedgehog voices",@"");
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    47
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    48
3662
a44406f4369b polish polish polish polish (also: panning horizontal fix, panning momentum, settings page reworked yet again, memory leaks, crashes, segfaults)
koda
parents: 3547
diff changeset
    49
-(void) viewWillAppear:(BOOL)animated {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    50
    [super viewWillAppear:animated];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
    51
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    52
    // this moves the tableview to the top
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    53
    [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    54
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    55
3883
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
    56
-(void) viewDidAppear:(BOOL)animated {
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
    57
    [super viewDidAppear:animated];
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
    58
    Mix_OpenAudio(44100, 0x8010, 1, 1024);
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
    59
}
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
    60
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
    61
-(void) viewDidDisappear:(BOOL)animated {
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
    62
    [super viewDidDisappear:animated];
3667
9359a70df013 use external libs more consistently
koda
parents: 3662
diff changeset
    63
    if(voiceBeingPlayed != NULL) {
9359a70df013 use external libs more consistently
koda
parents: 3662
diff changeset
    64
        Mix_HaltChannel(lastChannel);
9359a70df013 use external libs more consistently
koda
parents: 3662
diff changeset
    65
        Mix_FreeChunk(voiceBeingPlayed);
9359a70df013 use external libs more consistently
koda
parents: 3662
diff changeset
    66
        voiceBeingPlayed = NULL;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    67
    }
3883
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
    68
    Mix_CloseAudio();
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    69
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    70
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    71
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    72
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    73
#pragma mark Table view data source
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    74
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    75
    return 1;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    76
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    77
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    78
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    79
    return [self.voiceArray count];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    80
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    81
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    82
// Customize the appearance of table view cells.
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    83
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
    84
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    85
    static NSString *CellIdentifier = @"Cell";
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
    86
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    87
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    88
    if (cell == nil) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    89
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    90
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
    91
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    92
    NSString *voice = [[voiceArray objectAtIndex:[indexPath row]] stringByDeletingPathExtension];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    93
    cell.textLabel.text = voice;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
    94
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    95
    if ([voice isEqualToString:[teamDictionary objectForKey:@"voicepack"]]) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    96
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    97
        self.lastIndexPath = indexPath;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    98
    } else {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    99
        cell.accessoryType = UITableViewCellAccessoryNone;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   100
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   101
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   102
    return cell;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   103
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   104
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   105
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   106
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   107
#pragma mark Table view delegate
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   108
-(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   109
    int newRow = [indexPath row];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   110
    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
   111
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   112
    if (newRow != oldRow) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   113
        [teamDictionary setObject:[voiceArray objectAtIndex:newRow] forKey:@"voicepack"];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
   114
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   115
        // tell our boss to write this new stuff on disk
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   116
        [[NSNotificationCenter defaultCenter] postNotificationName:@"setWriteNeedTeams" object:nil];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   117
        [self.tableView reloadData];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
   118
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   119
        self.lastIndexPath = indexPath;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   120
        [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
   121
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   122
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
   123
3883
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
   124
    // stop any sound before playing another one
3667
9359a70df013 use external libs more consistently
koda
parents: 3662
diff changeset
   125
    if (voiceBeingPlayed != NULL) {
9359a70df013 use external libs more consistently
koda
parents: 3662
diff changeset
   126
        Mix_HaltChannel(lastChannel);
9359a70df013 use external libs more consistently
koda
parents: 3662
diff changeset
   127
        Mix_FreeChunk(voiceBeingPlayed);
9359a70df013 use external libs more consistently
koda
parents: 3662
diff changeset
   128
        voiceBeingPlayed = NULL;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   129
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
   130
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   131
    NSString *voiceDir = [[NSString alloc] initWithFormat:@"%@/%@/",VOICES_DIRECTORY(),[voiceArray objectAtIndex:newRow]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   132
    NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:voiceDir error:NULL];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
   133
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   134
    int index = random() % [array count];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
   135
3667
9359a70df013 use external libs more consistently
koda
parents: 3662
diff changeset
   136
    voiceBeingPlayed = Mix_LoadWAV([[voiceDir stringByAppendingString:[array objectAtIndex:index]] UTF8String]);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   137
    [voiceDir release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3667
diff changeset
   138
    lastChannel = Mix_PlayChannel(-1, voiceBeingPlayed, 0);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   139
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   140
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   141
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   142
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   143
#pragma mark Memory management
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   144
-(void) didReceiveMemoryWarning {
3883
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
   145
    if (voiceBeingPlayed != NULL) {
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
   146
        Mix_HaltChannel(lastChannel);
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
   147
        Mix_FreeChunk(voiceBeingPlayed);
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
   148
        voiceBeingPlayed = NULL;
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
   149
    }
3971
5c82ee165ed5 minor stuff
koda
parents: 3883
diff changeset
   150
    self.lastIndexPath = nil;
3883
5934ddf9ed5d fixed the voice selection where you couldn't hear a preview sound
koda
parents: 3829
diff changeset
   151
    MSG_MEMCLEAN();
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   152
    [super didReceiveMemoryWarning];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   153
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   154
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   155
-(void) viewDidUnload {
3971
5c82ee165ed5 minor stuff
koda
parents: 3883
diff changeset
   156
    if (voiceBeingPlayed != NULL) {
5c82ee165ed5 minor stuff
koda
parents: 3883
diff changeset
   157
        Mix_HaltChannel(lastChannel);
5c82ee165ed5 minor stuff
koda
parents: 3883
diff changeset
   158
        Mix_FreeChunk(voiceBeingPlayed);
5c82ee165ed5 minor stuff
koda
parents: 3883
diff changeset
   159
        voiceBeingPlayed = NULL;
5c82ee165ed5 minor stuff
koda
parents: 3883
diff changeset
   160
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   161
    self.lastIndexPath = nil;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   162
    self.teamDictionary = nil;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   163
    self.voiceArray = nil;
3662
a44406f4369b polish polish polish polish (also: panning horizontal fix, panning momentum, settings page reworked yet again, memory leaks, crashes, segfaults)
koda
parents: 3547
diff changeset
   164
    MSG_DIDUNLOAD();
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   165
    [super viewDidUnload];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   166
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   167
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   168
-(void) dealloc {
5208
878e551f0b4a all together now! releaseAndNil ftw
koda
parents: 4976
diff changeset
   169
    releaseAndNil(voiceArray);
878e551f0b4a all together now! releaseAndNil ftw
koda
parents: 4976
diff changeset
   170
    releaseAndNil(teamDictionary);
878e551f0b4a all together now! releaseAndNil ftw
koda
parents: 4976
diff changeset
   171
    releaseAndNil(lastIndexPath);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   172
    [super dealloc];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   173
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   174
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   175
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   176
@end
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   177