From 4745b9421154feedbc77c0187354bbedd56e3ba1 Mon Sep 17 00:00:00 2001 From: Maxime Graulich <maxime.graulich@gmail.com> Date: Tue, 3 Sep 2013 07:57:31 +0000 Subject: [PATCH] iOS: same way as Android to read model's informations + add icon in model list --- contrib/mobile/iOS/Onelab/EAGLView.mm | 1 + .../mobile/iOS/Onelab/ModelListController.h | 3 +- .../mobile/iOS/Onelab/ModelListController.mm | 52 ++++++++++++------- .../mobile/iOS/Onelab/ModelViewController.mm | 6 +-- .../Onelab/PostProcessingViewController.mm | 4 ++ .../mobile/iOS/Onelab/SplitViewController.mm | 3 +- .../Onelab/en.lproj/iPadStoryboard.storyboard | 36 ++++++++++++- .../en.lproj/iPhoneiPodStoryboard.storyboard | 4 +- 8 files changed, 80 insertions(+), 29 deletions(-) diff --git a/contrib/mobile/iOS/Onelab/EAGLView.mm b/contrib/mobile/iOS/Onelab/EAGLView.mm index 6f0fcc8e7f..0155e55d4d 100644 --- a/contrib/mobile/iOS/Onelab/EAGLView.mm +++ b/contrib/mobile/iOS/Onelab/EAGLView.mm @@ -94,6 +94,7 @@ - (void)layoutSubviews { + [super layoutSubviews]; [EAGLContext setCurrentContext:context]; [self destroyFramebuffer]; [self createFramebuffer]; diff --git a/contrib/mobile/iOS/Onelab/ModelListController.h b/contrib/mobile/iOS/Onelab/ModelListController.h index a1af92967c..8f4b300153 100644 --- a/contrib/mobile/iOS/Onelab/ModelListController.h +++ b/contrib/mobile/iOS/Onelab/ModelListController.h @@ -13,9 +13,10 @@ @interface ModelListController : UITableViewController <NSXMLParserDelegate> { @private - NSMutableArray *models, *modelsName, *modelsDescription; + NSMutableArray *models; NSString *currentElement; NSMutableString *currentElementValue; + NSString *currentDir; NSString *selectedModel; } @property (nonatomic, retain) EAGLView *glView; diff --git a/contrib/mobile/iOS/Onelab/ModelListController.mm b/contrib/mobile/iOS/Onelab/ModelListController.mm index 7b8e36e643..2f9ac9b652 100644 --- a/contrib/mobile/iOS/Onelab/ModelListController.mm +++ b/contrib/mobile/iOS/Onelab/ModelListController.mm @@ -10,13 +10,12 @@ #import "ModelListController.h" #import "Utils.h" +#import "Model.h" @implementation ModelListController -(void)viewDidLoad { models = [[NSMutableArray alloc] init]; - modelsName = [[NSMutableArray alloc] init]; - modelsDescription = [[NSMutableArray alloc] init]; NSString *docsPath = [Utils getApplicationDocumentsDirectory]; [Utils copyRes]; @@ -25,16 +24,10 @@ NSString *docPath = [NSString stringWithFormat:@"%@/%@/", docsPath, doc]; BOOL isDir = NO; [[NSFileManager defaultManager] fileExistsAtPath:docPath isDirectory:&isDir]; if(isDir){ - [models addObject:doc]; NSString *infos = [NSString stringWithFormat:@"%@%@", docPath, @"infos.xml"]; if([[NSFileManager defaultManager] fileExistsAtPath:infos]) { + currentDir = docPath; [self parseInfosFile:infos]; - if(models.count > modelsName.count)[modelsName addObject:@""]; - if(models.count > modelsDescription.count)[modelsDescription addObject:@""]; - } - else { - [modelsName addObject:@""]; - [modelsDescription addObject:@""]; } } } @@ -54,13 +47,13 @@ UITableViewCell *cell; if(indexPath.row >= [models count]) return cell; - NSString *modelName = [models objectAtIndex:indexPath.row]; - cell = [tableView dequeueReusableCellWithIdentifier:modelName]; + Model *m = [models objectAtIndex:indexPath.row]; + cell = [tableView dequeueReusableCellWithIdentifier:[m getName]]; if(cell != nil) return cell; - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:modelName]; - [cell.textLabel setText:(![[modelsName objectAtIndex:indexPath.row] isEqual:@""])? [modelsName objectAtIndex:indexPath.row] : [models objectAtIndex:indexPath.row]]; - if(![[modelsDescription objectAtIndex:indexPath.row] isEqual:@""]) - [cell.detailTextLabel setText:[modelsDescription objectAtIndex:indexPath.row]]; + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:[m getName]]; + [cell.textLabel setText:[m getName]]; + if([m getSummary] != nil) [cell.detailTextLabel setText:[m getSummary]]; + if([m getPreview] != nil) cell.imageView.image = [m getPreview]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell; } @@ -71,7 +64,7 @@ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; - selectedModel = [NSString stringWithFormat:@"%@/%@/%@.geo",[Utils getApplicationDocumentsDirectory],[models objectAtIndex:indexPath.row], [models objectAtIndex:indexPath.row]]; + selectedModel = [[models objectAtIndex:indexPath.row] getFile]; if([[UIDevice currentDevice].model isEqualToString:@"iPad"] || [[UIDevice currentDevice].model isEqualToString:@"iPad Simulator"]){ appDelegate.splitViewController.initialModel = selectedModel; [UIView transitionWithView:appDelegate.window @@ -113,11 +106,34 @@ } -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { - if([elementName isEqual:@"name"] && models.count > modelsName.count) [modelsName addObject:currentElementValue]; - else if([elementName isEqual:@"description"] && models.count > modelsDescription.count) [modelsDescription addObject:currentElementValue]; + if([elementName isEqual:@"title"]) { + Model *m = [[Model alloc] initWithName:currentElementValue]; + [models addObject:m]; + } + else { + if(models.count < 1) return; + if([elementName isEqual:@"summary"]) { + Model *m = [models lastObject]; + [m setSummary:currentElementValue]; + } + else if([elementName isEqual:@"file"]) { + Model *m = [models lastObject]; + [m setFile:[NSString stringWithFormat:@"%@%@", currentDir, currentElementValue]]; + } + else if([elementName isEqual:@"url"]) { + Model *m = [models lastObject]; + [m setUrl:currentElementValue]; + } + else if([elementName isEqual:@"preview"]) { + Model *m = [models lastObject]; + [m setPreview:[NSString stringWithFormat:@"%@%@", currentDir, currentElementValue]]; + } + + } //[currentElementValue release]; currentElementValue = nil; } + -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showModelSegue"]) diff --git a/contrib/mobile/iOS/Onelab/ModelViewController.mm b/contrib/mobile/iOS/Onelab/ModelViewController.mm index 927f2a6753..af065d8885 100644 --- a/contrib/mobile/iOS/Onelab/ModelViewController.mm +++ b/contrib/mobile/iOS/Onelab/ModelViewController.mm @@ -43,13 +43,9 @@ } } --(void)viewWillAppear:(BOOL)animated -{ - _runStopButton.frame = CGRectMake(self.view.frame.size.width - _runStopButton.frame.size.width - 7, 50, _runStopButton.frame.size.width, _runStopButton.frame.size.height ); -} - -(void)viewDidAppear:(BOOL)animated { + _runStopButton.frame = CGRectMake(self.view.frame.size.width - _runStopButton.frame.size.width - 7, 50, _runStopButton.frame.size.width, _runStopButton.frame.size.height ); if(self.initialModel != nil){ UIAlertView* progressAlert = [[UIAlertView alloc] initWithTitle:@"Please wait..." message: @"The model is loading" delegate: self cancelButtonTitle: nil otherButtonTitles: nil]; [progressAlert show]; diff --git a/contrib/mobile/iOS/Onelab/PostProcessingViewController.mm b/contrib/mobile/iOS/Onelab/PostProcessingViewController.mm index 307f60450c..e43b32537f 100644 --- a/contrib/mobile/iOS/Onelab/PostProcessingViewController.mm +++ b/contrib/mobile/iOS/Onelab/PostProcessingViewController.mm @@ -104,6 +104,10 @@ [self setIntervalsType:nil]; [self setIntervals:nil]; [self setRaiseZ:nil]; + [self setRaiseZ:nil]; + [self setIntervals:nil]; + [self setIntervalsType:nil]; + [self setName:nil]; [super viewDidUnload]; } @end diff --git a/contrib/mobile/iOS/Onelab/SplitViewController.mm b/contrib/mobile/iOS/Onelab/SplitViewController.mm index d3ca0b1ffc..7fd3dadb5c 100644 --- a/contrib/mobile/iOS/Onelab/SplitViewController.mm +++ b/contrib/mobile/iOS/Onelab/SplitViewController.mm @@ -45,7 +45,8 @@ -(void)viewDidAppear:(BOOL)animated { - if(self.initialModel != nil) [modelViewController.glView load:self.initialModel]; + modelViewController.initialModel = self.initialModel; + [super viewDidAppear:animated]; } - (void)didReceiveMemoryWarning diff --git a/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard b/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard index 93c32e6924..913933205f 100644 --- a/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard +++ b/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard @@ -107,7 +107,7 @@ </tableViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="3Aw-Tm-Dq6" userLabel="First Responder" sceneMemberID="firstResponder"/> </objects> - <point key="canvasLocation" x="1280" y="-800"/> + <point key="canvasLocation" x="1277" y="-806"/> </scene> <!--Post Processing View Controller--> <scene sceneID="inJ-Ob-bP0"> @@ -166,7 +166,7 @@ </viewController> <placeholder placeholderIdentifier="IBFirstResponder" id="URb-SK-Z2A" userLabel="First Responder" sceneMemberID="firstResponder"/> </objects> - <point key="canvasLocation" x="1759" y="-811"/> + <point key="canvasLocation" x="1754" y="-806"/> </scene> <!--Split View Controller--> <scene sceneID="18"> @@ -293,6 +293,38 @@ <point key="canvasLocation" x="336" y="340"/> </scene> </scenes> + <classes> + <class className="EAGLView" superclassName="UIView"> + <source key="sourceIdentifier" type="project" relativePath="./Classes/EAGLView.h"/> + </class> + <class className="ModelListController" superclassName="UITableViewController"> + <source key="sourceIdentifier" type="project" relativePath="./Classes/ModelListController.h"/> + </class> + <class className="ModelViewController" superclassName="UIViewController"> + <source key="sourceIdentifier" type="project" relativePath="./Classes/ModelViewController.h"/> + <relationships> + <relationship kind="action" name="pinch:" candidateClass="UIPinchGestureRecognizer"/> + <relationship kind="action" name="tap:" candidateClass="UITapGestureRecognizer"/> + <relationship kind="outlet" name="detailDescriptionLabel" candidateClass="UILabel"/> + <relationship kind="outlet" name="runStopButton" candidateClass="UIButton"/> + </relationships> + </class> + <class className="ParametersViewController" superclassName="UITableViewController"> + <source key="sourceIdentifier" type="project" relativePath="./Classes/ParametersViewController.h"/> + </class> + <class className="PostProcessingViewController" superclassName="UIViewController"> + <source key="sourceIdentifier" type="project" relativePath="./Classes/PostProcessingViewController.h"/> + <relationships> + <relationship kind="outlet" name="Intervals" candidateClass="UITextField"/> + <relationship kind="outlet" name="IntervalsType" candidateClass="UIPickerView"/> + <relationship kind="outlet" name="Name" candidateClass="UILabel"/> + <relationship kind="outlet" name="RaiseZ" candidateClass="UISlider"/> + </relationships> + </class> + <class className="SplitViewController" superclassName="UISplitViewController"> + <source key="sourceIdentifier" type="project" relativePath="./Classes/SplitViewController.h"/> + </class> + </classes> <simulatedMetricsContainer key="defaultSimulatedMetrics"> <simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackTranslucent"/> <simulatedOrientationMetrics key="orientation"/> diff --git a/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard b/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard index f92c83c693..8a6f70b04f 100644 --- a/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard +++ b/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard @@ -220,6 +220,7 @@ <constraint firstItem="z3z-Xo-nQF" firstAttribute="leading" secondItem="Lh8-gQ-vBl" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="435-s8-4Es"/> <constraint firstItem="BC5-E7-rEF" firstAttribute="leading" secondItem="Bfu-t9-dAj" secondAttribute="trailing" constant="8" symbolic="YES" type="default" id="6vr-r4-RiJ"/> <constraint firstItem="xW0-cN-kxL" firstAttribute="centerX" secondItem="z3z-Xo-nQF" secondAttribute="centerX" type="default" id="7xR-YV-WCT"/> + <constraint firstAttribute="trailing" secondItem="z3z-Xo-nQF" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="DFn-CU-BmX"/> <constraint firstItem="BC5-E7-rEF" firstAttribute="top" secondItem="Bfu-t9-dAj" secondAttribute="top" type="default" id="LeJ-T9-cOP"/> <constraint firstItem="xW0-cN-kxL" firstAttribute="top" secondItem="z3z-Xo-nQF" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="SBU-ke-wyb"/> <constraint firstItem="BC5-E7-rEF" firstAttribute="leading" secondItem="rgB-dz-6XG" secondAttribute="leading" type="default" id="SEG-ir-r8Z"/> @@ -228,8 +229,7 @@ <constraint firstItem="elK-Av-NO2" firstAttribute="baseline" secondItem="rgB-dz-6XG" secondAttribute="baseline" type="default" id="Ves-uS-Wgp"/> <constraint firstItem="Bfu-t9-dAj" firstAttribute="leading" secondItem="Lh8-gQ-vBl" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="ao2-ou-LYp"/> <constraint firstItem="elK-Av-NO2" firstAttribute="leading" secondItem="Lh8-gQ-vBl" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="dHF-Hd-Edk"/> - <constraint firstItem="z3z-Xo-nQF" firstAttribute="top" secondItem="Lh8-gQ-vBl" secondAttribute="top" constant="20" symbolic="YES" type="default" id="dhL-em-cgJ"/> - <constraint firstItem="rgB-dz-6XG" firstAttribute="trailing" secondItem="z3z-Xo-nQF" secondAttribute="trailing" type="default" id="iWx-Qa-Nds"/> + <constraint firstItem="z3z-Xo-nQF" firstAttribute="top" secondItem="Lh8-gQ-vBl" secondAttribute="top" constant="53" id="e9a-2b-RgF"/> <constraint firstItem="Bfu-t9-dAj" firstAttribute="top" secondItem="elK-Av-NO2" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="pa9-yz-1vW"/> <constraint firstItem="rgB-dz-6XG" firstAttribute="top" secondItem="xW0-cN-kxL" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="xgH-ey-y52"/> <constraint firstAttribute="trailing" secondItem="BC5-E7-rEF" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="zuO-wq-2vN"/> -- GitLab