diff --git a/contrib/mobile/iOS/Onelab/EAGLView.mm b/contrib/mobile/iOS/Onelab/EAGLView.mm index 6f0fcc8e7f3c4f6efec553c91f1a09a68075cf67..0155e55d4dd2ba7367d7df5be6bc50c4d9675b97 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 a1af92967c993e833b9a43589a9172f29e3c3bfd..8f4b300153a5527786b4f2a55017d9f19b933220 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 7b8e36e643a4310130f776e3c343f79f25702f00..2f9ac9b65282a8deff9dd7877399e3d75d5d30a3 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 927f2a67531fd5c81c0f6d41dd9f3e3881a5f1a5..af065d8885bf6f54293205c4eb531ea1235086b0 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 307f60450cc49420aa3bfaa89accdc2631836fbf..e43b32537fc151305bfdcc2b1cdc0ee8e517bfcb 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 d3ca0b1ffca3e5d835177b710e8aeddb0ce14815..7fd3dadb5c4f9b7750eddffee2cebb9354756cb9 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 93c32e6924378761c08b1c47a2472a57a30cbdf8..913933205f2a319c2bd646755e44eec6e9a1bb2f 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 f92c83c6933edf0d814f7024744c3f2e461b45c5..8a6f70b04f37a93984e598180684ee32e466e2c1 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"/>