# HG changeset patch # User antonc27 # Date 1456266546 -3600 # Node ID fba0c7a5aaf4b2cd84c4b98c9ead9da41ba34d8d # Parent 294ce0fa65d0f41f76fd27e4ecab1126a28d5ec2 - Campaign for iOS: Fill campaign page with parsed missions from campaign.ini diff -r 294ce0fa65d0 -r fba0c7a5aaf4 project_files/HedgewarsMobile/Classes/CampaignViewController.m --- a/project_files/HedgewarsMobile/Classes/CampaignViewController.m Tue Feb 23 13:45:49 2016 +0300 +++ b/project_files/HedgewarsMobile/Classes/CampaignViewController.m Tue Feb 23 23:29:06 2016 +0100 @@ -17,13 +17,35 @@ */ #import "CampaignViewController.h" +#import "IniParser.h" @interface CampaignViewController () - +@property (nonatomic, retain) NSArray *campaignMissions; @end @implementation CampaignViewController +#pragma mark - Lazy instantiation + +- (NSArray *)campaignMissions { + if (!_campaignMissions) { + _campaignMissions = [self newParsedMissionsForCurrentCampaign]; + } + return _campaignMissions; +} + +- (NSArray *)newParsedMissionsForCurrentCampaign { + NSString *campaignIniPath = [CAMPAIGNS_DIRECTORY() stringByAppendingFormat:@"%@/campaign.ini", self.campaignName]; + + IniParser *iniParser = [[IniParser alloc] initWithIniFilePath:campaignIniPath]; + NSArray *parsedMissions = [iniParser newParsedSections]; + [iniParser release]; + + return parsedMissions; +} + +#pragma mark - View lifecycle + - (void)viewDidLoad { [super viewDidLoad]; @@ -31,8 +53,7 @@ self.navigationItem.rightBarButtonItem = doneButton; [doneButton release]; - NSString *campaignIniPath = [CAMPAIGNS_DIRECTORY() stringByAppendingFormat:@"%@/campaign.ini", self.campaignName]; - NSLog(@"%@", campaignIniPath); + [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"campaignMissionCell"]; } - (void)dismiss { @@ -47,58 +68,21 @@ #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.campaignMissions count]; } -/* - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath]; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"campaignMissionCell" forIndexPath:indexPath]; // Configure the cell... + cell.textLabel.text = self.campaignMissions[indexPath.row][@"Name"]; 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 @@ -116,18 +100,11 @@ } */ -/* -#pragma mark - Navigation - -// 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. -} -*/ +#pragma mark - Dealloc - (void)dealloc { [_campaignName release]; + [_campaignMissions release]; [super dealloc]; } diff -r 294ce0fa65d0 -r fba0c7a5aaf4 project_files/HedgewarsMobile/Classes/CampaignsViewController.m --- a/project_files/HedgewarsMobile/Classes/CampaignsViewController.m Tue Feb 23 13:45:49 2016 +0300 +++ b/project_files/HedgewarsMobile/Classes/CampaignsViewController.m Tue Feb 23 23:29:06 2016 +0100 @@ -29,12 +29,12 @@ - (NSArray *)campaigns { if (!_campaigns) { - _campaigns = [self listOfCampaigns]; + _campaigns = [self newListOfCampaigns]; } return _campaigns; } -- (NSArray *)listOfCampaigns { +- (NSArray *)newListOfCampaigns { NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *contents = [fileManager contentsOfDirectoryAtPath:CAMPAIGNS_DIRECTORY() error:nil];