From 26bfb08dfd6377346ad5d5ca4d3c117b36a6a9ce Mon Sep 17 00:00:00 2001
From: Maxime Graulich <maxime.graulich@gmail.com>
Date: Fri, 21 Mar 2014 12:03:06 +0000
Subject: [PATCH] iOS: add "about" page and edit rotate/translate

---
 .../iOS/Onelab.xcodeproj/project.pbxproj      |  14 ++++++
 contrib/mobile/iOS/Onelab/EAGLView.mm         |  21 +++------
 .../mobile/iOS/Onelab/ModelListController.mm  |   8 ++++
 .../mobile/iOS/Onelab/ModelViewController.h   |   2 +
 .../mobile/iOS/Onelab/ModelViewController.mm  |  12 ++++--
 contrib/mobile/iOS/Onelab/Onelab-Info.plist   |  17 --------
 .../Onelab/en.lproj/iPadStoryboard.storyboard |  21 +++++++--
 .../en.lproj/iPhoneiPodStoryboard.storyboard  |  40 +++++++++++++-----
 contrib/mobile/iOS/Onelab/icon_rotate.png     | Bin 0 -> 18386 bytes
 contrib/mobile/iOS/Onelab/icon_translate.png  | Bin 0 -> 7754 bytes
 10 files changed, 85 insertions(+), 50 deletions(-)
 create mode 100644 contrib/mobile/iOS/Onelab/icon_rotate.png
 create mode 100644 contrib/mobile/iOS/Onelab/icon_translate.png

diff --git a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
index cd1a4684fa..9947de4cde 100644
--- a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
+++ b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
@@ -27,6 +27,9 @@
 		9C96089D1712C7F600E1D4A0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C96089C1712C7F600E1D4A0 /* QuartzCore.framework */; };
 		9C96089F1712C8EB00E1D4A0 /* emulatorFix.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C96089E1712C8EB00E1D4A0 /* emulatorFix.c */; };
 		9C9608AC1712EF0900E1D4A0 /* iPadStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9C9608AA1712EF0900E1D4A0 /* iPadStoryboard.storyboard */; };
+		9CB1CD9818DB2D8700110882 /* icon_rotate.png in Resources */ = {isa = PBXBuildFile; fileRef = 9CB1CD9618DB2D8700110882 /* icon_rotate.png */; };
+		9CB1CD9B18DC36AC00110882 /* AboutViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9CB1CD9A18DC36AC00110882 /* AboutViewController.mm */; };
+		9CB1CD9D18DC57DE00110882 /* icon_translate.png in Resources */ = {isa = PBXBuildFile; fileRef = 9CB1CD9C18DC57DE00110882 /* icon_translate.png */; };
 		9CC6EBB717BA0A38001CA21A /* drawGeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9CC6EBB617BA0A38001CA21A /* drawGeom.cpp */; };
 		9CC6EBB917BA1CC7001CA21A /* drawMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9CC6EBB817BA1CC7001CA21A /* drawMesh.cpp */; };
 		9CC85C021790286C00F241C4 /* files in Resources */ = {isa = PBXBuildFile; fileRef = 9CC85C011790286C00F241C4 /* files */; };
@@ -76,6 +79,10 @@
 		9C96089E1712C8EB00E1D4A0 /* emulatorFix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = emulatorFix.c; sourceTree = "<group>"; usesTabs = 1; };
 		9C9608AB1712EF0900E1D4A0 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/iPadStoryboard.storyboard; sourceTree = "<group>"; };
 		9C99754C17390DEE0036EC24 /* iosGModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iosGModel.h; sourceTree = "<group>"; usesTabs = 1; };
+		9CB1CD9618DB2D8700110882 /* icon_rotate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_rotate.png; sourceTree = "<group>"; };
+		9CB1CD9918DC36AC00110882 /* AboutViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutViewController.h; sourceTree = "<group>"; };
+		9CB1CD9A18DC36AC00110882 /* AboutViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AboutViewController.mm; sourceTree = "<group>"; };
+		9CB1CD9C18DC57DE00110882 /* icon_translate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_translate.png; sourceTree = "<group>"; };
 		9CC6EBB617BA0A38001CA21A /* drawGeom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drawGeom.cpp; sourceTree = "<group>"; usesTabs = 1; };
 		9CC6EBB817BA1CC7001CA21A /* drawMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drawMesh.cpp; sourceTree = "<group>"; };
 		9CC85C011790286C00F241C4 /* files */ = {isa = PBXFileReference; lastKnownFileType = folder; path = files; sourceTree = "<group>"; };
