mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-19 20:25:31 +00:00
Added competitor and mark training view controller
This commit is contained in:
@@ -329,7 +329,7 @@
|
||||
C85DB82C1F31AB1A009559CE /* ForgotPasswordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C85DB82B1F31AB1A009559CE /* ForgotPasswordViewController.swift */; };
|
||||
C85DB82E1F31D804009559CE /* SignUpController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C85DB82D1F31D804009559CE /* SignUpController.swift */; };
|
||||
C8603D511C52892A002B2F28 /* Acknowledgements.markdown in Resources */ = {isa = PBXBuildFile; fileRef = C8603D491C528832002B2F28 /* Acknowledgements.markdown */; };
|
||||
C867BD091F4B0274007E78E0 /* TrainingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C867BD081F4B0274007E78E0 /* TrainingViewController.swift */; };
|
||||
C867BD091F4B0274007E78E0 /* TrainingCompetitorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C867BD081F4B0274007E78E0 /* TrainingCompetitorViewController.swift */; };
|
||||
C867BD0B1F4B0290007E78E0 /* CreateTrainingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C867BD0A1F4B0290007E78E0 /* CreateTrainingViewController.swift */; };
|
||||
C867BD0D1F4B0A0E007E78E0 /* RegattaCoreDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C867BD0C1F4B0A0E007E78E0 /* RegattaCoreDataManager.swift */; };
|
||||
C867BD0F1F4B0A4B007E78E0 /* TrainingCoreDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C867BD0E1F4B0A4B007E78E0 /* TrainingCoreDataManager.swift */; };
|
||||
@@ -367,6 +367,7 @@
|
||||
C8CF22A31F6194C600A01E0A /* RegattaCheckInController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CF22A21F6194C600A01E0A /* RegattaCheckInController.swift */; };
|
||||
C8CF22A51F61965C00A01E0A /* TrainingCheckInController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CF22A41F61965C00A01E0A /* TrainingCheckInController.swift */; };
|
||||
C8CF22A91F62780C00A01E0A /* CheckInDataCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CF22A81F62780C00A01E0A /* CheckInDataCollector.swift */; };
|
||||
C8CF22AD1F668BAB00A01E0A /* TrainingMarkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CF22AC1F668BAB00A01E0A /* TrainingMarkViewController.swift */; };
|
||||
C8D5E81D1D479FA800DA0D61 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C8D5E81C1D479FA800DA0D61 /* Main.storyboard */; };
|
||||
C8E0BD0A1F39A08B002FCCA5 /* FormularViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E0BD091F39A08B002FCCA5 /* FormularViewController.swift */; };
|
||||
C8E0BD0D1F39ADAD002FCCA5 /* KeychainPasswordItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E0BD0C1F39ADAD002FCCA5 /* KeychainPasswordItem.swift */; };
|
||||
@@ -738,7 +739,7 @@
|
||||
C85DB82D1F31D804009559CE /* SignUpController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignUpController.swift; sourceTree = "<group>"; };
|
||||
C85FAA501D4F84460087C2A2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
C8603D491C528832002B2F28 /* Acknowledgements.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = Acknowledgements.markdown; sourceTree = "<group>"; };
|
||||
C867BD081F4B0274007E78E0 /* TrainingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingViewController.swift; sourceTree = "<group>"; };
|
||||
C867BD081F4B0274007E78E0 /* TrainingCompetitorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingCompetitorViewController.swift; sourceTree = "<group>"; };
|
||||
C867BD0A1F4B0290007E78E0 /* CreateTrainingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateTrainingViewController.swift; sourceTree = "<group>"; };
|
||||
C867BD0C1F4B0A0E007E78E0 /* RegattaCoreDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegattaCoreDataManager.swift; sourceTree = "<group>"; };
|
||||
C867BD0E1F4B0A4B007E78E0 /* TrainingCoreDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingCoreDataManager.swift; sourceTree = "<group>"; };
|
||||
@@ -777,6 +778,7 @@
|
||||
C8CF22A21F6194C600A01E0A /* RegattaCheckInController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegattaCheckInController.swift; sourceTree = "<group>"; };
|
||||
C8CF22A41F61965C00A01E0A /* TrainingCheckInController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingCheckInController.swift; sourceTree = "<group>"; };
|
||||
C8CF22A81F62780C00A01E0A /* CheckInDataCollector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckInDataCollector.swift; sourceTree = "<group>"; };
|
||||
C8CF22AC1F668BAB00A01E0A /* TrainingMarkViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingMarkViewController.swift; sourceTree = "<group>"; };
|
||||
C8D5E81C1D479FA800DA0D61 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; };
|
||||
C8D938B11EB9AFDB00B1B4BC /* CoreData 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "CoreData 3.xcdatamodel"; sourceTree = "<group>"; };
|
||||
C8E0BD091F39A08B002FCCA5 /* FormularViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormularViewController.swift; sourceTree = "<group>"; };
|
||||
@@ -1309,10 +1311,11 @@
|
||||
C867BD071F4AFE79007E78E0 /* Training */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C867BD081F4B0274007E78E0 /* TrainingViewController.swift */,
|
||||
C867BD081F4B0274007E78E0 /* TrainingCompetitorViewController.swift */,
|
||||
C867BD0A1F4B0290007E78E0 /* CreateTrainingViewController.swift */,
|
||||
C867BD101F4C44E5007E78E0 /* TrainingTableViewController.swift */,
|
||||
C8E0D3031F5808E3001EEF5C /* TrainingTableViewCell.swift */,
|
||||
C8CF22AC1F668BAB00A01E0A /* TrainingMarkViewController.swift */,
|
||||
);
|
||||
name = Training;
|
||||
sourceTree = "<group>";
|
||||
@@ -1978,7 +1981,7 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
C867BD091F4B0274007E78E0 /* TrainingViewController.swift in Sources */,
|
||||
C867BD091F4B0274007E78E0 /* TrainingCompetitorViewController.swift in Sources */,
|
||||
C85DB82A1F31AAFD009559CE /* LoginViewController.swift in Sources */,
|
||||
C8F71EDA1D8691F700826DE4 /* AFHTTPRequestOperation.m in Sources */,
|
||||
7F1875B31A10F1B800C25BE0 /* TrackingViewController.swift in Sources */,
|
||||
@@ -2004,6 +2007,7 @@
|
||||
C8F71EEE1D8691F700826DE4 /* UIProgressView+AFNetworking.m in Sources */,
|
||||
C8CF22A91F62780C00A01E0A /* CheckInDataCollector.swift in Sources */,
|
||||
C85DB82E1F31D804009559CE /* SignUpController.swift in Sources */,
|
||||
C8CF22AD1F668BAB00A01E0A /* TrainingMarkViewController.swift in Sources */,
|
||||
7F44095B19F65B5B0021BF22 /* CoreData.xcdatamodeld in Sources */,
|
||||
C89C5FD01D06CF46002AAAD2 /* TrackingViewModeCell.swift in Sources */,
|
||||
C8FF5B7C1EB8CF2C00CF9764 /* MarkData.swift in Sources */,
|
||||
|
||||
@@ -20,12 +20,12 @@ protocol CheckInTableViewControllerDelegate: class {
|
||||
func checkInTableViewController(
|
||||
_ controller: CheckInTableViewController,
|
||||
prepareForSegue segue: UIStoryboardSegue,
|
||||
andCompetitorCheckIn checkIn: CompetitorCheckIn)
|
||||
andCompetitorCheckIn competitorCheckIn: CompetitorCheckIn)
|
||||
|
||||
func checkInTableViewController(
|
||||
_ controller: CheckInTableViewController,
|
||||
prepareForSegue segue: UIStoryboardSegue,
|
||||
andMarkCheckIn checkIn: MarkCheckIn)
|
||||
andMarkCheckIn markCheckIn: MarkCheckIn)
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -318,7 +318,7 @@
|
||||
<scene sceneID="e3W-CJ-soQ">
|
||||
<objects>
|
||||
<navigationController storyboardIdentifier="rootViewController" id="pqQ-jd-OwW" sceneMemberID="viewController">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" translucent="NO" id="x3H-m5-yJB">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" misplaced="YES" translucent="NO" id="x3H-m5-yJB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
@@ -456,7 +456,7 @@
|
||||
<scene sceneID="6Ty-cK-spl">
|
||||
<objects>
|
||||
<navigationController id="Pn3-0n-ZdQ" sceneMemberID="viewController">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" translucent="NO" id="McN-2f-sK6">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" misplaced="YES" translucent="NO" id="McN-2f-sK6">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
@@ -466,7 +466,7 @@
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Lo3-i9-FWc" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1977" y="-2507"/>
|
||||
<point key="canvasLocation" x="1970" y="-3337"/>
|
||||
</scene>
|
||||
<!--Create Training View Controller-->
|
||||
<scene sceneID="zai-sg-LQl">
|
||||
@@ -557,12 +557,12 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="kAU-Am-SqM" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="2737" y="-2507"/>
|
||||
<point key="canvasLocation" x="2730" y="-3337"/>
|
||||
</scene>
|
||||
<!--Training View Controller-->
|
||||
<!--Training Competitor View Controller-->
|
||||
<scene sceneID="Zlq-oI-kok">
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="TrainingViewController" id="smT-3p-ZYf" customClass="TrainingViewController" customModule="SAPTracker" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<viewController storyboardIdentifier="TrainingCompetitorViewController" id="smT-3p-ZYf" customClass="TrainingCompetitorViewController" customModule="SAPTracker" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="dS6-Pi-1JW"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="21h-Jd-SOp"/>
|
||||
@@ -590,6 +590,7 @@
|
||||
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<action selector="startTrackingButtonTapped:" destination="smT-3p-ZYf" eventType="touchUpInside" id="KSM-gG-Y7S"/>
|
||||
<action selector="startTrackingButtonTapped:" destination="G3a-SV-Maf" eventType="touchUpInside" id="SFR-Rt-bll"/>
|
||||
<action selector="startTrackingButtonTapped:" destination="dMx-RA-QpG" eventType="touchUpInside" id="bRI-BL-p1Q"/>
|
||||
</connections>
|
||||
@@ -615,13 +616,24 @@
|
||||
<action selector="stopTrackingButtonTapped:" destination="eHd-jN-WkS" eventType="touchUpInside" id="CbI-vx-D3U"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" minimumFontSize="12" adjustsLetterSpacingToFitWidth="YES" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="68H-E2-rnx">
|
||||
<rect key="frame" x="129" y="290" width="117" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="WgF-06-lB0"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="21"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="IcA-7p-xnO" firstAttribute="top" secondItem="dS6-Pi-1JW" secondAttribute="bottom" constant="20" id="79z-P4-rrG"/>
|
||||
<constraint firstItem="68H-E2-rnx" firstAttribute="centerX" secondItem="N8Q-Eb-vTK" secondAttribute="centerX" id="KcB-xe-4h1"/>
|
||||
<constraint firstItem="21h-Jd-SOp" firstAttribute="top" secondItem="e6j-2H-QrX" secondAttribute="bottom" constant="20" id="M06-ZN-rJh"/>
|
||||
<constraint firstItem="IcA-7p-xnO" firstAttribute="leading" secondItem="N8Q-Eb-vTK" secondAttribute="leading" constant="20" id="QUL-qN-oPm"/>
|
||||
<constraint firstAttribute="trailing" secondItem="e6j-2H-QrX" secondAttribute="trailing" constant="20" id="YVj-G3-ayZ"/>
|
||||
<constraint firstItem="68H-E2-rnx" firstAttribute="centerY" secondItem="N8Q-Eb-vTK" secondAttribute="centerY" id="sXL-Me-s1c"/>
|
||||
<constraint firstItem="e6j-2H-QrX" firstAttribute="leading" secondItem="N8Q-Eb-vTK" secondAttribute="leading" constant="20" id="v4F-XR-tVW"/>
|
||||
<constraint firstAttribute="trailing" secondItem="IcA-7p-xnO" secondAttribute="trailing" constant="20" id="wZG-Wc-bNU"/>
|
||||
</constraints>
|
||||
@@ -635,12 +647,14 @@
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="startTrackingButton" destination="e6j-2H-QrX" id="nhE-ml-oLW"/>
|
||||
<outlet property="trainingNameLabel" destination="68H-E2-rnx" id="1p1-q8-8mJ"/>
|
||||
<segue destination="I54-NN-JAf" kind="presentation" identifier="Tracking" id="gEw-ml-Ejg"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="b6N-3i-Dul" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1977" y="-1808"/>
|
||||
<point key="canvasLocation" x="1978" y="-1810"/>
|
||||
</scene>
|
||||
<!--Training Table View Controller-->
|
||||
<scene sceneID="EFQ-Uc-xDt">
|
||||
@@ -808,7 +822,7 @@
|
||||
<segue destination="dfN-Ch-vpm" kind="presentation" identifier="About" id="TEI-KO-T29"/>
|
||||
<segue destination="4Fb-v3-mkB" kind="presentation" identifier="Settings" id="Xy1-6R-10o"/>
|
||||
<segue destination="smT-3p-ZYf" kind="show" identifier="Competitor" id="VVV-tB-IvR"/>
|
||||
<segue destination="smT-3p-ZYf" kind="show" identifier="Mark" id="ASm-Gm-LTi"/>
|
||||
<segue destination="IkV-3c-dLR" kind="show" identifier="Mark" id="JpW-Ha-tNO"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="1Kb-cO-cLT" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
@@ -1372,7 +1386,7 @@
|
||||
<scene sceneID="s4S-5p-4o1">
|
||||
<objects>
|
||||
<navigationController id="I54-NN-JAf" sceneMemberID="viewController">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" translucent="NO" id="Qb2-vc-6Pl">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" misplaced="YES" translucent="NO" id="Qb2-vc-6Pl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
@@ -1472,13 +1486,13 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Status Title Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="r6d-OU-cRI">
|
||||
<rect key="frame" x="20" y="15" width="134.5" height="23.5"/>
|
||||
<rect key="frame" x="20" y="14.5" width="134.5" height="23.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Status Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="5Xu-6g-tqP">
|
||||
<rect key="frame" x="259" y="15" width="96" height="23.5"/>
|
||||
<rect key="frame" x="259" y="14.5" width="96" height="23.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
@@ -1504,13 +1518,13 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Mode Title Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="Xww-rc-pOA">
|
||||
<rect key="frame" x="20" y="15" width="130.5" height="23.5"/>
|
||||
<rect key="frame" x="20" y="14.5" width="130.5" height="23.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Mode Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="tJY-RR-vpe">
|
||||
<rect key="frame" x="262" y="15" width="93" height="23.5"/>
|
||||
<rect key="frame" x="262" y="14.5" width="93" height="23.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
@@ -1536,13 +1550,13 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="GPS Fixes Title Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="Ujw-jg-ilY">
|
||||
<rect key="frame" x="20" y="15" width="161" height="23.5"/>
|
||||
<rect key="frame" x="20" y="14.5" width="161" height="23.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="GPS Fixes Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="dz3-w7-CCh">
|
||||
<rect key="frame" x="232" y="15" width="123" height="23.5"/>
|
||||
<rect key="frame" x="232" y="14.5" width="123" height="23.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
@@ -1568,13 +1582,13 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="GPS Accuracy Title Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="Z1d-5I-pbj">
|
||||
<rect key="frame" x="20" y="15" width="191.5" height="23.5"/>
|
||||
<rect key="frame" x="20" y="14.5" width="191.5" height="23.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="GPS Accuracy Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DiM-MR-SGV">
|
||||
<rect key="frame" x="181.5" y="15" width="153.5" height="23.5"/>
|
||||
<rect key="frame" x="181.5" y="14.5" width="153.5" height="23.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@@ -1686,7 +1700,7 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Value Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="48" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="mUm-EE-6Is" userLabel="Time Label">
|
||||
<rect key="frame" x="3" y="244" width="369" height="98.5"/>
|
||||
<rect key="frame" x="3" y="243.5" width="369" height="98.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans-Light" family="Open Sans" pointSize="72"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@@ -1728,7 +1742,7 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Value Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="l5u-i3-029">
|
||||
<rect key="frame" x="3" y="244" width="369" height="98.5"/>
|
||||
<rect key="frame" x="3" y="243.5" width="369" height="98.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans-Light" family="Open Sans" pointSize="72"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@@ -1769,7 +1783,7 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Value Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sGK-xV-9a0">
|
||||
<rect key="frame" x="3" y="244" width="369" height="98.5"/>
|
||||
<rect key="frame" x="3" y="243.5" width="369" height="98.5"/>
|
||||
<fontDescription key="fontDescription" name="OpenSans-Light" family="Open Sans" pointSize="72"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@@ -2019,7 +2033,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="vvK-XG-FQT" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1582" y="2046"/>
|
||||
<point key="canvasLocation" x="1582" y="2121"/>
|
||||
</scene>
|
||||
<!--Settings View Controller-->
|
||||
<scene sceneID="yOw-OU-u8M">
|
||||
@@ -2134,7 +2148,7 @@
|
||||
<objects>
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="4Fb-v3-mkB" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" translucent="NO" id="opw-zV-Qak">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" misplaced="YES" translucent="NO" id="opw-zV-Qak">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
@@ -2152,7 +2166,7 @@
|
||||
<objects>
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="dfN-Ch-vpm" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" translucent="NO" id="IvG-lp-FEV">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" misplaced="YES" translucent="NO" id="IvG-lp-FEV">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
@@ -2220,7 +2234,7 @@
|
||||
<objects>
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="Njg-ZD-Ycd" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="bNh-Bg-ROM">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" misplaced="YES" id="bNh-Bg-ROM">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
@@ -2233,6 +2247,102 @@
|
||||
</objects>
|
||||
<point key="canvasLocation" x="2737" y="-1116"/>
|
||||
</scene>
|
||||
<!--Training Mark View Controller-->
|
||||
<scene sceneID="Mys-dP-aQE">
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="TrainingMarkViewController" id="IkV-3c-dLR" customClass="TrainingMarkViewController" customModule="SAPTracker" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="myM-oT-G3d"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="U4p-oA-QT1"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="ybT-0Q-H2L" customClass="GradientView" customModule="SAPTracker" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="64" width="375" height="603"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1px-gI-O3d">
|
||||
<rect key="frame" x="20" y="501" width="335" height="82"/>
|
||||
<color key="backgroundColor" red="0.054901960780000002" green="0.46666666670000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="82" id="ZTd-z0-4ud">
|
||||
<variation key="heightClass=compact" constant="62"/>
|
||||
</constraint>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="21"/>
|
||||
<state key="normal" title="Start Tracking Button">
|
||||
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</state>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="1"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<action selector="startTrackingButtonTapped:" destination="dMx-RA-QpG" eventType="touchUpInside" id="ROG-Hj-lh9"/>
|
||||
<action selector="startTrackingButtonTapped:" destination="IkV-3c-dLR" eventType="touchUpInside" id="eD0-gv-wEB"/>
|
||||
<action selector="startTrackingButtonTapped:" destination="G3a-SV-Maf" eventType="touchUpInside" id="l3U-Dm-d2C"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="auN-7A-IFz">
|
||||
<rect key="frame" x="20" y="20" width="335" height="82"/>
|
||||
<color key="backgroundColor" red="0.80392156859999997" green="0.12549019610000001" blue="0.1058823529" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="82" id="f7K-7g-EDO"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="21"/>
|
||||
<state key="normal" title="Stop Training Button">
|
||||
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</state>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="5"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<action selector="stopTrackingButtonTapped:" destination="eHd-jN-WkS" eventType="touchUpInside" id="R2e-Xh-jLd"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" minimumFontSize="12" adjustsLetterSpacingToFitWidth="YES" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="GU1-ro-ifJ">
|
||||
<rect key="frame" x="129" y="290.5" width="117" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="DyJ-y6-cz0"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="21"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="auN-7A-IFz" secondAttribute="trailing" constant="20" id="5b3-qr-CCg"/>
|
||||
<constraint firstItem="GU1-ro-ifJ" firstAttribute="centerY" secondItem="ybT-0Q-H2L" secondAttribute="centerY" id="Msd-UG-QCb"/>
|
||||
<constraint firstItem="auN-7A-IFz" firstAttribute="top" secondItem="myM-oT-G3d" secondAttribute="bottom" constant="20" id="NJ5-i9-Uwr"/>
|
||||
<constraint firstItem="1px-gI-O3d" firstAttribute="leading" secondItem="ybT-0Q-H2L" secondAttribute="leading" constant="20" id="dQf-w7-kHX"/>
|
||||
<constraint firstItem="auN-7A-IFz" firstAttribute="leading" secondItem="ybT-0Q-H2L" secondAttribute="leading" constant="20" id="fpn-MI-CQW"/>
|
||||
<constraint firstItem="U4p-oA-QT1" firstAttribute="top" secondItem="1px-gI-O3d" secondAttribute="bottom" constant="20" id="sjU-yi-3nj"/>
|
||||
<constraint firstItem="GU1-ro-ifJ" firstAttribute="centerX" secondItem="ybT-0Q-H2L" secondAttribute="centerX" id="uY7-fM-oW0"/>
|
||||
<constraint firstAttribute="trailing" secondItem="1px-gI-O3d" secondAttribute="trailing" constant="20" id="wD2-ct-TOJ"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="firstColor">
|
||||
<color key="value" red="0.87058823529999996" green="0.94509803920000002" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="secondColor">
|
||||
<color key="value" red="0.86274509799999999" green="0.89019607840000003" blue="0.92156862750000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="startTrackingButton" destination="1px-gI-O3d" id="OWA-Ao-RGV"/>
|
||||
<outlet property="trainingNameLabel" destination="GU1-ro-ifJ" id="9wI-5l-XLF"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="7zr-QD-wnW" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1970" y="-2582"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="DE.png" width="64" height="64"/>
|
||||
@@ -2245,10 +2355,9 @@
|
||||
<image name="settings" width="22" height="22"/>
|
||||
</resources>
|
||||
<inferredMetricsTieBreakers>
|
||||
<segue reference="fgS-yf-c3u"/>
|
||||
<segue reference="TEI-KO-T29"/>
|
||||
<segue reference="Xy1-6R-10o"/>
|
||||
<segue reference="ASm-Gm-LTi"/>
|
||||
<segue reference="dH2-8c-PlZ"/>
|
||||
<segue reference="DI8-aY-hHi"/>
|
||||
<segue reference="gEw-ml-Ejg"/>
|
||||
</inferredMetricsTieBreakers>
|
||||
<color key="tintColor" red="0.0" green="0.61568627450980395" blue="0.8784313725490196" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</document>
|
||||
|
||||
@@ -292,16 +292,14 @@ extension RegattaCheckInTableViewController: CheckInTableViewControllerDelegate
|
||||
regattaCheckInTableViewCell.competitorLabel.text = checkIn.name
|
||||
}
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, prepareForSegue segue: UIStoryboardSegue, andCompetitorCheckIn checkIn: CompetitorCheckIn) {
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, prepareForSegue segue: UIStoryboardSegue, andCompetitorCheckIn competitorCheckIn: CompetitorCheckIn) {
|
||||
guard let competitorVC = segue.destination as? CompetitorViewController else { return }
|
||||
guard let competitorCheckIn = segueCheckIn as? CompetitorCheckIn else { return }
|
||||
competitorVC.competitorCheckIn = competitorCheckIn
|
||||
competitorVC.coreDataManager = coreDataManager
|
||||
}
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, prepareForSegue segue: UIStoryboardSegue, andMarkCheckIn checkIn: MarkCheckIn) {
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, prepareForSegue segue: UIStoryboardSegue, andMarkCheckIn markCheckIn: MarkCheckIn) {
|
||||
guard let markVC = segue.destination as? MarkViewController else { return }
|
||||
guard let markCheckIn = segueCheckIn as? MarkCheckIn else { return }
|
||||
markVC.markCheckIn = markCheckIn
|
||||
markVC.coreDataManager = coreDataManager
|
||||
}
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
//
|
||||
// TrainingCompetitorViewController.swift
|
||||
// SAPTracker
|
||||
//
|
||||
// Created by Raimund Wege on 21.08.17.
|
||||
// Copyright © 2017 com.sap.sailing. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class TrainingCompetitorViewController: SessionViewController {
|
||||
|
||||
weak var competitorCheckIn: CompetitorCheckIn!
|
||||
weak var coreDataManager: CoreDataManager!
|
||||
|
||||
@IBOutlet weak var trainingNameLabel: UILabel!
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
delegate = self
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
refresh()
|
||||
}
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
fileprivate func setup() {
|
||||
setupButtons()
|
||||
setupLocalization()
|
||||
setupNavigationBar()
|
||||
}
|
||||
|
||||
fileprivate func setupButtons() {
|
||||
startTrackingButton.setBackgroundImage(Images.GreenHighlighted, for: .highlighted)
|
||||
}
|
||||
|
||||
fileprivate func setupLocalization() {
|
||||
startTrackingButton.setTitle(Translation.CompetitorView.StartTrackingButton.Title.String, for: .normal)
|
||||
}
|
||||
|
||||
fileprivate func setupNavigationBar() {
|
||||
navigationItem.titleView = TitleView(title: competitorCheckIn.event.name, subtitle: competitorCheckIn.leaderboard.name)
|
||||
navigationController?.navigationBar.setNeedsLayout()
|
||||
}
|
||||
|
||||
// MARK: - Update
|
||||
|
||||
fileprivate func update() {
|
||||
competitorSessionController.update { [weak self] in
|
||||
self?.refresh()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Refresh
|
||||
|
||||
fileprivate func refresh() {
|
||||
trainingNameLabel.text = competitorCheckIn.event.name
|
||||
}
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
@IBAction func optionButtonTapped(_ sender: AnyObject) {
|
||||
let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
|
||||
if let popoverController = alertController.popoverPresentationController {
|
||||
popoverController.barButtonItem = sender as? UIBarButtonItem
|
||||
}
|
||||
let settingsAction = UIAlertAction(title: Translation.SettingsView.Title.String, style: .default) { [weak self] action in
|
||||
self?.performSegue(withIdentifier: Segue.Settings, sender: self)
|
||||
}
|
||||
let checkOutAction = UIAlertAction(title: Translation.CompetitorView.OptionSheet.CheckOutAction.Title.String, style: .default) { [weak self] action in
|
||||
self?.checkOut()
|
||||
}
|
||||
let updateAction = UIAlertAction(title: Translation.CompetitorView.OptionSheet.UpdateAction.Title.String, style: .default) { [weak self] action in
|
||||
self?.update()
|
||||
}
|
||||
let aboutAction = UIAlertAction(title: Translation.Common.Info.String, style: .default) { [weak self] action in
|
||||
self?.performSegue(withIdentifier: Segue.About, sender: alertController)
|
||||
}
|
||||
let cancelAction = UIAlertAction(title: Translation.Common.Cancel.String, style: .cancel, handler: nil)
|
||||
alertController.addAction(settingsAction)
|
||||
alertController.addAction(checkOutAction)
|
||||
alertController.addAction(updateAction)
|
||||
alertController.addAction(aboutAction)
|
||||
alertController.addAction(cancelAction)
|
||||
present(alertController, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
// MARK: - Segues
|
||||
|
||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||
if (segue.identifier == Segue.Tracking) {
|
||||
let trackingNC = segue.destination as! UINavigationController
|
||||
let trackingVC = trackingNC.viewControllers[0] as! TrackingViewController
|
||||
trackingVC.checkIn = competitorCheckIn
|
||||
trackingVC.sessionController = competitorSessionController
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
fileprivate lazy var competitorSessionController: CompetitorSessionController = {
|
||||
return CompetitorSessionController(checkIn: self.competitorCheckIn, coreDataManager: self.coreDataManager)
|
||||
}()
|
||||
|
||||
}
|
||||
|
||||
// MARK: - SessionViewControllerDelegate
|
||||
|
||||
extension TrainingCompetitorViewController: SessionViewControllerDelegate {
|
||||
|
||||
func performCheckOut() {
|
||||
competitorSessionController.checkOut { (withSuccess) in
|
||||
self.performCheckOutCompleted(withSuccess: withSuccess)
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func performCheckOutCompleted(withSuccess: Bool) {
|
||||
coreDataManager.deleteObject(object: competitorCheckIn)
|
||||
coreDataManager.saveContext()
|
||||
navigationController?.popViewController(animated: true)
|
||||
}
|
||||
|
||||
func startTracking() throws {
|
||||
try competitorSessionController.startTracking()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -154,11 +154,12 @@ class TrainingController: NSObject {
|
||||
let fleetName = "Default"
|
||||
self.trainingRequestManager.postLeaderboardSetTrackingTime(leaderboardName: leaderboardName, raceColumnName: raceColumnName, fleetName: fleetName, success: {
|
||||
self.trainingRequestManager.postLeaderboardStartTracking(leaderboardName: leaderboardName, raceColumnName: raceColumnName, fleetName: fleetName, success: {
|
||||
self.trainingRequestManager.postLeaderboardAutoCourse(leaderboardName: leaderboardName, raceColumnName: raceColumnName, fleetName: fleetName, success: {
|
||||
success()
|
||||
}) { (error, message) in
|
||||
failure(error)
|
||||
}
|
||||
// self.trainingRequestManager.postLeaderboardAutoCourse(leaderboardName: leaderboardName, raceColumnName: raceColumnName, fleetName: fleetName, success: {
|
||||
// success()
|
||||
// }) { (error, message) in
|
||||
// failure(error)
|
||||
// }
|
||||
success()
|
||||
}) { (error, message) in
|
||||
failure(error)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
//
|
||||
// TrainingMarkViewController.swift
|
||||
// SAPTracker
|
||||
//
|
||||
// Created by Raimund Wege on 11.09.17.
|
||||
// Copyright © 2017 com.sap.sailing. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class TrainingMarkViewController: SessionViewController {
|
||||
|
||||
weak var markCheckIn: MarkCheckIn!
|
||||
weak var coreDataManager: CoreDataManager!
|
||||
|
||||
@IBOutlet weak var trainingNameLabel: UILabel!
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
delegate = self
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
refresh()
|
||||
}
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
fileprivate func setup() {
|
||||
setupButtons()
|
||||
setupLocalization()
|
||||
setupNavigationBar()
|
||||
}
|
||||
|
||||
fileprivate func setupButtons() {
|
||||
startTrackingButton.setBackgroundImage(Images.GreenHighlighted, for: .highlighted)
|
||||
}
|
||||
|
||||
fileprivate func setupLocalization() {
|
||||
startTrackingButton.setTitle(Translation.CompetitorView.StartTrackingButton.Title.String, for: .normal)
|
||||
}
|
||||
|
||||
fileprivate func setupNavigationBar() {
|
||||
navigationItem.titleView = TitleView(title: markCheckIn.event.name, subtitle: markCheckIn.leaderboard.name)
|
||||
navigationController?.navigationBar.setNeedsLayout()
|
||||
}
|
||||
|
||||
// MARK: - Update
|
||||
|
||||
fileprivate func update() {
|
||||
markSessionController.update { [weak self] in
|
||||
self?.refresh()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Refresh
|
||||
|
||||
fileprivate func refresh() {
|
||||
trainingNameLabel.text = markCheckIn.event.name
|
||||
}
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
@IBAction func optionButtonTapped(_ sender: AnyObject) {
|
||||
let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
|
||||
if let popoverController = alertController.popoverPresentationController {
|
||||
popoverController.barButtonItem = sender as? UIBarButtonItem
|
||||
}
|
||||
let settingsAction = UIAlertAction(title: Translation.SettingsView.Title.String, style: .default) { [weak self] action in
|
||||
self?.performSegue(withIdentifier: Segue.Settings, sender: self)
|
||||
}
|
||||
let checkOutAction = UIAlertAction(title: Translation.CompetitorView.OptionSheet.CheckOutAction.Title.String, style: .default) { [weak self] action in
|
||||
self?.checkOut()
|
||||
}
|
||||
let updateAction = UIAlertAction(title: Translation.CompetitorView.OptionSheet.UpdateAction.Title.String, style: .default) { [weak self] action in
|
||||
self?.update()
|
||||
}
|
||||
let aboutAction = UIAlertAction(title: Translation.Common.Info.String, style: .default) { [weak self] action in
|
||||
self?.performSegue(withIdentifier: Segue.About, sender: alertController)
|
||||
}
|
||||
let cancelAction = UIAlertAction(title: Translation.Common.Cancel.String, style: .cancel, handler: nil)
|
||||
alertController.addAction(settingsAction)
|
||||
alertController.addAction(checkOutAction)
|
||||
alertController.addAction(updateAction)
|
||||
alertController.addAction(aboutAction)
|
||||
alertController.addAction(cancelAction)
|
||||
present(alertController, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
// MARK: - Segues
|
||||
|
||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||
if (segue.identifier == Segue.Tracking) {
|
||||
let trackingNC = segue.destination as! UINavigationController
|
||||
let trackingVC = trackingNC.viewControllers[0] as! TrackingViewController
|
||||
trackingVC.checkIn = markCheckIn
|
||||
trackingVC.sessionController = markSessionController
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
fileprivate lazy var markSessionController: MarkSessionController = {
|
||||
return MarkSessionController(checkIn: self.markCheckIn, coreDataManager: self.coreDataManager)
|
||||
}()
|
||||
|
||||
}
|
||||
|
||||
// MARK: - SessionViewControllerDelegate
|
||||
|
||||
extension TrainingMarkViewController: SessionViewControllerDelegate {
|
||||
|
||||
func performCheckOut() {
|
||||
markSessionController.checkOut { (withSuccess) in
|
||||
self.performCheckOutCompleted(withSuccess: withSuccess)
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func performCheckOutCompleted(withSuccess: Bool) {
|
||||
coreDataManager.deleteObject(object: markCheckIn)
|
||||
coreDataManager.saveContext()
|
||||
navigationController?.popViewController(animated: true)
|
||||
}
|
||||
|
||||
func startTracking() throws {
|
||||
try markSessionController.startTracking()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -118,12 +118,16 @@ extension TrainingTableViewController: CheckInTableViewControllerDelegate {
|
||||
trainingTableViewCell.competitorLabel.text = checkIn.name
|
||||
}
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, prepareForSegue segue: UIStoryboardSegue, andCompetitorCheckIn checkIn: CompetitorCheckIn) {
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, prepareForSegue segue: UIStoryboardSegue, andCompetitorCheckIn competitorCheckIn: CompetitorCheckIn) {
|
||||
guard let trainingCompetitorVC = segue.destination as? TrainingCompetitorViewController else { return }
|
||||
trainingCompetitorVC.competitorCheckIn = competitorCheckIn
|
||||
trainingCompetitorVC.coreDataManager = trainingCoreDataManager
|
||||
}
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, prepareForSegue segue: UIStoryboardSegue, andMarkCheckIn checkIn: MarkCheckIn) {
|
||||
|
||||
func checkInTableViewController(_ controller: CheckInTableViewController, prepareForSegue segue: UIStoryboardSegue, andMarkCheckIn markCheckIn: MarkCheckIn) {
|
||||
guard let trainingMarkVC = segue.destination as? TrainingMarkViewController else { return }
|
||||
trainingMarkVC.markCheckIn = markCheckIn
|
||||
trainingMarkVC.coreDataManager = trainingCoreDataManager
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
//
|
||||
// TrainingViewController.swift
|
||||
// SAPTracker
|
||||
//
|
||||
// Created by Raimund Wege on 21.08.17.
|
||||
// Copyright © 2017 com.sap.sailing. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class TrainingViewController: UIViewController {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user