diff options
author | Siqi LIU <me@siqi.fr> | 2013-07-30 23:54:59 +0200 |
---|---|---|
committer | Siqi LIU <me@siqi.fr> | 2013-07-30 23:54:59 +0200 |
commit | ef4c98cdbb5394520eb68ae3d23f1b0a31b7a803 (patch) | |
tree | 903c189d2a7e7e2628bfb18dae3cdfe9a3147bcf /ios | |
parent | ba7be1c9efec35efdd716aecc9a0fb0c568d831e (diff) |
add iPad specific files & ressources
Change-Id: I1bf6b4f1476ea668ea9973d8b8dfab8779cdabbc
Diffstat (limited to 'ios')
44 files changed, 2090 insertions, 0 deletions
diff --git a/ios/iosremote/UserDefaults.plist b/ios/iosremote/UserDefaults.plist new file mode 100644 index 000000000000..d7714cf2f31d --- /dev/null +++ b/ios/iosremote/UserDefaults.plist @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>TOUCH_POINTER_ENABLED</key> + <true/> + <key>TIMER_AUTOSTART_ENABLED</key> + <false/> +</dict> +</plist> diff --git a/ios/iosremote/iPad_autosize.storyboard b/ios/iosremote/iPad_autosize.storyboard new file mode 100644 index 000000000000..2028340308d6 --- /dev/null +++ b/ios/iosremote/iPad_autosize.storyboard @@ -0,0 +1,576 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="3084" systemVersion="12E55" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" initialViewController="XiK-Ye-iB8"> + <dependencies> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="2083"/> + </dependencies> + <scenes> + <!--Server list vc ipad - Connect--> + <scene sceneID="ydU-fu-qHI"> + <objects> + <viewController storyboardIdentifier="" id="5QV-E7-KNT" customClass="server_list_vc_ipad" sceneMemberID="viewController"> + <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="singleLineEtched" showsSelectionImmediatelyOnTouchBegin="NO" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="0vt-Sx-o55"> + <rect key="frame" x="0.0" y="64" width="540" height="556"/> + <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/> + <prototypes> + <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="server_item_cell" editingAccessoryType="disclosureIndicator" textLabel="h0a-Zq-2vY" detailTextLabel="Fsp-wI-AAW" style="IBUITableViewCellStyleValue1" id="HZp-VJ-Pgz"> + <rect key="frame" x="0.0" y="54" width="540" height="46"/> + <autoresizingMask key="autoresizingMask"/> + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> + <rect key="frame" x="31" y="1" width="478" height="43"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="h0a-Zq-2vY"> + <rect key="frame" x="10" y="11" width="35" height="21"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/> + <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> + <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> + </label> + <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Detail" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Fsp-wI-AAW"> + <rect key="frame" x="424" y="11" width="44" height="21"/> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <color key="textColor" red="0.21960784310000001" green="0.3294117647" blue="0.52941176469999995" alpha="1" colorSpace="calibratedRGB"/> + <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> + </label> + </subviews> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + </tableViewCell> + </prototypes> + <connections> + <outlet property="dataSource" destination="5QV-E7-KNT" id="Vhs-k2-fLj"/> + <outlet property="delegate" destination="5QV-E7-KNT" id="L4W-DD-RiQ"/> + </connections> + </tableView> + <navigationItem key="navigationItem" title="Connect" id="wYh-MF-Ao6"> + <barButtonItem key="leftBarButtonItem" systemItem="cancel" id="yai-U0-WT9"> + <connections> + <action selector="cancelModalView:" destination="5QV-E7-KNT" id="rSl-Rp-xQb"/> + </connections> + </barButtonItem> + <barButtonItem key="rightBarButtonItem" systemItem="add" id="pU6-XF-laS"> + <connections> + <segue destination="65c-5D-pB7" kind="push" identifier="create_new_server" id="ORn-0W-dHd"/> + </connections> + </barButtonItem> + </navigationItem> + <simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackTranslucent"/> + <connections> + <outlet property="serverTable" destination="0vt-Sx-o55" id="Szp-pH-0rk"/> + <segue destination="m26-i1-eiL" kind="push" identifier="pinValidation" id="yUv-cB-P15"/> + <segue destination="B8g-8S-pgn" kind="push" identifier="SlideShowPreview" id="XCJ-4d-eG4"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="KBf-aZ-Hhk" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="254" y="-1374"/> + </scene> + <!--Pin Validation vc--> + <scene sceneID="wDk-2x-G9p"> + <objects> + <viewController id="m26-i1-eiL" customClass="pinValidation_vc" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="hAq-tq-hru"> + <rect key="frame" x="0.0" y="64" width="540" height="556"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <subviews> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="3128" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Bp1-Dv-nt4"> + <rect key="frame" x="159" y="71" width="223" height="118"/> + <fontDescription key="fontDescription" name="HelveticaNeue-UltraLight" family="Helvetica Neue" pointSize="100"/> + <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Please enter the pin code above in Impress - Slide Show - Impress Remote" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="9zr-53-YfP"> + <rect key="frame" x="137" y="267" width="266" height="38"/> + <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/> + <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Waiting for validation from Impress..." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="VVO-s2-eCV"> + <rect key="frame" x="147" y="403" width="246" height="19"/> + <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/> + <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> + </view> + <navigationItem key="navigationItem" id="V5z-WP-qrM"/> + <simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackTranslucent"/> + <connections> + <outlet property="pinLabel" destination="Bp1-Dv-nt4" id="6xd-P5-J5U"/> + <outlet property="statusLabel" destination="VVO-s2-eCV" id="Uhy-iy-HAW"/> + <segue destination="B8g-8S-pgn" kind="push" identifier="pinValidated" id="gCy-Mv-VrC"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="gh4-1U-6Dm" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="1024" y="-500"/> + </scene> + <!--New Server View Controller - New Server--> + <scene sceneID="RcY-Im-ohw"> + <objects> + <tableViewController id="65c-5D-pB7" customClass="newServerViewController" sceneMemberID="viewController"> + <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="singleLineEtched" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="qow-Yc-8dL"> + <rect key="frame" x="0.0" y="64" width="540" height="556"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/> + <sections> + <tableViewSection footerTitle="Register a new server and remeber it for future connection" id="CVG-Eq-rLd"> + <cells> + <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="b8A-jh-k26" customClass="EditableTableViewCell"> + <rect key="frame" x="0.0" y="30" width="540" height="45"/> + <autoresizingMask key="autoresizingMask"/> + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> + <rect key="frame" x="31" y="1" width="478" height="43"/> + <autoresizingMask key="autoresizingMask"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + </tableViewCell> + <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="jrI-wU-4NT" customClass="EditableTableViewCell"> + <rect key="frame" x="0.0" y="75" width="540" height="45"/> + <autoresizingMask key="autoresizingMask"/> + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> + <rect key="frame" x="31" y="0.0" width="478" height="43"/> + <autoresizingMask key="autoresizingMask"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + </tableViewCell> + </cells> + </tableViewSection> + </sections> + <connections> + <outlet property="dataSource" destination="65c-5D-pB7" id="Omw-kB-sR2"/> + <outlet property="delegate" destination="65c-5D-pB7" id="eNx-uc-YkW"/> + </connections> + </tableView> + <navigationItem key="navigationItem" title="New Server" id="oAP-jt-6Z9"> + <barButtonItem key="rightBarButtonItem" systemItem="save" id="PoE-MY-hSB"> + <connections> + <action selector="save:" destination="65c-5D-pB7" id="Ww6-Jy-5eG"/> + </connections> + </barButtonItem> + </navigationItem> + <simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackTranslucent"/> + </tableViewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="JK3-FB-UoN" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="1024" y="-1831"/> + </scene> + <!--Slide Show Preview Table vc ipad--> + <scene sceneID="ejm-Sz-YCw"> + <objects> + <tableViewController storyboardIdentifier="slideShowPreview" id="B8g-8S-pgn" customClass="slideShowPreviewTable_vc_ipad" sceneMemberID="viewController"> + <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="singleLineEtched" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="Pc5-8o-PrW"> + <rect key="frame" x="0.0" y="64" width="540" height="556"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/> + <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/> + <view key="tableHeaderView" contentMode="scaleToFill" id="YCJ-J4-RGt"> + <rect key="frame" x="0.0" y="0.0" width="540" height="281"/> + <subviews> + <view contentMode="scaleToFill" id="Is1-dX-SaP"> + <rect key="frame" x="36" y="53" width="468" height="208"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> + <subviews> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Title of the presentation(TODO)" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="5" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="JEW-I6-sw5"> + <rect key="frame" x="22" y="30" width="424" height="44"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="28"/> + <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Last modified: 3 Jul 2013" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="0je-bV-nk1"> + <rect key="frame" x="21" y="129" width="416" height="20"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/> + <fontDescription key="fontDescription" type="system" pointSize="19"/> + <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Author: author name" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="vfH-4C-Sag"> + <rect key="frame" x="21" y="97" width="1664" height="20"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/> + <fontDescription key="fontDescription" type="system" pointSize="19"/> + <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Current slide: 5 of 22" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="mRZ-fv-RAC"> + <rect key="frame" x="21" y="165" width="392" height="20"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/> + <fontDescription key="fontDescription" type="system" pointSize="19"/> + <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> + </view> + </subviews> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + <sections> + <tableViewSection id="gMl-dC-GqD"> + <cells> + <tableViewCell contentMode="scaleToFill" restorationIdentifier="" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="optionCell" id="tqg-R4-Coi"> + <rect key="frame" x="0.0" y="291" width="540" height="45"/> + <autoresizingMask key="autoresizingMask"/> + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> + <rect key="frame" x="31" y="1" width="478" height="43"/> + <autoresizingMask key="autoresizingMask"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + </tableViewCell> + <tableViewCell contentMode="scaleToFill" restorationIdentifier="" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="optionCell" id="f4z-FH-mar"> + <rect key="frame" x="0.0" y="336" width="540" height="44"/> + <autoresizingMask key="autoresizingMask"/> + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> + <rect key="frame" x="31" y="0.0" width="478" height="43"/> + <autoresizingMask key="autoresizingMask"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + </tableViewCell> + <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="optionCell" id="5jP-bD-Vcy"> + <rect key="frame" x="0.0" y="380" width="540" height="45"/> + <autoresizingMask key="autoresizingMask"/> + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> + <rect key="frame" x="31" y="0.0" width="478" height="43"/> + <autoresizingMask key="autoresizingMask"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + </tableViewCell> + </cells> + </tableViewSection> + </sections> + <connections> + <outlet property="dataSource" destination="B8g-8S-pgn" id="SGm-yW-lAs"/> + <outlet property="delegate" destination="B8g-8S-pgn" id="p2A-1P-NJP"/> + </connections> + </tableView> + <navigationItem key="navigationItem" id="4ju-ge-QPw"/> + <simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackTranslucent"/> + <connections> + <outlet property="optionsTable" destination="Pc5-8o-PrW" id="18R-Zo-CBq"/> + </connections> + </tableViewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="gg2-6d-fyF" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="1768" y="-1374"/> + </scene> + <!--Base Presentation View Controller--> + <scene sceneID="5zi-ge-3SF"> + <objects> + <viewController storyboardIdentifier="basePresentation" id="TYh-Hw-m1Q" customClass="BasePresentationViewController" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="qHB-hR-vFc"> + <rect key="frame" x="0.0" y="20" width="768" height="1004"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <view contentMode="scaleToFill" id="KCA-UU-Lu1" userLabel="Preview"> + <rect key="frame" x="0.0" y="0.0" width="768" height="459"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> + <subviews> + <imageView userInteractionEnabled="NO" tag="19" contentMode="scaleToFill" verticalCompressionResistancePriority="1000" image="Default-568h@2x.png" id="x7C-rs-s4K"> + <rect key="frame" x="0.0" y="0.0" width="768" height="459"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + </imageView> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.80000001192092896" contentMode="left" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="wWm-KR-C5L"> + <rect key="frame" x="685" y="427" width="83" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" heightSizable="YES"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + <rect key="contentStretch" x="1.3877787807814457e-17" y="0.0" width="1" height="1"/> + <fontDescription key="fontDescription" type="system" pointSize="25"/> + <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + </label> + <view hidden="YES" contentMode="scaleToFill" id="2SJ-3f-E3k" userLabel="pointer"> + <rect key="frame" x="191" y="277" width="8" height="7"/> + <color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> + </view> + <button opaque="NO" alpha="0.69999999999999996" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="I1u-1Z-GsZ"> + <rect key="frame" x="0.0" y="0.0" width="84" height="459"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" heightSizable="YES"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/> + <state key="normal" backgroundImage="previousButton_normal.png"> + <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/> + <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> + </state> + <state key="highlighted" backgroundImage="previousButton_pressed.png"> + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + </state> + <connections> + <action selector="previousSlideAction:" destination="TYh-Hw-m1Q" eventType="touchUpInside" id="qvs-3Y-Ifz"/> + </connections> + </button> + <button opaque="NO" alpha="0.69999999999999996" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="bfp-PJ-NrP"> + <rect key="frame" x="684" y="0.0" width="84" height="459"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" heightSizable="YES"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/> + <state key="normal" backgroundImage="nextButton_normal.png"> + <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/> + <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> + </state> + <state key="highlighted" backgroundImage="nextButton_pressed.png"> + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + </state> + <connections> + <action selector="nextSlideAction:" destination="TYh-Hw-m1Q" eventType="touchUpInside" id="7OP-xX-gva"/> + </connections> + </button> + </subviews> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + <view clipsSubviews="YES" contentMode="scaleToFill" verticalCompressionResistancePriority="547" restorationIdentifier="" id="Pk1-fD-KAi" userLabel="NotesView"> + <rect key="frame" x="-13" y="595" width="794" height="303"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Lecturer's Notes " textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="5Yn-0z-Cjz"> + <rect key="frame" x="20" y="0.0" width="754" height="31"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> + <color key="backgroundColor" red="1" green="0.66274509800000003" blue="0.074509803920000006" alpha="1" colorSpace="calibratedRGB"/> + <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="17"/> + <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/> + <nil key="highlightedColor"/> + </label> + <webView tag="4" contentMode="scaleToFill" verticalCompressionResistancePriority="1" id="pAh-4g-JCn" userLabel="Notes"> + <rect key="frame" x="20" y="29" width="754" height="274"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <rect key="contentStretch" x="0.0" y="1" width="1" height="1"/> + </webView> + </subviews> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + <tableView contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="Iok-mu-c0T" customClass="HorizontalTableView"> + <rect key="frame" x="0.0" y="458" width="129" height="768"/> + <autoresizingMask key="autoresizingMask"/> + <color key="backgroundColor" white="0.33333333333333331" alpha="1" colorSpace="calibratedWhite"/> + <prototypes> + <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="zSs-IC-htx"> + <rect key="frame" x="0.0" y="22" width="129" height="44"/> + <autoresizingMask key="autoresizingMask"/> + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> + <rect key="frame" x="0.0" y="0.0" width="129" height="43"/> + <autoresizingMask key="autoresizingMask"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + </tableViewCell> + </prototypes> + <connections> + <outlet property="dataSource" destination="TYh-Hw-m1Q" id="42R-0X-OyE"/> + <outlet property="delegate" destination="TYh-Hw-m1Q" id="mMV-1F-8OM"/> + </connections> + </tableView> + <view contentMode="scaleToFill" restorationIdentifier="" id="xYX-bt-wuI" userLabel="Bottom"> + <rect key="frame" x="0.0" y="906" width="768" height="98"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <subviews> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="1" contentMode="left" text="00:00:00" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="dtc-vP-agf"> + <rect key="frame" x="20" y="7" width="382" height="91"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/> + <fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="55"/> + <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> + <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + </label> + <button opaque="NO" tag="2" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="8iO-H3-CJ7"> + <rect key="frame" x="410" y="0.0" width="120" height="98"/> + <autoresizingMask key="autoresizingMask" flexibleMinY="YES"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/> + <state key="normal" image="timer_start_btn.png"> + <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/> + <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> + </state> + <state key="highlighted"> + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + </state> + <connections> + <action selector="stopWatchStart:" destination="VQa-vM-8pF" eventType="touchUpInside" id="om8-GY-NhP"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="MKb-4h-13P"> + <rect key="frame" x="518" y="0.0" width="117" height="98"/> + <autoresizingMask key="autoresizingMask" flexibleMinY="YES"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/> + <state key="normal" image="timer_clear_btn.png"> + <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/> + <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> + </state> + <state key="highlighted"> + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + </state> + <connections> + <action selector="stopWatchClear:" destination="VQa-vM-8pF" eventType="touchUpInside" id="aD5-Wp-WRC"/> + </connections> + </button> + </subviews> + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + </view> + <view alpha="0.50000000000000011" contentMode="scaleToFill" id="jX5-gj-cqE"> + <rect key="frame" x="0.0" y="0.0" width="768" height="1004"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" image="libO_icon.png" id="Qe8-38-thk"> + <rect key="frame" x="264" y="95" width="240" height="248"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES"/> + </imageView> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="1Yr-C2-huW"> + <rect key="frame" x="294" y="610" width="180" height="77"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES"/> + <fontDescription key="fontDescription" type="system" pointSize="28"/> + <state key="normal" title="Connect"> + <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/> + <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> + </state> + <state key="highlighted"> + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + </state> + <connections> + <action selector="startConnectionModal:" destination="TYh-Hw-m1Q" eventType="touchUpInside" id="8aS-7k-5Ga"/> + </connections> + </button> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="LibreOffice Impress Remote" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsLetterSpacingToFitWidth="YES" adjustsFontSizeToFit="NO" id="yiP-rQ-s7i"> + <rect key="frame" x="124" y="471" width="520" height="62"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/> + <fontDescription key="fontDescription" name="AppleSDGothicNeo-Bold" family="Apple SD Gothic Neo" pointSize="38"/> + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + <nil key="highlightedColor"/> + <color key="shadowColor" cocoaTouchSystemColor="tableCellGroupedBackgroundColor"/> + <size key="shadowOffset" width="0.0" height="0.0"/> + </label> + </subviews> + <color key="backgroundColor" red="0.29803921568627451" green="0.74509803921568629" blue="0.22745098039215686" alpha="1" colorSpace="calibratedRGB"/> + </view> + </subviews> + <color key="backgroundColor" red="0.90196079019999997" green="0.90196079019999997" blue="0.90196079019999997" alpha="1" colorSpace="calibratedRGB"/> + </view> + <toolbarItems/> + <connections> + <outlet property="NoteWebView" destination="pAh-4g-JCn" id="h2a-iy-ahp"/> + <outlet property="NotesView" destination="Pk1-fD-KAi" id="2ZD-si-fls"/> + <outlet property="clearButton" destination="MKb-4h-13P" id="7Xz-n6-sre"/> + <outlet property="currentSlideImageView" destination="x7C-rs-s4K" id="Qtf-99-j0C"/> + <outlet property="horizontalTableView" destination="Iok-mu-c0T" id="SJT-pa-4Hb"/> + <outlet property="movingPointer" destination="2SJ-3f-E3k" id="mxV-zz-hjx"/> + <outlet property="nextButton" destination="bfp-PJ-NrP" id="1Uf-1g-iQl"/> + <outlet property="previousButton" destination="I1u-1Z-GsZ" id="Vjj-em-GQj"/> + <outlet property="slideNumber" destination="wWm-KR-C5L" id="Vb0-Wv-6gb"/> + <outlet property="startButton" destination="8iO-H3-CJ7" id="ym1-Hg-BPE"/> + <outlet property="timeLabel" destination="dtc-vP-agf" id="WsH-Gm-dBN"/> + <outlet property="welcome_blocking_page" destination="jX5-gj-cqE" id="5dH-dT-AG4"/> + <outlet property="welcome_connect_button" destination="1Yr-C2-huW" id="fm5-IB-oyc"/> + <outlet property="welcome_label" destination="yiP-rQ-s7i" id="rGp-xL-dH2"/> + <outlet property="welcome_libO_icon" destination="Qe8-38-thk" id="w3C-h1-OL0"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="e0y-Q9-Urg" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="-611" y="487"/> + </scene> + <!--Navigation Controller--> + <scene sceneID="uu7-eo-v6A"> + <objects> + <navigationController storyboardIdentifier="slidesTable" id="Z0a-WL-DOn" sceneMemberID="viewController"> + <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="238-WF-42z"> + <autoresizingMask key="autoresizingMask"/> + </navigationBar> + <connections> + <segue destination="VQa-vM-8pF" kind="relationship" relationship="rootViewController" id="hqy-57-zTC"/> + </connections> + </navigationController> + <placeholder placeholderIdentifier="IBFirstResponder" id="bhU-cc-Ssa" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="-611" y="-493"/> + </scene> + <!--Main Split View Controller--> + <scene sceneID="myh-dM-403"> + <objects> + <splitViewController id="XiK-Ye-iB8" customClass="MainSplitViewController" sceneMemberID="viewController"> + <toolbarItems/> + <connections> + <segue destination="Z0a-WL-DOn" kind="relationship" relationship="masterViewController" id="2YO-8l-YoY"/> + <segue destination="TYh-Hw-m1Q" kind="relationship" relationship="detailViewController" id="qi1-27-bFk"/> + <segue destination="KDH-tS-eoR" kind="modal" identifier="connectionModalUp" modalPresentationStyle="formSheet" modalTransitionStyle="flipHorizontal" id="pYZ-nF-jdE"/> + </connections> + </splitViewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="TtW-hD-5Ub" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="-1587" y="-25"/> + </scene> + <!--Slide Show Swipe In List ipad--> + <scene sceneID="Abu-7b-l1S"> + <objects> + <tableViewController clearsSelectionOnViewWillAppear="NO" id="VQa-vM-8pF" customClass="slideShowSwipeInList_ipad" sceneMemberID="viewController"> + <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" rowHeight="170" sectionHeaderHeight="22" sectionFooterHeight="22" id="U9c-sP-NVQ"> + <rect key="frame" x="0.0" y="64" width="320" height="788"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <color key="backgroundColor" cocoaTouchSystemColor="scrollViewTexturedBackgroundColor"/> + <prototypes> + <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="slide" rowHeight="178" id="c4j-oH-LnN"> + <rect key="frame" x="0.0" y="22" width="320" height="178"/> + <autoresizingMask key="autoresizingMask"/> + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> + <rect key="frame" x="0.0" y="0.0" width="320" height="177"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <imageView userInteractionEnabled="NO" tag="1" contentMode="scaleToFill" image="Default-568h@2x.png" id="dn1-99-Dde"> + <rect key="frame" x="44" y="7" width="233" height="163"/> + </imageView> + <label clipsSubviews="YES" userInteractionEnabled="NO" tag="2" contentMode="left" text="1" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="1" highlighted="YES" id="qrH-bi-qw7"> + <rect key="frame" x="291" y="156" width="29" height="21"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/> + <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/> + <accessibility key="accessibilityConfiguration"> + <accessibilityTraits key="traits" none="YES" selected="YES" staticText="YES"/> + </accessibility> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> + </view> + </tableViewCell> + </prototypes> + <connections> + <outlet property="dataSource" destination="VQa-vM-8pF" id="Txq-JQ-qey"/> + <outlet property="delegate" destination="VQa-vM-8pF" id="ae6-wj-kAw"/> + </connections> + </tableView> + <navigationItem key="navigationItem" id="tG3-aQ-qyu"/> + <simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackTranslucent"/> + </tableViewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="EJg-kN-O5N" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="-145" y="-493"/> + </scene> + <!--Auto Dismiss Keyboard Navigation View Controller--> + <scene sceneID="tvQ-2n-hpX"> + <objects> + <navigationController storyboardIdentifier="serverList" id="KDH-tS-eoR" customClass="autoDismissKeyboardNavigationViewController" sceneMemberID="viewController"> + <toolbarItems/> + <navigationBar key="navigationBar" contentMode="scaleToFill" id="9T5-Qi-Tr9"> + <rect key="frame" x="0.0" y="0.0" width="768" height="44"/> + <autoresizingMask key="autoresizingMask"/> + </navigationBar> + <nil name="viewControllers"/> + <connections> + <segue destination="5QV-E7-KNT" kind="relationship" relationship="rootViewController" id="euZ-Wr-AwZ"/> + </connections> + </navigationController> + <placeholder placeholderIdentifier="IBFirstResponder" id="MVE-66-SWg" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="-636" y="-1374"/> + </scene> + </scenes> + <resources> + <image name="Default-568h@2x.png" width="640" height="1136"/> + <image name="libO_icon.png" width="598" height="598"/> + <image name="nextButton_normal.png" width="42" height="230"/> + <image name="nextButton_pressed.png" width="42" height="230"/> + <image name="previousButton_normal.png" width="42" height="230"/> + <image name="previousButton_pressed.png" width="42" height="230"/> + <image name="timer_clear_btn.png" width="74" height="74"/> + <image name="timer_start_btn.png" width="74" height="74"/> + </resources> + <simulatedMetricsContainer key="defaultSimulatedMetrics"> + <simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackTranslucent"/> + <simulatedOrientationMetrics key="orientation"/> + <simulatedScreenMetrics key="destination"/> + </simulatedMetricsContainer> + <inferredMetricsTieBreakers> + <segue reference="XCJ-4d-eG4"/> + </inferredMetricsTieBreakers> +</document>
\ No newline at end of file diff --git a/ios/iosremote/iosremote/AppDelegate_ipad.h b/ios/iosremote/iosremote/AppDelegate_ipad.h new file mode 100644 index 000000000000..0c120c466c43 --- /dev/null +++ b/ios/iosremote/iosremote/AppDelegate_ipad.h @@ -0,0 +1,16 @@ +// +// AppDelegate_ipad.h +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "AppDelegate.h" + +@class BasePresentationViewController; +@class MainSplitViewController; + +@interface AppDelegate_ipad : AppDelegate + +@end diff --git a/ios/iosremote/iosremote/AppDelegate_ipad.m b/ios/iosremote/iosremote/AppDelegate_ipad.m new file mode 100644 index 000000000000..ad5f2b787e91 --- /dev/null +++ b/ios/iosremote/iosremote/AppDelegate_ipad.m @@ -0,0 +1,16 @@ +// +// AppDelegate_ipad.m +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "AppDelegate_ipad.h" +#import "slideShowSwipeInList_ipad.h" +#import "MainSplitViewController.h" +#import "BasePresentationViewController.h" + +@implementation AppDelegate_ipad + +@end diff --git a/ios/iosremote/iosremote/ControlVariables.h b/ios/iosremote/iosremote/ControlVariables.h new file mode 100644 index 000000000000..b96e5b7afab0 --- /dev/null +++ b/ios/iosremote/iosremote/ControlVariables.h @@ -0,0 +1,43 @@ +// +// ControlVariables.h +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#ifndef iosremote_ControlVariables_h +#define iosremote_ControlVariables_h + +// Width (or length before rotation) of the table view embedded within another table view's row +#define kTableLength 768 + +// Width of the cells of the embedded table view (after rotation, which means it controls the rowHeight property) +#define kCellWidth 172 +// Height of the cells of the embedded table view (after rotation, which would be the table's width) +#define kCellHeight 129 + +// Padding for the Cell containing the article image and title +#define kArticleCellVerticalInnerPadding 6 +#define kArticleCellHorizontalInnerPadding 7 + +// Padding for the title label in an article's cell +#define kArticleTitleLabelPadding 10 + +// Vertical padding for the embedded table view within the row +#define kRowVerticalPadding 1 +// Horizontal padding for the embedded table view within the row +#define kRowHorizontalPadding 1 + +// The background color of the vertical table view +#define kVerticalTableBackgroundColor [UIColor colorWithRed:0.58823529 green:0.58823529 blue:0.58823529 alpha:1.0] + +// Background color for the horizontal table view (the one embedded inside the rows of our vertical table) +#define kHorizontalTableBackgroundColor [UIColor blackColor] + +// The background color on the horizontal table view for when we select a particular cell +#define kHorizontalTableSelectedBackgroundColor [UIColor colorWithRed:0.0 green:0.59607843 blue:0.37254902 alpha:1.0] + +#define kHorizontalTableCellHighlightedBackgroundColor [UIColor colorWithRed:0 green:0.4745098 blue:0.29019808 alpha:0.9] + +#endif diff --git a/ios/iosremote/iosremote/HorizontalSlideCell.h b/ios/iosremote/iosremote/HorizontalSlideCell.h new file mode 100644 index 000000000000..599a1d03076a --- /dev/null +++ b/ios/iosremote/iosremote/HorizontalSlideCell.h @@ -0,0 +1,16 @@ +// +// HorizontalSlideCell.h +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import <UIKit/UIKit.h> + +@interface HorizontalSlideCell : UITableViewCell + +@property (strong, nonatomic) UIImageView *thumbnail; +@property (strong, nonatomic) UILabel *numberLabel; + +@end diff --git a/ios/iosremote/iosremote/HorizontalSlideCell.m b/ios/iosremote/iosremote/HorizontalSlideCell.m new file mode 100644 index 000000000000..e114095f3579 --- /dev/null +++ b/ios/iosremote/iosremote/HorizontalSlideCell.m @@ -0,0 +1,65 @@ +// +// HorizontalSlideCell.m +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "HorizontalSlideCell.h" +#import "ControlVariables.h" + +@implementation HorizontalSlideCell + +@synthesize thumbnail = _thumbnail; +@synthesize numberLabel = _numberLabel; + +- (NSString *)reuseIdentifier +{ + return @"HorizontalTableSlideCell"; +} + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + // Initialization code + } + return self; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + + self.thumbnail = [[UIImageView alloc] initWithFrame:CGRectMake(kArticleCellHorizontalInnerPadding, kArticleCellVerticalInnerPadding, kCellWidth - kArticleCellHorizontalInnerPadding * 2, kCellHeight - kArticleCellVerticalInnerPadding * 2)]; + self.thumbnail.opaque = YES; + + [self.contentView addSubview:self.thumbnail]; + + self.numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.thumbnail.frame.size.width * 0.8, self.thumbnail.frame.size.height * 0.8, self.thumbnail.frame.size.width * 0.2, self.thumbnail.frame.size.height * 0.2)]; + self.numberLabel.opaque = YES; + self.numberLabel.backgroundColor = kHorizontalTableCellHighlightedBackgroundColor; + self.numberLabel.textColor = [UIColor whiteColor]; + self.numberLabel.font = [UIFont boldSystemFontOfSize:11]; + self.numberLabel.textAlignment = UITextAlignmentCenter; + self.numberLabel.numberOfLines = 1; + [self.thumbnail addSubview:self.numberLabel]; + + self.backgroundColor = [UIColor colorWithRed:0 green:0.40784314 blue:0.21568627 alpha:1.0]; + self.selectedBackgroundView = [[UIView alloc] initWithFrame:self.thumbnail.frame]; + self.selectedBackgroundView.backgroundColor = kHorizontalTableSelectedBackgroundColor; + + self.transform = CGAffineTransformMakeRotation(M_PI * 0.5); + + return self; +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/ios/iosremote/iosremote/MainSplitViewController.h b/ios/iosremote/iosremote/MainSplitViewController.h new file mode 100644 index 000000000000..2ae6eff403af --- /dev/null +++ b/ios/iosremote/iosremote/MainSplitViewController.h @@ -0,0 +1,17 @@ +// +// PresentationViewController.h +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import <UIKit/UIKit.h> +#import "slideShowPreviewTable_vc_ipad.h" + +@interface MainSplitViewController : UISplitViewController <MainSplitViewControllerProtocol> + +- (void) didReceivePresentationStarted; + +@property (strong, nonatomic) UIViewController * splitController; +@end diff --git a/ios/iosremote/iosremote/MainSplitViewController.m b/ios/iosremote/iosremote/MainSplitViewController.m new file mode 100644 index 000000000000..fbb8b0203828 --- /dev/null +++ b/ios/iosremote/iosremote/MainSplitViewController.m @@ -0,0 +1,80 @@ +// +// PresentationViewController.m +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "MainSplitViewController.h" +#import "server_list_vc_ipad.h" +#import "CommunicationManager.h" +#import "BasePresentationViewController.h" +#import "slideShowSwipeInList_ipad.h" +#import <Foundation/Foundation.h> +#import <UIKit/UIKit.h> + +@interface MainSplitViewController () + +@property UINavigationController * masterViewController; +@property BasePresentationViewController * detailViewController; + +@end + +@implementation MainSplitViewController + +# pragma mark - System defaults + +- (BOOL) shouldAutorotate +{ + return YES; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +{ + return YES; +} + + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + [[[[UIApplication sharedApplication] delegate] window] setRootViewController:self]; + // Do any additional setup after loading the view. + + self.detailViewController = [self.viewControllers objectAtIndex:1]; + self.masterViewController = [self.viewControllers objectAtIndex:0]; + + self.delegate = self.detailViewController; +} + +-(void) viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void) didReceivePresentationStarted +{ + [self.detailViewController hideMaster:NO]; + [self dismissViewControllerAnimated:YES completion:nil]; +// [(UITableView *)[(slideShowSwipeInList_ipad *)[[self viewControllers] objectAtIndex:2] view] reloadData]; + [(slideShowSwipeInList_ipad *)[(UINavigationController *)[[self viewControllers] objectAtIndex:0] topViewController] didReceivePresentationStarted]; + [(BasePresentationViewController *)[[self viewControllers] objectAtIndex:1] setWelcomePageVisible:NO]; +} + +@end diff --git a/ios/iosremote/iosremote/arrow_left.png b/ios/iosremote/iosremote/arrow_left.png Binary files differnew file mode 100644 index 000000000000..d99560fea1b6 --- /dev/null +++ b/ios/iosremote/iosremote/arrow_left.png diff --git a/ios/iosremote/iosremote/arrow_left@2x.png b/ios/iosremote/iosremote/arrow_left@2x.png Binary files differnew file mode 100644 index 000000000000..dba2497f936d --- /dev/null +++ b/ios/iosremote/iosremote/arrow_left@2x.png diff --git a/ios/iosremote/iosremote/arrow_right.png b/ios/iosremote/iosremote/arrow_right.png Binary files differnew file mode 100644 index 000000000000..e271d4655f8e --- /dev/null +++ b/ios/iosremote/iosremote/arrow_right.png diff --git a/ios/iosremote/iosremote/arrow_right@2x.png b/ios/iosremote/iosremote/arrow_right@2x.png Binary files differnew file mode 100644 index 000000000000..44be9d652a00 --- /dev/null +++ b/ios/iosremote/iosremote/arrow_right@2x.png diff --git a/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.h b/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.h new file mode 100644 index 000000000000..93d1da1c2d7e --- /dev/null +++ b/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.h @@ -0,0 +1,13 @@ +// +// autoDismissKeyboardNavigationViewController.h +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import <UIKit/UIKit.h> + +@interface autoDismissKeyboardNavigationViewController : UINavigationController + +@end diff --git a/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.m b/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.m new file mode 100644 index 000000000000..fb6039815102 --- /dev/null +++ b/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.m @@ -0,0 +1,43 @@ +// +// autoDismissKeyboardNavigationViewController.m +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "autoDismissKeyboardNavigationViewController.h" + +@interface autoDismissKeyboardNavigationViewController () + +@end + +@implementation autoDismissKeyboardNavigationViewController + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (BOOL)disablesAutomaticKeyboardDismissal +{ + return NO; +} + +@end diff --git a/ios/iosremote/iosremote/server_list_vc_ipad.h b/ios/iosremote/iosremote/server_list_vc_ipad.h new file mode 100644 index 000000000000..2fb881ec4143 --- /dev/null +++ b/ios/iosremote/iosremote/server_list_vc_ipad.h @@ -0,0 +1,15 @@ +// +// server_list_vc_ipad.h +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "serverList_vc.h" + +@interface server_list_vc_ipad : server_list_vc + +- (IBAction)cancelModalView:(id)sender; + +@end diff --git a/ios/iosremote/iosremote/server_list_vc_ipad.m b/ios/iosremote/iosremote/server_list_vc_ipad.m new file mode 100644 index 000000000000..bb4dea61728d --- /dev/null +++ b/ios/iosremote/iosremote/server_list_vc_ipad.m @@ -0,0 +1,46 @@ +// +// server_list_vc_ipad.m +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "server_list_vc_ipad.h" + +@interface server_list_vc_ipad () + +@end + +@implementation server_list_vc_ipad + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)viewDidUnload { + [super viewDidUnload]; +} + +#pragma mark - Actions +- (IBAction)cancelModalView:(id)sender { + [self.presentingViewController dismissModalViewControllerAnimated:YES]; +} +@end diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.h b/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.h new file mode 100644 index 000000000000..ded75b0ec920 --- /dev/null +++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.h @@ -0,0 +1,21 @@ +// +// slideShowPreview_vc~ipad.h +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "slideShowPreviewTable_vc.h" + +@protocol MainSplitViewControllerProtocol <NSObject> + +- (void) didReceivePresentationStarted; + +@end + +@interface slideShowPreviewTable_vc_ipad : slideShowPreviewTable_vc + +@property (strong, nonatomic) id <MainSplitViewControllerProtocol> delegate; + +@end diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.m b/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.m new file mode 100644 index 000000000000..93474628d57c --- /dev/null +++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.m @@ -0,0 +1,73 @@ +// +// slideShowPreview_vc~ipad.m +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "slideShowPreviewTable_vc_ipad.h" +#import "slideShowPreviewTable_vc.h" +#import "CommunicationManager.h" +#import "CommandTransmitter.h" +#import "CommandInterpreter.h" +#import "SlideShow.h" +#import "MainSplitViewController.h" + +@interface slideShowPreviewTable_vc_ipad () + +@end + +@implementation slideShowPreviewTable_vc_ipad + +#pragma mark - System defaults + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void) viewDidLoad +{ + [super viewDidLoad]; + if (self.navigationController) + self.delegate = (MainSplitViewController *) self.navigationController.presentingViewController; + else + self.delegate = (MainSplitViewController *) self.presentingViewController; + NSLog(@"%@", [self.delegate class]); + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + self.optionsArray = [NSArray arrayWithObjects:OPTION_TIMER, nil]; + } else + self.optionsArray = [NSArray arrayWithObjects:OPTION_TIMER, OPTION_POINTER, nil]; + self.comManager = [CommunicationManager sharedComManager]; + self.comManager.delegate = self; +} + +- (void) viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + if ([self.comManager.interpreter.slideShow size] > 0){ + NSLog(@"3"); + [self.delegate didReceivePresentationStarted]; + } + NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; + self.slideShowStartObserver = [[NSNotificationCenter defaultCenter] addObserverForName:STATUS_CONNECTED_SLIDESHOW_RUNNING + object:nil + queue:mainQueue + usingBlock:^(NSNotification *note) { + [self.delegate didReceivePresentationStarted]; + }]; +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +@end diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.h b/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.h new file mode 100644 index 000000000000..1f2d5d5c81f1 --- /dev/null +++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.h @@ -0,0 +1,14 @@ +// +// slideShowPreview_vc~iphone.h +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import <UIKit/UIKit.h> +#import "slideShowPreviewTable_vc.h" + +@interface slideShowPreviewTable_vc_iphone : slideShowPreviewTable_vc + +@end diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.m b/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.m new file mode 100644 index 000000000000..51cf96a4d638 --- /dev/null +++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.m @@ -0,0 +1,39 @@ +// +// slideShowPreview_vc~iphone.m +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "slideShowPreviewTable_vc_iphone.h" +#import "CommandInterpreter.h" +#import "SlideShow.h" + +@implementation slideShowPreviewTable_vc_iphone + +- (void) viewDidLoad +{ + [super viewDidLoad]; + self.optionsArray = [NSArray arrayWithObjects:OPTION_TIMER, OPTION_POINTER, nil]; + self.comManager = [CommunicationManager sharedComManager]; + self.comManager.delegate = self; +} + +- (void) viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + if ([self.comManager.interpreter.slideShow size] > 0){ + [self performSegueWithIdentifier:@"slideShowSegue" sender:self]; + } + NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; + self.slideShowStartObserver = [[NSNotificationCenter defaultCenter] addObserverForName:STATUS_CONNECTED_SLIDESHOW_RUNNING + object:nil + queue:mainQueue + usingBlock:^(NSNotification *note) { + [self performSegueWithIdentifier:@"slideShowSegue" sender:self]; + }]; +} + +@end diff --git a/ios/iosremote/iosremote/slideShowSwipeInList_ipad.h b/ios/iosremote/iosremote/slideShowSwipeInList_ipad.h new file mode 100644 index 000000000000..3bb1a5d5cd7a --- /dev/null +++ b/ios/iosremote/iosremote/slideShowSwipeInList_ipad.h @@ -0,0 +1,13 @@ +// +// slideShowSwipeInList~ipad.h +// iosremote +// +// Created by Siqi Liu on 7/27/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +@interface slideShowSwipeInList_ipad : UITableViewController + +- (void) didReceivePresentationStarted; + +@end
\ No newline at end of file diff --git a/ios/iosremote/iosremote/slideShowSwipeInList_ipad.m b/ios/iosremote/iosremote/slideShowSwipeInList_ipad.m new file mode 100644 index 000000000000..77c6258ff188 --- /dev/null +++ b/ios/iosremote/iosremote/slideShowSwipeInList_ipad.m @@ -0,0 +1,168 @@ +// +// slideShowSwipeInList~ipad.m +// iosremote +// +// Created by Siqi Liu on 7/27/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "slideShowSwipeInList_ipad.h" +#import "CommunicationManager.h" +#import "CommandInterpreter.h" +#import "SlideShow.h" +#import "CommandTransmitter.h" +#import "SWRevealViewController.h" +#import "slideShowPreviewTable_vc.h" +#import <QuartzCore/CALayer.h> + +@interface slideShowSwipeInList_ipad () + +@property (nonatomic, strong) CommunicationManager *comManager; +@property (nonatomic, strong) SlideShow *slideshow; +@property (nonatomic, strong) id slideChangedObserver; + +@end + +@implementation slideShowSwipeInList_ipad + +@synthesize comManager = _comManager; +@synthesize slideshow = _slideshow; +@synthesize slideChangedObserver = _slideChangedObserver; + +dispatch_queue_t backgroundQueue; + +- (void) handleBack:(id)sender +{ + [self.comManager.transmitter stopPresentation]; + [self.tableView reloadData]; +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (SlideShow *)slideshow +{ + return self.comManager.interpreter.slideShow; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.comManager = [CommunicationManager sharedComManager]; + self.slideshow.secondaryDelegate = self; + + UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Stop Presentation" + style:UIBarButtonItemStyleBordered + target:self + action:@selector(handleBack:)]; + [backButton setTintColor:[UIColor redColor]]; + self.navigationItem.leftBarButtonItem = backButton; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; + self.slideChangedObserver =[center addObserverForName:MSG_SLIDE_CHANGED + object:nil + queue:mainQueue + usingBlock:^(NSNotification *note) { + if ([self.tableView numberOfRowsInSection:0] > 0){ + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.slideshow.currentSlide inSection:0]; + [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; + [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; + } + }]; + UIImageView *bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"slideshowRail"]]; + [bgImageView setFrame:self.tableView.frame]; + + self.tableView.backgroundView = bgImageView; +} + +- (void)viewDidUnload +{ + [[NSNotificationCenter defaultCenter] removeObserver:self.slideChangedObserver]; + [super viewDidUnload]; +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void) viewWillAppear:(BOOL)animated +{ + [self.tableView reloadData]; + [super viewWillAppear:animated]; +} + +- (void) viewDidAppear:(BOOL)animated +{ + if ([self.comManager.interpreter.slideShow size] > 0) { + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.slideshow.currentSlide + inSection:0]; + [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; + [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; + } +} + +- (void) didReceivePresentationStarted +{ + self.slideshow.secondaryDelegate = self; + [self.tableView reloadData]; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; +} + + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return [self.slideshow size]; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section +{ + return @"Slides"; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"slide"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; + UILabel * slideNumber = (UILabel *)[cell viewWithTag:2]; + + // Starting 20, all tags are used for thumbnails in this sidebar + [cell setTag:20+indexPath.row]; + [self.slideshow getContentAtIndex:indexPath.row forView:cell]; + [slideNumber setText:[NSString stringWithFormat:@"%u", indexPath.row+1]]; + return cell; +} + +- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ + // Otherwise selection will disable background color and make slide number unreadable + if(cell.selected){ + UILabel *label = (UILabel *)[cell viewWithTag:2]; + if ([label backgroundColor]!=[UIColor lightGrayColor]) { + [label setBackgroundColor:[UIColor lightGrayColor]]; + } + } +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [self.comManager.transmitter gotoSlide:indexPath.row]; + [[[self.tableView cellForRowAtIndexPath:indexPath] viewWithTag:2] setBackgroundColor:[UIColor lightGrayColor]]; +} + +@end diff --git a/ios/iosremote/iosremote/slideShowSwipeInList_iphone.h b/ios/iosremote/iosremote/slideShowSwipeInList_iphone.h new file mode 100644 index 000000000000..2953e59591cb --- /dev/null +++ b/ios/iosremote/iosremote/slideShowSwipeInList_iphone.h @@ -0,0 +1,12 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#import <UIKit/UIKit.h> + +@interface slideShowSwipeInList : UITableViewController <UITableViewDataSource, UITableViewDelegate> + +@end diff --git a/ios/iosremote/iosremote/slideShowSwipeInList_iphone.m b/ios/iosremote/iosremote/slideShowSwipeInList_iphone.m new file mode 100644 index 000000000000..67db07ac3a36 --- /dev/null +++ b/ios/iosremote/iosremote/slideShowSwipeInList_iphone.m @@ -0,0 +1,183 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#import "slideShowSwipeInList_iphone.h" +#import "CommunicationManager.h" +#import "CommandInterpreter.h" +#import "SlideShow.h" +#import "CommandTransmitter.h" +#import "SWRevealViewController.h" +#import "slideShowPreviewTable_vc.h" +#import "ControlVariables.h" +#import "stopWatch.h" +#import <QuartzCore/CALayer.h> + +@interface slideShowSwipeInList () + +@property (nonatomic, strong) CommunicationManager *comManager; +@property (nonatomic, strong) SlideShow *slideshow; +@property (nonatomic, strong) stopWatch *stopWatch; + +@end + +@implementation slideShowSwipeInList + +@synthesize comManager = _comManager; +@synthesize slideshow = _slideshow; + +dispatch_queue_t backgroundQueue; + +- (void) viewDidLoad +{ + [super viewDidLoad]; + + self.comManager = [CommunicationManager sharedComManager]; + self.slideshow = self.comManager.interpreter.slideShow; + self.slideshow.secondaryDelegate = self; + + self.clearsSelectionOnViewWillAppear = NO; + + self.stopWatch = [[stopWatch alloc] init]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:KEY_TIMER]) { + [self.stopWatch start]; + } + + UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"slideshowRail.png"]]; + [tempImageView setFrame:self.tableView.frame]; + + self.tableView.backgroundView = tempImageView; +} + +- (void) viewDidAppear:(BOOL)animated +{ + if (!self.stopWatch.set) { + [self.stopWatch setupWithTableViewCell:[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]]; + } + [self.stopWatch updateStartButtonIcon]; + if ([self.comManager.interpreter.slideShow size] > 0) { + [self.stopWatch updateStartButtonIcon]; + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.slideshow.currentSlide + inSection:1]; + [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; + [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; + } +} + +- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender +{ + // configure the segue. + // in this case we dont swap out the front view controller, which is a UINavigationController. + // but we could.. + if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] ) + { + SWRevealViewControllerSegue* rvcs = (SWRevealViewControllerSegue*) segue; + + SWRevealViewController* rvc = self.revealViewController; + NSAssert( rvc != nil, @"oops! must have a revealViewController" ); + + NSAssert( [rvc.frontViewController isKindOfClass: [UINavigationController class]], @"oops! for this segue we want a permanent navigation controller in the front!" ); + + rvcs.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) { + + UINavigationController* nc = (UINavigationController*)rvc.frontViewController; + [nc setViewControllers: @[ dvc ] animated: YES ]; + + [rvc setFrontViewPosition: FrontViewPositionLeft animated: YES]; + }; + } +} + + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 2; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + // Section one used for stopwatch + if (section == 0) + return 1; + else + return [self.slideshow size]; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section +{ + switch (section) { + case 0: + return @"Stop Watch"; + break; + case 1: + return @"Slides"; + default: + break; + } + return nil; +} + +- (void) tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath +{ + [self performSegueWithIdentifier: @"sw_customized_segue" sender: [tableView cellForRowAtIndexPath: indexPath]]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section == 0) { + static NSString *CellIdentifier = @"stopWatch"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; + [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; + cell.contentView.backgroundColor = [UIColor whiteColor]; + return cell; + } else { + static NSString *CellIdentifier = @"slide"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; + UILabel * slideNumber = (UILabel *)[cell viewWithTag:2]; + + // Starting 20, all tags are used for thumbnails in this sidebar + [cell setTag:20+indexPath.row]; + [self.slideshow getContentAtIndex:indexPath.row forView:cell]; + [slideNumber setText:[NSString stringWithFormat:@"%u", indexPath.row+1]]; + + + cell.backgroundColor = [UIColor colorWithRed:0 green:0.40784314 blue:0.21568627 alpha:1.0]; + + return cell; + } +} + +- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ + // Otherwise selection will disable background color and make slide number unreadable + if(indexPath.section == 1 && cell.selected){ + UILabel *label = (UILabel *)[cell viewWithTag:2]; + if ([label backgroundColor]!=[UIColor lightGrayColor]) { + [label setBackgroundColor:[UIColor lightGrayColor]]; + } + } +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section == 0) + return; + [self.comManager.transmitter gotoSlide:indexPath.row]; + [[[self.tableView cellForRowAtIndexPath:indexPath] viewWithTag:2] setBackgroundColor:[UIColor lightGrayColor]]; + [self.revealViewController revealToggle: self]; +} + + +- (void)viewDidUnload { + [self setStopWatch:nil]; + [super viewDidUnload]; +} + +@end diff --git a/ios/iosremote/iosremote/slideShow_vc_iphone.h b/ios/iosremote/iosremote/slideShow_vc_iphone.h new file mode 100644 index 000000000000..67f3b6026c91 --- /dev/null +++ b/ios/iosremote/iosremote/slideShow_vc_iphone.h @@ -0,0 +1,31 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#import <UIKit/UIKit.h> +#import "SlideShow.h" + +@interface slideShow_vc : UIViewController <AsyncLoadHorizontalTableDelegate> + +- (IBAction)nextSlideAction:(id)sender; +- (IBAction)previousSlideAction:(id)sender; +- (IBAction)pointerAction:(id)sender; +- (IBAction)accPointerAction:(id)sender; + +@property (weak, nonatomic) IBOutlet UIView *notesView; +@property (weak, nonatomic) IBOutlet UIWebView *lecturer_notes; +@property (weak, nonatomic) IBOutlet UIImageView *slideView; +@property (weak, nonatomic) IBOutlet UIImageView *secondarySlideView; +@property (weak, nonatomic) IBOutlet UILabel *slideNumber; + +@property (weak, nonatomic) IBOutlet UIView *movingPointer; +@property (weak, nonatomic) IBOutlet UIImageView *touchPointerImage; +@property (weak, nonatomic) IBOutlet UIView *blockingView; +@property (weak, nonatomic) IBOutlet UIView *bottomView; +@property (weak, nonatomic) IBOutlet UIButton *pointerBtn; + +@end diff --git a/ios/iosremote/iosremote/slideShow_vc_iphone.m b/ios/iosremote/iosremote/slideShow_vc_iphone.m new file mode 100644 index 000000000000..6ddde90409d9 --- /dev/null +++ b/ios/iosremote/iosremote/slideShow_vc_iphone.m @@ -0,0 +1,401 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#import "slideShow_vc_iphone.h" +#import "SlideShow.h" +#import "UIViewTransitionCategory.h" +#import "CommunicationManager.h" +#import "SWRevealViewController.h" +#import "CommandInterpreter.h" +#import "CommandTransmitter.h" +#import "slideShowPreviewTable_vc.h" +#import <QuartzCore/QuartzCore.h> +#import <CoreMotion/CoreMotion.h> + + +#define CURRENT_SLIDE_IMAGEVIEW 1 +#define NEXT_SLIDE_IMAGEVIEW 2 +#define TOUCH_POINTER_VIEW 3 +#define CURRENT_SLIDE_NOTES 4 + +@interface slideShow_vc () + +@property (nonatomic, strong) CommunicationManager *comManager; +@property (nonatomic, strong) id slideShowImageNoteReadyObserver; +@property (nonatomic, strong) id slideShowFinishedObserver; +@property (nonatomic, strong) SlideShow* slideshow; + +@property BOOL pointerCalibrationOn; +@property CGPoint refLeftUpperGravity; +@property CGPoint refRightUpperGravity; +@property CGPoint refRightLowerGravity; + +// SWReveal Controller +@property (readwrite) IBOutlet UIBarButtonItem* revealButtonItem; + +@property int count; + +@end + +@implementation slideShow_vc + +@synthesize comManager = _comManager; +@synthesize slideShowImageNoteReadyObserver = _slideShowImageNoteReadyObserver; +@synthesize slideShowFinishedObserver = _slideShowFinishedObserver; +@synthesize slideshow = _slideshow; + +#pragma mark - Pointer + +- (CMMotionManager *)motionManager +{ + CMMotionManager *motionManager = nil; + + id appDelegate = [UIApplication sharedApplication].delegate; + + if ([appDelegate respondsToSelector:@selector(motionManager)]) { + motionManager = [appDelegate motionManager]; + } + + return motionManager; +} + +- (void)startMotionDetect +{ + // __block float stepMoveFactorX = 5; + // __block float stepMoveFactorY = 5; + // __block double refX, refY; + + [self.motionManager + startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init] + withHandler:^(CMAccelerometerData *data, NSError *error) + { + + dispatch_async(dispatch_get_main_queue(), + ^{ + CGRect rect = self.movingPointer.frame; + NSLog(@"x:%f y:%f z:%f", data.acceleration.x, data.acceleration.y, data.acceleration.z); + // Used to calibrate pointer based on initial position + // if (self.pointerCalibrationOn){ + // refX = data.acceleration.x; + // refY = data.acceleration.y; + // self.pointerCalibrationOn = NO; + // } + // float movetoX = rect.origin.x + ((data.acceleration.x - refX) * stepMoveFactorX); + + float movetoX = self.touchPointerImage.frame.origin.x + self.touchPointerImage.frame.size.width * ABS(data.acceleration.x - self.refLeftUpperGravity.x) / ABS(self.refRightUpperGravity.x - self.refLeftUpperGravity.x); + float maxX = self.touchPointerImage.frame.origin.x + self.touchPointerImage.frame.size.width - rect.size.width; + + // float movetoY = (rect.origin.y) + ((data.acceleration.y - refY) * stepMoveFactorY); + float movetoY = self.touchPointerImage.frame.origin.y + self.touchPointerImage.frame.size.height * ABS(data.acceleration.y - self.refRightUpperGravity.y) / ABS(self.refRightLowerGravity.y - self.refRightUpperGravity.y); + float maxY = self.touchPointerImage.frame.origin.y + self.touchPointerImage.frame.size.height; + + if ( movetoX > self.touchPointerImage.frame.origin.x && movetoX < maxX ) { + rect.origin.x = movetoX; + }; + + if ( movetoY > self.touchPointerImage.frame.origin.y && movetoY < maxY ) { + rect.origin.y = movetoY; + }; + + [UIView animateWithDuration:0 delay:0 + options:UIViewAnimationOptionCurveEaseIn + animations:^{ + self.movingPointer.frame = rect; + } + completion:nil + ]; + }); + }]; +} + +- (IBAction)accPointerAction:(id)sender{ + BOOL acc = [[NSUserDefaults standardUserDefaults] boolForKey:KEY_POINTER]; + if (!acc) { + static BOOL pointer = NO; + if (!pointer){ + [self startMotionDetect]; + [self.movingPointer setHidden:NO]; + } + else { + [self.motionManager stopAccelerometerUpdates]; + self.pointerCalibrationOn = NO; + [self.movingPointer setHidden:YES]; + } + pointer = !pointer; + } +} + +- (IBAction)pointerAction:(id)sender { + if (self.count == 0 || self.count == 1){ + CGPoint p; + p.x = [self.motionManager accelerometerData].acceleration.x; + p.y = [self.motionManager accelerometerData].acceleration.y; + self.refLeftUpperGravity = p; + if (self.count == 1) { + UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Calibration" + message:@"Upper left corner calibrated, now point your device to the upper right corner of the screen and click Pointer button again" + delegate:nil + cancelButtonTitle:@"OK" + otherButtonTitles:@"Help", nil]; + [message show]; + } + ++self.count; + } else if (self.count == 2 || self.count == 3) { + CGPoint p; + p.x = [self.motionManager accelerometerData].acceleration.x; + p.y = [self.motionManager accelerometerData].acceleration.y; + self.refRightUpperGravity = p; + if (self.count == 3) { + UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Calibration" + message:@"Upper right corner calibrated, now point your device to the lower right corner of the screen and click Pointer button again!" + delegate:nil + cancelButtonTitle:@"OK" + otherButtonTitles:@"Help", nil]; + [message show]; + } + ++self.count; + } else if (self.count == 4 || self.count == 5) { + CGPoint p; + p.x = [self.motionManager accelerometerData].acceleration.x; + p.y = [self.motionManager accelerometerData].acceleration.y; + self.refRightLowerGravity = p; + if (self.count == 5) { + UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Calibration" + message:@"Lower right corner calibrated, enjoy your pointer!" + delegate:nil + cancelButtonTitle:@"OK" + otherButtonTitles:@"Help", nil]; + [message show]; + } + ++self.count; + } else { + if ([self.touchPointerImage isHidden]){ + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.touchPointerImage]; + CGPoint p = self.view.center; + p.y -= 50; + self.touchPointerImage.center = p; + } + [self.touchPointerImage fadeInfadeOutwithDuration:0.0 maxAlpha:1.0]; + [self.blockingView fadeInfadeOutwithDuration:0.0 maxAlpha:0.7]; + } +} + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + UITouch *touch = [[event allTouches] anyObject]; + if (!self.touchPointerImage.isHidden){ + CGPoint loc = [touch locationInView:self.touchPointerImage]; + if (loc.x >= 0 && loc.x <= self.touchPointerImage.frame.size.width + && loc.y >= 0 && loc.y <= self.touchPointerImage.frame.size.height){ + CGPoint pointerInPercentage; + pointerInPercentage.x = loc.x / self.touchPointerImage.frame.size.width; + pointerInPercentage.y = loc.y / self.touchPointerImage.frame.size.height; + [self.comManager.transmitter setPointerVisibleAt:pointerInPercentage]; + + CGPoint p; + p.x = loc.x + self.touchPointerImage.frame.origin.x; + p.y = loc.y + self.touchPointerImage.frame.origin.y; + self.movingPointer.center = p; + [self.movingPointer setHidden:NO]; + } + } + + if ([touch view] == self.secondarySlideView) + { + // Change to the next slide when secondary slide is clicked + [self.comManager.transmitter gotoSlide:self.slideshow.currentSlide + 1]; + } +} + +- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event +{ + if (!self.touchPointerImage.isHidden){ + UITouch *touch = [[event allTouches] anyObject]; + CGPoint loc = [touch locationInView:self.touchPointerImage]; + if (loc.x >= 0 && loc.x <= self.touchPointerImage.frame.size.width + && loc.y >= self.movingPointer.frame.size.height && loc.y <= self.touchPointerImage.frame.size.height - self.movingPointer.frame.size.height) + { + CGPoint pointerInPercentage; + pointerInPercentage.x = loc.x / self.touchPointerImage.frame.size.width; + pointerInPercentage.y = loc.y / self.touchPointerImage.frame.size.height; + [self.comManager.transmitter pointerCoordination:pointerInPercentage]; + + CGPoint p; + p.x = loc.x + self.touchPointerImage.frame.origin.x; + p.y = loc.y + self.touchPointerImage.frame.origin.y; + self.movingPointer.center = p; + } + } +} + +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event +{ + [self.movingPointer setHidden:YES]; + [self.comManager.transmitter setPointerDismissed]; +} + +#pragma mark - System defaults + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +{ + return (interfaceOrientation == UIInterfaceOrientationPortrait); +} + +- (NSUInteger) supportedInterfaceOrientations +{ + return UIInterfaceOrientationMaskPortrait; +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (SlideShow *)slideshow +{ + return self.comManager.interpreter.slideShow; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + // Unique tag assignment. Don't use 0 as it's default. 0-10 for central VC + [self.slideView setTag:CURRENT_SLIDE_IMAGEVIEW]; + [self.secondarySlideView setTag:NEXT_SLIDE_IMAGEVIEW]; + [self.lecturer_notes setTag:CURRENT_SLIDE_NOTES]; + [self.touchPointerImage setTag:TOUCH_POINTER_VIEW]; + + self.comManager = [CommunicationManager sharedComManager]; + self.slideshow.delegate = self; + + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.slideView]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide+1 forView:self.secondarySlideView]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.lecturer_notes]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.touchPointerImage]; + [self.slideNumber setText:[NSString stringWithFormat:@"%u/%u", [self.slideshow currentSlide]+1, [self.slideshow size]]]; + + + UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Stop Presentation" + style:UIBarButtonItemStyleBordered + target:self + action:@selector(handleBack:)]; + [backButton setTintColor:[UIColor redColor]]; + self.revealViewController.navigationItem.leftBarButtonItem = backButton; + + self.revealButtonItem = [[UIBarButtonItem alloc] initWithImage: [UIImage imageNamed:@"more_icon.png"] + style:UIBarButtonItemStyleBordered + target:self.revealViewController + action:@selector( revealToggle: )]; + self.revealViewController.navigationItem.rightBarButtonItem = self.revealButtonItem; + [self.navigationController.navigationBar addGestureRecognizer: self.revealViewController.panGestureRecognizer]; + + self.pointerCalibrationOn = NO; + self.movingPointer.layer.cornerRadius = 3; + + BOOL acc = [[NSUserDefaults standardUserDefaults] boolForKey:KEY_POINTER]; + if (!acc) { + // Hook up acc detection + [self.pointerBtn addTarget:self action:@selector(pointerAction:) forControlEvents:UIControlEventTouchUpOutside]; + [self.pointerBtn addTarget:self action:@selector(pointerAction:) forControlEvents:UIControlEventTouchUpInside]; + } else { + // Disable all calibration functions for acc based pointer + self.count = INT_MAX; + } +} + +- (void) handleBack:(id)sender +{ + [self.comManager.transmitter stopPresentation]; + [self.navigationController popViewControllerAnimated:YES]; +} + + +- (void) viewDidAppear:(BOOL)animated +{ + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; + + self.slideShowImageNoteReadyObserver =[center addObserverForName:MSG_SLIDE_CHANGED + object:nil + queue:mainQueue + usingBlock:^(NSNotification *note) { + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.slideView]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.touchPointerImage]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide+1 forView:self.secondarySlideView]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.lecturer_notes]; + [self.slideNumber setText:[NSString stringWithFormat:@"%u/%u", [self.slideshow currentSlide]+1, [self.slideshow size]]]; + + }]; + + self.slideShowFinishedObserver = [center addObserverForName:STATUS_CONNECTED_NOSLIDESHOW + object:nil + queue:mainQueue + usingBlock:^(NSNotification *note) { + [self.navigationController popViewControllerAnimated:YES]; + }]; + self.slideView.layer.shadowColor = [[UIColor blackColor] CGColor]; + self.slideView.layer.shadowOpacity = 0.5; + self.slideView.layer.shadowRadius = 4.0; + self.slideView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f); + self.slideView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.slideView.bounds].CGPath; + self.slideView.clipsToBounds = NO; + + self.secondarySlideView.layer.shadowColor = [[UIColor blackColor] CGColor]; + self.secondarySlideView.layer.shadowOpacity = 0.5; + self.secondarySlideView.layer.shadowRadius = 4.0; + self.secondarySlideView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f); + self.secondarySlideView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.secondarySlideView.bounds].CGPath; + self.secondarySlideView.clipsToBounds = NO; + + // We calibrate once when presentation starts. needs a users alert to inform users to point at the center of the screen at the beginning + self.pointerCalibrationOn = YES; + + [super viewDidAppear:animated]; +} + +- (void) viewDidDisappear:(BOOL)animated +{ + self.count = 0; + [[NSNotificationCenter defaultCenter] removeObserver:self.slideShowFinishedObserver]; + [[NSNotificationCenter defaultCenter] removeObserver:self.slideShowImageNoteReadyObserver]; + [super viewDidDisappear:animated]; +} + + + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)viewDidUnload { + [self setLecturer_notes:nil]; + [self setSlideView:nil]; + [self setSlideNumber:nil]; + [self setSecondarySlideView:nil]; + [self setNotesView:nil]; + [self setMovingPointer:nil]; + [self setBlockingView:nil]; + [self setBottomView:nil]; + [self setPointerBtn:nil]; + [super viewDidUnload]; +} + +- (IBAction)nextSlideAction:(id)sender { + [[self.comManager transmitter] nextTransition]; +} + +- (IBAction)previousSlideAction:(id)sender { + [[self.comManager transmitter] previousTransition]; +} + +@end diff --git a/ios/iosremote/iosremote/stopWatch.h b/ios/iosremote/iosremote/stopWatch.h new file mode 100644 index 000000000000..bd0edde8e6ef --- /dev/null +++ b/ios/iosremote/iosremote/stopWatch.h @@ -0,0 +1,31 @@ +// +// stopWatch.h +// iosremote +// +// Created by Siqi Liu on 7/29/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import <Foundation/Foundation.h> + +#define TIMER_STATE_RUNNING 0 +#define TIMER_STATE_PAUSED 1 +#define TIMER_STATE_CLEARED 2 + +@interface stopWatch : NSObject + +// StopWatch +@property (strong, nonatomic) NSTimer *stopWatchTimer; +@property (strong, nonatomic) NSDate *startDate; +@property BOOL set; + +- (stopWatch *) initWithStartButton:(UIButton *)startButton + ClearButton:(UIButton *)clearButton + TimeLabel:(UILabel *)timeLabel; +- (void) setupWithTableViewCell:(UITableViewCell *)cell; + +- (void) start; +- (void) clear; +- (void) updateStartButtonIcon; + +@end diff --git a/ios/iosremote/iosremote/stopWatch.m b/ios/iosremote/iosremote/stopWatch.m new file mode 100644 index 000000000000..b955a12d1f87 --- /dev/null +++ b/ios/iosremote/iosremote/stopWatch.m @@ -0,0 +1,148 @@ +// +// stopWatch.m +// iosremote +// +// Created by Siqi Liu on 7/29/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "stopWatch.h" + +@interface stopWatch () + +@property NSTimeInterval lastInterval; +@property int state; +@property (weak, nonatomic) UIButton * startButton; +@property (weak, nonatomic) UIButton * clearButton; +@property (weak, nonatomic) UILabel * timeLabel; + +@end + +@implementation stopWatch +@synthesize startButton = _startButton; +@synthesize clearButton = _clearButton; +@synthesize timeLabel = _timeLabel; + +@synthesize lastInterval = _lastInterval; + +- (stopWatch *) init +{ + self = [super init]; + self.state = TIMER_STATE_CLEARED; + self.set = NO; + return self; +} + +- (stopWatch *) initWithStartButton:(UIButton *)startButton + ClearButton:(UIButton *)clearButton + TimeLabel:(UILabel *)timeLabel +{ + self = [self init]; + + self.startButton = startButton; + self.clearButton = clearButton; + self.timeLabel = timeLabel; + + [self setupActions]; + return self; +} + +- (void) setupWithTableViewCell:(UITableViewCell *)cell +{ + self.startButton = (UIButton *)[cell viewWithTag:2]; + self.clearButton = (UIButton *)[cell viewWithTag:3]; + self.timeLabel = (UILabel *)[cell viewWithTag:1]; + + [self setupActions]; +} + +- (void) setupActions +{ + [self.startButton addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside]; + [self.clearButton addTarget:self action:@selector(clear) forControlEvents:UIControlEventTouchUpInside]; + self.set = YES; +} + +- (void)updateTimer +{ + // Create date from the elapsed time + NSDate *currentDate = [NSDate date]; + NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:self.startDate] + self.lastInterval; + NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; + + // Create a date formatter + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"HH:mm:ss"]; + [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; + + // Format the elapsed time and set it to the label + NSString *timeString = [dateFormatter stringFromDate:timerDate]; + self.timeLabel.text = timeString; +} + + +- (void) start +{ + switch (self.state) { + case TIMER_STATE_RUNNING: + self.state = TIMER_STATE_PAUSED; + [self.stopWatchTimer invalidate]; + self.lastInterval += [[NSDate date] timeIntervalSinceDate:self.startDate]; + break; + case TIMER_STATE_PAUSED: + self.state = TIMER_STATE_RUNNING; + self.startDate = [NSDate date]; + self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 + target:self + selector:@selector(updateTimer) + userInfo:nil + repeats:YES]; + break; + case TIMER_STATE_CLEARED: + self.state = TIMER_STATE_RUNNING; + self.startDate = [NSDate date]; + // Create the stop watch timer that fires every 100 ms + self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 + target:self + selector:@selector(updateTimer) + userInfo:nil + repeats:YES]; + break; + default: + break; + } + + [self updateStartButtonIcon]; +} + +- (void) updateStartButtonIcon +{ + switch (self.state) { + case TIMER_STATE_RUNNING: + [self.startButton setImage:[UIImage imageNamed:@"timer_pause_btn"] forState:UIControlStateNormal]; + break; + case TIMER_STATE_PAUSED: + [self.startButton setImage:[UIImage imageNamed:@"timer_resume_btn"] forState:UIControlStateNormal]; + break; + case TIMER_STATE_CLEARED: + [self.startButton setImage:[UIImage imageNamed:@"timer_start_btn"] forState:UIControlStateNormal]; + break; + default: + break; + } +} + +- (void) clear +{ + [self.stopWatchTimer invalidate]; + self.stopWatchTimer = nil; + self.startDate = [NSDate date]; + self.lastInterval = 0; + self.state = TIMER_STATE_CLEARED; + + [self.startButton setImage:[UIImage imageNamed:@"timer_start_btn"] forState:UIControlStateNormal]; + [self updateTimer]; +} + +@end + diff --git a/ios/iosremote/iosremote_ipad_icon.png b/ios/iosremote/iosremote_ipad_icon.png Binary files differnew file mode 100644 index 000000000000..859d53a87941 --- /dev/null +++ b/ios/iosremote/iosremote_ipad_icon.png diff --git a/ios/iosremote/iosremote_ipad_icon@2x.png b/ios/iosremote/iosremote_ipad_icon@2x.png Binary files differnew file mode 100644 index 000000000000..9c1da2a53a8d --- /dev/null +++ b/ios/iosremote/iosremote_ipad_icon@2x.png diff --git a/ios/iosremote/iosremote_iphone_icon.png b/ios/iosremote/iosremote_iphone_icon.png Binary files differnew file mode 100644 index 000000000000..e976b082bc01 --- /dev/null +++ b/ios/iosremote/iosremote_iphone_icon.png diff --git a/ios/iosremote/iosremote_iphone_icon@2x.png b/ios/iosremote/iosremote_iphone_icon@2x.png Binary files differnew file mode 100644 index 000000000000..cb045bc0cf56 --- /dev/null +++ b/ios/iosremote/iosremote_iphone_icon@2x.png diff --git a/ios/iosremote/libO_icon.png b/ios/iosremote/libO_icon.png Binary files differnew file mode 100644 index 000000000000..34bd3dbbb3aa --- /dev/null +++ b/ios/iosremote/libO_icon.png diff --git a/ios/iosremote/nextButton_normal.png b/ios/iosremote/nextButton_normal.png Binary files differnew file mode 100644 index 000000000000..b3a48886da66 --- /dev/null +++ b/ios/iosremote/nextButton_normal.png diff --git a/ios/iosremote/nextButton_normal@2x.png b/ios/iosremote/nextButton_normal@2x.png Binary files differnew file mode 100644 index 000000000000..dbe6dbd58a04 --- /dev/null +++ b/ios/iosremote/nextButton_normal@2x.png diff --git a/ios/iosremote/nextButton_pressed.png b/ios/iosremote/nextButton_pressed.png Binary files differnew file mode 100644 index 000000000000..8ed46c1c5171 --- /dev/null +++ b/ios/iosremote/nextButton_pressed.png diff --git a/ios/iosremote/nextButton_pressed@2x.png b/ios/iosremote/nextButton_pressed@2x.png Binary files differnew file mode 100644 index 000000000000..48e5b3184a01 --- /dev/null +++ b/ios/iosremote/nextButton_pressed@2x.png diff --git a/ios/iosremote/previousButton_normal.png b/ios/iosremote/previousButton_normal.png Binary files differnew file mode 100644 index 000000000000..6292ac9acb0f --- /dev/null +++ b/ios/iosremote/previousButton_normal.png diff --git a/ios/iosremote/previousButton_normal@2x.png b/ios/iosremote/previousButton_normal@2x.png Binary files differnew file mode 100644 index 000000000000..b8f2ac7fd9b3 --- /dev/null +++ b/ios/iosremote/previousButton_normal@2x.png diff --git a/ios/iosremote/previousButton_pressed.png b/ios/iosremote/previousButton_pressed.png Binary files differnew file mode 100644 index 000000000000..5759e70bc6bf --- /dev/null +++ b/ios/iosremote/previousButton_pressed.png diff --git a/ios/iosremote/previousButton_pressed@2x.png b/ios/iosremote/previousButton_pressed@2x.png Binary files differnew file mode 100644 index 000000000000..7c10564226e0 --- /dev/null +++ b/ios/iosremote/previousButton_pressed@2x.png diff --git a/ios/iosremote/slideshowRail.png b/ios/iosremote/slideshowRail.png Binary files differnew file mode 100644 index 000000000000..db4a03cae739 --- /dev/null +++ b/ios/iosremote/slideshowRail.png diff --git a/ios/iosremote/slideshowRail@2x.png b/ios/iosremote/slideshowRail@2x.png Binary files differnew file mode 100644 index 000000000000..f736b58ad81a --- /dev/null +++ b/ios/iosremote/slideshowRail@2x.png |