@@ -132,6 +139,8 @@
 		9C928621180D216500AAABD4 /* icons */ = {
 			isa = PBXGroup;
 			children = (
+				9CB1CD9C18DC57DE00110882 /* icon_translate.png */,
+				9CB1CD9618DB2D8700110882 /* icon_rotate.png */,
 				9C928624180D217A00AAABD4 /* icon_app_ipad_retina.png */,
 				9C928625180D217A00AAABD4 /* icon_app_ipad.png */,
 				9C928628180D217B00AAABD4 /* icon_app_iphone_retina.png */,
@@ -204,6 +213,8 @@
 				9CE18C1F17B27EDB009BA06E /* Parameter.mm */,
 				9CEAECC517A91CD20014D229 /* ModelListController.h */,
 				9CEAECC617A91CD20014D229 /* ModelListController.mm */,
+				9CB1CD9918DC36AC00110882 /* AboutViewController.h */,
+				9CB1CD9A18DC36AC00110882 /* AboutViewController.mm */,
 				9CEAE87B17AFD5BB00813524 /* SplitViewController.h */,
 				9CEAE87C17AFD5BB00813524 /* SplitViewController.mm */,
 				9C96084F1712C16400E1D4A0 /* ParametersViewController.h */,
@@ -289,7 +300,9 @@
 			buildActionMask = 2147483647;
 			files = (
 				9C9608AC1712EF0900E1D4A0 /* iPadStoryboard.storyboard in Resources */,
+				9CB1CD9818DB2D8700110882 /* icon_rotate.png in Resources */,
 				9CC85C021790286C00F241C4 /* files in Resources */,
+				9CB1CD9D18DC57DE00110882 /* icon_translate.png in Resources */,
 				9C92862F180D217B00AAABD4 /* icon_app_iphone_retina.png in Resources */,
 				9C92862C180D217B00AAABD4 /* icon_app_ipad.png in Resources */,
 				9CE1A65A17B0FB9700E5152F /* iPhoneiPodStoryboard.storyboard in Resources */,
@@ -310,6 +323,7 @@
 				9C9608511712C16400E1D4A0 /* ParametersViewController.mm in Sources */,
 				9C9608541712C16400E1D4A0 /* ModelViewController.mm in Sources */,
 				9C9608741712C47200E1D4A0 /* EAGLView.mm in Sources */,
+				9CB1CD9B18DC36AC00110882 /* AboutViewController.mm in Sources */,
 				9C96089F1712C8EB00E1D4A0 /* emulatorFix.c in Sources */,
 				9C95B7F61726C88E00C0CCE2 /* main.mm in Sources */,
 				9C6A645817A7C3DB00DEDAFC /* drawString.cpp in Sources */,
diff --git a/contrib/mobile/iOS/Onelab/EAGLView.mm b/contrib/mobile/iOS/Onelab/EAGLView.mm
index 14a0ee9d12..606e788472 100644
--- a/contrib/mobile/iOS/Onelab/EAGLView.mm
+++ b/contrib/mobile/iOS/Onelab/EAGLView.mm
@@ -85,22 +85,11 @@
     NSUInteger ntouch = [[event allTouches] count];
     UITouch* touch = [touches anyObject];
     CGPoint position = [touch locationInView:self];
-    switch(ntouch)
-    {
-        case 1:
-        {
-            mContext->eventHandler(1,position.x,position.y);
-        }
-            break;
-        case 3:
-        {
-			rotate = true;
-            mContext->eventHandler(3,position.x,position.y);
-        }
-            break;
-        default:
-            return ;
-    }
+	if(ntouch != 1) return;
+	if(rotate)
+		mContext->eventHandler(3,position.x,position.y);
+	else
+		mContext->eventHandler(1,position.x,position.y);
     
     [self drawView];
 }
diff --git a/contrib/mobile/iOS/Onelab/ModelListController.mm b/contrib/mobile/iOS/Onelab/ModelListController.mm
index a387d6e5b8..95b5e50493 100644
--- a/contrib/mobile/iOS/Onelab/ModelListController.mm
+++ b/contrib/mobile/iOS/Onelab/ModelListController.mm
@@ -37,6 +37,14 @@
             }
         }
     }
