# HG changeset patch # User antonc27 # Date 1456092732 -3600 # Node ID 664d3592a66b9e17c865b5782175569b2643e787 # Parent 2b9e189df3d6b07a26467711cc8f8d6f3c5afe5f - Campaign for iOS: Simply retrieve list of campaigns diff -r 2b9e189df3d6 -r 664d3592a66b project_files/HedgewarsMobile/Classes/CampaignsViewController.m --- a/project_files/HedgewarsMobile/Classes/CampaignsViewController.m Sun Feb 21 22:21:59 2016 +0100 +++ b/project_files/HedgewarsMobile/Classes/CampaignsViewController.m Sun Feb 21 23:12:12 2016 +0100 @@ -19,17 +19,48 @@ #import "CampaignsViewController.h" @interface CampaignsViewController () - +@property (nonatomic, retain) NSArray *campaigns; @end @implementation CampaignsViewController +#pragma mark - Lazy instantiation + +- (NSArray *)campaigns { + if (!_campaigns) { + _campaigns = [self listOfCampaigns]; + } + return _campaigns; +} + +- (NSArray *)listOfCampaigns { + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSArray *contents = [fileManager contentsOfDirectoryAtPath:CAMPAIGNS_DIRECTORY() error:nil]; + + NSMutableArray *tempCampaigns = [[NSMutableArray alloc] init]; + for (NSString *item in contents) { + NSString *fullItemPath = [CAMPAIGNS_DIRECTORY() stringByAppendingString:item]; + BOOL isDirectory; + if ([fileManager fileExistsAtPath:fullItemPath isDirectory:&isDirectory] && isDirectory) { + [tempCampaigns addObject:item]; + } + } + + NSArray *campaigns = [tempCampaigns copy]; + [tempCampaigns release]; + return campaigns; +} + +#pragma mark - View lifecycle + - (void)viewDidLoad { [super viewDidLoad]; UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismiss)]; self.navigationItem.leftBarButtonItem = doneButton; [doneButton release]; + + [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"campaignCell"]; } - (void)dismiss { @@ -44,58 +75,20 @@ #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { -#warning Incomplete implementation, return the number of sections - return 0; + return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { -#warning Incomplete implementation, return the number of rows - return 0; + return [self.campaigns count]; } -/* - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath]; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"campaignCell" forIndexPath:indexPath]; - // Configure the cell... + cell.textLabel.text = self.campaigns[indexPath.row]; return cell; } -*/ - -/* -// Override to support conditional editing of the table view. -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { - // Return NO if you do not want the specified item to be editable. - return YES; -} -*/ - -/* -// Override to support editing the table view. -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { - if (editingStyle == UITableViewCellEditingStyleDelete) { - // Delete the row from the data source - [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; - } else if (editingStyle == UITableViewCellEditingStyleInsert) { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } -} -*/ - -/* -// Override to support rearranging the table view. -- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { -} -*/ - -/* -// Override to support conditional rearranging of the table view. -- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { - // Return NO if you do not want the item to be re-orderable. - return YES; -} -*/ /* #pragma mark - Table view delegate @@ -113,14 +106,11 @@ } */ -/* -#pragma mark - Navigation +#pragma mark - Dealloc -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. +- (void)dealloc { + [_campaigns release]; + [super dealloc]; } -*/ @end diff -r 2b9e189df3d6 -r 664d3592a66b project_files/HedgewarsMobile/Classes/DefinesAndMacros.h --- a/project_files/HedgewarsMobile/Classes/DefinesAndMacros.h Sun Feb 21 22:21:59 2016 +0100 +++ b/project_files/HedgewarsMobile/Classes/DefinesAndMacros.h Sun Feb 21 23:12:12 2016 +0100 @@ -66,6 +66,7 @@ #define MAPS_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Maps/"] #define MISSIONS_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Missions/Maps/"] #define TRAININGS_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Missions/Training/"] +#define CAMPAIGNS_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Missions/Campaign/"] #define LOCALE_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Locale/"] #define SCRIPTS_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Scripts/Multiplayer/"]