+	
+	UIBarButtonItem *about = [[UIBarButtonItem alloc] initWithTitle:@"About" style:UIBarButtonItemStyleBordered target:self action:@selector(showAbout)];
+	[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects: about, nil]];
+}
+
+-(void)showAbout
+{
+	[self performSegueWithIdentifier:@"showAboutSegue" sender:self];
 }
 
 -(void)refreshList
diff --git a/contrib/mobile/iOS/Onelab/ModelViewController.h b/contrib/mobile/iOS/Onelab/ModelViewController.h
index 9c5d307e1e..16eb121bde 100644
--- a/contrib/mobile/iOS/Onelab/ModelViewController.h
+++ b/contrib/mobile/iOS/Onelab/ModelViewController.h
@@ -41,4 +41,6 @@
 
 @property (nonatomic, retain) NSString *initialModel;
 
+- (IBAction)startRotation:(UIButton *)sender;
+
 @end
diff --git a/contrib/mobile/iOS/Onelab/ModelViewController.mm b/contrib/mobile/iOS/Onelab/ModelViewController.mm
index f73c148d71..da88a78644 100644
--- a/contrib/mobile/iOS/Onelab/ModelViewController.mm
+++ b/contrib/mobile/iOS/Onelab/ModelViewController.mm
@@ -99,7 +99,7 @@
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(requestRender) name:@"requestRender" object:nil];
 
 	_runStopButton = [[UIBarButtonItem alloc] initWithTitle:@"Run" style:UIBarButtonItemStyleBordered target:self action:@selector(compute)];
-	UIBarButtonItem *share = [[UIBarButtonItem alloc] initWithTitle:@"Share" style:UIBarButtonItemStyleBordered target:self action:@selector(share)];
+	//UIBarButtonItem *share = [[UIBarButtonItem alloc] initWithTitle:@"Share" style:UIBarButtonItemStyleBordered target:self action:@selector(share)];
     if([[UIDevice currentDevice].model isEqualToString:@"iPad"] || [[UIDevice currentDevice].model isEqualToString:@"iPad Simulator"]){
 		UIBarButtonItem *model = [[UIBarButtonItem alloc] initWithTitle:@"Model list" style:UIBarButtonItemStyleBordered target:self action:@selector(showModelsList)];
 		[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:_runStopButton, model, /*share,*/ nil]];
@@ -218,7 +218,7 @@
 -(void)prevAnimation { animation_prev(); [self requestRender]; }
 -(IBAction)pinch:(UIPinchGestureRecognizer *)sender
 {
-    if(!glView->rotate && [sender numberOfTouches] <= 2) {
+    if(!glView->rotate && [sender numberOfTouches] != 1) {
 		float mScale = scaleFactor;
 		if (sender.state == UIGestureRecognizerStateBegan)
 			mScale = scaleFactor;
@@ -254,7 +254,6 @@
     UITouch *touch = [[event allTouches] anyObject];
     CGPoint touchPoint = [touch locationInView:self.view];
     glView->mContext->eventHandler(4, touchPoint.x, touchPoint.y);
-	glView->rotate = false;
 }
 
 - (IBAction)singleTap:(UITapGestureRecognizer *)sender {
@@ -412,4 +411,11 @@ void getBitmap(void *self, const char *text, int textsize, unsigned char **map,
         *(*map+byteIndex/4) = rawData[byteIndex + 3];
     free(rawData);
 }
+- (IBAction)startRotation:(UIButton *)sender {
+	glView->rotate = !glView->rotate;
+	if(glView->rotate)
+		[sender setImage:[UIImage imageNamed:@"icon_translate.png"] forState:UIControlStateNormal];
+	else
+		[sender setImage:[UIImage imageNamed:@"icon_rotate.png"] forState:UIControlStateNormal];
+}
 @end
diff --git a/contrib/mobile/iOS/Onelab/Onelab-Info.plist b/contrib/mobile/iOS/Onelab/Onelab-Info.plist
index 4a16e04527..3677b436e5 100644
--- a/contrib/mobile/iOS/Onelab/Onelab-Info.plist
+++ b/contrib/mobile/iOS/Onelab/Onelab-Info.plist
@@ -2,23 +2,6 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleDisplayName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleDocumentTypes</key>
-	<array>
-		<dict>
-			<key>CFBundleTypeExtensions</key>
-			<array>
-				<string>onelab</string>
-			</array>
-			<key>CFBundleTypeName</key>
-			<string>Onelab package</string>
-			<key>LSTypeIsPackage</key>
-			<true/>
-		</dict>
-	</array>
 	<key>CFBundleExecutable</key>
 	<string>${EXECUTABLE_NAME}</string>
 	<key>CFBundleIcons</key>
diff --git a/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard b/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard
index 4581de2000..aeb1720540 100644
--- a/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard
+++ b/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" initialViewController="dwa-Pq-2vA">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" initialViewController="dwa-Pq-2vA">
     <dependencies>
-        <deployment defaultVersion="1536" identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3742"/>
+        <deployment defaultVersion="1792" identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
     </dependencies>
     <scenes>
         <!--Navigation Controller-->
@@ -46,6 +46,16 @@
                                 <rect key="frame" x="20" y="708" width="20" height="20"/>
                                 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                             </activityIndicatorView>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="bottom" lineBreakMode="middleTruncation" id="GRU-nz-BNs">
+                                <rect key="frame" x="652" y="722" width="30" height="30"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <state key="normal" image="icon_rotate.png">
+                                    <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                                </state>
+                                <connections>
+                                    <action selector="startRotation:" destination="4" eventType="touchUpInside" id="Ufg-Lv-KVt"/>
+                                </connections>
+                            </button>
                         </subviews>
                         <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                         <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
@@ -307,9 +317,12 @@
             <point key="canvasLocation" x="336" y="340"/>
         </scene>
     </scenes>
+    <resources>
+        <image name="icon_rotate.png" width="512" height="512"/>
+    </resources>
     <simulatedMetricsContainer key="defaultSimulatedMetrics">
         <simulatedStatusBarMetrics key="statusBar"/>
         <simulatedOrientationMetrics key="orientation"/>
         <simulatedScreenMetrics key="destination"/>
     </simulatedMetricsContainer>
-</document>
\ No newline at end of file
+</document>
diff --git a/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard b/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard
index 84217ff7c4..f9b64bf586 100644
--- a/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard
+++ b/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch" variant="6xAndEarlier" propertyAccessControl="none" useAutolayout="YES" initialViewController="vAG-uz-hfU">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="iOS.CocoaTouch" variant="6xAndEarlier" propertyAccessControl="none" useAutolayout="YES" initialViewController="vAG-uz-hfU">
     <dependencies>
-        <deployment defaultVersion="1536" identifier="iOS"/>
+        <deployment defaultVersion="1792" identifier="iOS"/>
         <development version="4600" identifier="xcode"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3742"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
     </dependencies>
     <scenes>
         <!--Model List Controller - Model list-->
@@ -55,16 +55,33 @@
                                     <constraint firstAttribute="width" constant="20" id="f9c-ZY-6q4"/>
                                 </constraints>
                             </activityIndicatorView>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="l9e-j0-zky">
+                                <rect key="frame" x="270" y="464" width="30" height="30"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="30" id="NdA-3S-xkw"/>
+                                    <constraint firstAttribute="width" constant="30" id="hcG-Wv-rkt"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="18"/>
+                                <state key="normal" title=" " image="icon_rotate.png">
+                                    <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                                </state>
+                                <connections>
+                                    <action selector="startRotation:" destination="NyB-7w-cP0" eventType="touchUpInside" id="Uz9-hR-WIi"/>
+                                </connections>
+                            </button>
                         </subviews>
                         <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                         <gestureRecognizers/>
                         <constraints>
-                            <constraint firstAttribute="trailing" secondItem="yT7-IR-qUJ" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="02X-Hf-QoA"/>
-                            <constraint firstAttribute="bottom" secondItem="yT7-IR-qUJ" secondAttribute="bottom" constant="20" symbolic="YES" type="default" id="4by-pW-cH0"/>
-                            <constraint firstItem="Fuh-zG-zVR" firstAttribute="centerY" secondItem="yT7-IR-qUJ" secondAttribute="centerY" type="default" id="BLC-3x-kRj"/>
-                            <constraint firstItem="Fuh-zG-zVR" firstAttribute="top" secondItem="yT7-IR-qUJ" secondAttribute="top" type="default" id="REs-y3-luE"/>
+                            <constraint firstItem="yT7-IR-qUJ" firstAttribute="bottom" secondItem="Fuh-zG-zVR" secondAttribute="bottom" type="default" id="AP1-zU-goA"/>
+                            <constraint firstAttribute="bottom" secondItem="Fuh-zG-zVR" secondAttribute="bottom" constant="20" symbolic="YES" type="default" id="J47-7T-QdC"/>
+                            <constraint firstItem="l9e-j0-zky" firstAttribute="top" secondItem="Fuh-zG-zVR" secondAttribute="top" type="default" id="Wag-TJ-vx5"/>
+                            <constraint firstAttribute="trailing" secondItem="yT7-IR-qUJ" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="g9K-qJ-W8Q"/>
+                            <constraint firstItem="l9e-j0-zky" firstAttribute="trailing" secondItem="yT7-IR-qUJ" secondAttribute="trailing" type="default" id="il1-8K-evV"/>
                             <constraint firstItem="yT7-IR-qUJ" firstAttribute="leading" secondItem="Fuh-zG-zVR" secondAttribute="trailing" constant="8" symbolic="YES" type="default" id="oc4-6x-CF7"/>
                             <constraint firstItem="Fuh-zG-zVR" firstAttribute="leading" secondItem="zrj-Dd-WPc" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="qfh-y2-BuW"/>
+                            <constraint firstItem="l9e-j0-zky" firstAttribute="top" secondItem="yT7-IR-qUJ" secondAttribute="top" type="default" id="wy0-ch-fl3"/>
                         </constraints>
                         <connections>
                             <outletCollection property="gestureRecognizers" destination="7R3-zZ-cpa" appends="YES" id="K8X-lL-YUb"/>
@@ -225,13 +242,13 @@
                                         <textInputTraits key="textInputTraits"/>
                                     </textField>
                                     <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Raise (Z)" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bfu-t9-dAj">
-                                        <rect key="frame" x="-8" y="265" width="91" height="21"/>
+                                        <rect key="frame" x="-8" y="273" width="91" height="21"/>
                                         <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                         <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                                         <nil key="highlightedColor"/>
                                     </label>
                                     <slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="-5" maxValue="5" translatesAutoresizingMaskIntoConstraints="NO" id="BC5-E7-rEF">
-                                        <rect key="frame" x="89" y="264" width="185" height="23"/>
+                                        <rect key="frame" x="89" y="264" width="185" height="31"/>
                                     </slider>
                                     <pickerView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xW0-cN-kxL">
                                         <rect key="frame" x="0.0" y="0.0" width="292" height="216"/>
@@ -292,9 +309,12 @@
             <point key="canvasLocation" x="1596" y="160"/>
         </scene>
     </scenes>
+    <resources>
+        <image name="icon_rotate.png" width="512" height="512"/>
+    </resources>
     <simulatedMetricsContainer key="defaultSimulatedMetrics">
         <simulatedStatusBarMetrics key="statusBar"/>
         <simulatedOrientationMetrics key="orientation"/>
         <simulatedScreenMetrics key="destination" type="retina4"/>
     </simulatedMetricsContainer>
-</document>
\ No newline at end of file
+</document>
diff --git a/contrib/mobile/iOS/Onelab/icon_rotate.png b/contrib/mobile/iOS/Onelab/icon_rotate.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f0ec77d927c324994704e7064ac2125110060a3
GIT binary patch
literal 18386
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%0D})%3DfL@5q0~n0D{5uh(=|tdg5(R-|Y*xihiZ
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
QU|?YIboFyt=akR{0ElUw5C8xG

literal 0
HcmV?d00001

diff --git a/contrib/mobile/iOS/Onelab/icon_translate.png b/contrib/mobile/iOS/Onelab/icon_translate.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c43ceab43ff0d8214f7b41ba6e47b6566f55e36
GIT binary patch
literal 7754
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

literal 0
HcmV?d00001

-- 
GitLab