Browse Source

Final release changes.

v1.2.2
Abhishek Banthia 9 years ago
parent
commit
d99c880136
  1. 26
      Clocker.xcodeproj/project.pbxproj
  2. BIN
      Clocker.xcodeproj/project.xcworkspace/xcuserdata/abhishekbanthia.xcuserdatad/UserInterfaceState.xcuserstate
  3. 32
      Clocker.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 2
      Clocker/AboutUsWindow/CLAboutUsView.xib
  5. 10
      Clocker/App Feedback/CLAppFeedbackWindow.xib
  6. 63
      Clocker/Appearance Tab/CLAppearanceView.xib
  7. 2
      Clocker/Appearance Tab/CLAppearanceViewController.h
  8. 10
      Clocker/Appearance Tab/CLAppearanceViewController.m
  9. 16
      Clocker/ApplicationDelegate.m
  10. 5
      Clocker/BackgroundView.m
  11. 1
      Clocker/CLOneWindow/CLOneWindow.xib
  12. 4
      Clocker/CLOneWindow/CLOneWindowController.m
  13. 11
      Clocker/Custom Table Cell Views/CLTimezoneCellView.m
  14. 2
      Clocker/MenubarController.h
  15. 5
      Clocker/MenubarController.m
  16. 13
      Clocker/Model/CLTimezoneData.h
  17. 110
      Clocker/Model/CLTimezoneData.m
  18. 77
      Clocker/Onboarding/CLIntroView.xib
  19. 13
      Clocker/Onboarding/CLIntroViewController.h
  20. 59
      Clocker/Onboarding/CLIntroViewController.m
  21. 110
      Clocker/Onboarding/CLOnboardingWindow.xib
  22. 18
      Clocker/Onboarding/CLOnboardingWindowController.h
  23. 63
      Clocker/Onboarding/CLOnboardingWindowController.m
  24. 18
      Clocker/Panel.xib
  25. 16
      Clocker/PanelController.m
  26. 20
      Clocker/Preferences/CLPreferencesView.xib
  27. 12
      Clocker/Preferences/CLPreferencesViewController.m
  28. 5
      Clocker/StatusItemView.m
  29. 21
      Media.xcassets/EmptyPanel.imageset/Contents.json
  30. BIN
      Media.xcassets/EmptyPanel.imageset/EmptyPanel.png
  31. 21
      Media.xcassets/FinalOnboarding.imageset/Contents.json
  32. BIN
      Media.xcassets/FinalOnboarding.imageset/FinalOnboarding.png
  33. 21
      Media.xcassets/Future Slider.imageset/Contents.json
  34. BIN
      Media.xcassets/Future Slider.imageset/Future Slider.png
  35. 21
      Media.xcassets/Main Panel.imageset/Contents.json
  36. BIN
      Media.xcassets/Main Panel.imageset/Main Panel.png
  37. 21
      Media.xcassets/Onboarding.imageset/Contents.json
  38. BIN
      Media.xcassets/Onboarding.imageset/Onboarding.png

26
Clocker.xcodeproj/project.pbxproj

@ -10,6 +10,10 @@
9A20A04B1C4DEED200FB45AB /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A20A04A1C4DEED200FB45AB /* IOKit.framework */; };
9A20A0701C4E804D00FB45AB /* ServiceManagement.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A20A06F1C4E804D00FB45AB /* ServiceManagement.framework */; };
9A20A0721C4E80A800FB45AB /* Clocker-Helper.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9A20A06E1C4E801600FB45AB /* Clocker-Helper.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
9A20A0781C4EA53600FB45AB /* CLOnboardingWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A20A0761C4EA53600FB45AB /* CLOnboardingWindowController.m */; };
9A20A0791C4EA53600FB45AB /* CLOnboardingWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A20A0771C4EA53600FB45AB /* CLOnboardingWindow.xib */; };
9A20A07E1C4EAAEB00FB45AB /* CLIntroViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A20A07C1C4EAAEB00FB45AB /* CLIntroViewController.m */; };
9A20A07F1C4EAAEB00FB45AB /* CLIntroView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A20A07D1C4EAAEB00FB45AB /* CLIntroView.xib */; };
9A25F7471C1A5E17007D369B /* iRate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A25F7441C1A5E17007D369B /* iRate.m */; };
9A3247321C25FD3A00CF6B6E /* CLCustomSliderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3247311C25FD3A00CF6B6E /* CLCustomSliderCell.m */; };
9A3247391C263F4F00CF6B6E /* CLAppearanceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3247371C263F4F00CF6B6E /* CLAppearanceViewController.m */; };
@ -104,6 +108,12 @@
9A20A04A1C4DEED200FB45AB /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
9A20A0691C4E801500FB45AB /* Clocker-Helper.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "Clocker-Helper.xcodeproj"; path = "Clocker-Helper/Clocker-Helper.xcodeproj"; sourceTree = "<group>"; };
9A20A06F1C4E804D00FB45AB /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; };
9A20A0751C4EA53600FB45AB /* CLOnboardingWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLOnboardingWindowController.h; path = Clocker/Onboarding/CLOnboardingWindowController.h; sourceTree = "<group>"; };
9A20A0761C4EA53600FB45AB /* CLOnboardingWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLOnboardingWindowController.m; path = Clocker/Onboarding/CLOnboardingWindowController.m; sourceTree = "<group>"; };
9A20A0771C4EA53600FB45AB /* CLOnboardingWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CLOnboardingWindow.xib; path = Clocker/Onboarding/CLOnboardingWindow.xib; sourceTree = "<group>"; };
9A20A07B1C4EAAEB00FB45AB /* CLIntroViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLIntroViewController.h; path = Clocker/Onboarding/CLIntroViewController.h; sourceTree = "<group>"; };
9A20A07C1C4EAAEB00FB45AB /* CLIntroViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLIntroViewController.m; path = Clocker/Onboarding/CLIntroViewController.m; sourceTree = "<group>"; };
9A20A07D1C4EAAEB00FB45AB /* CLIntroView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CLIntroView.xib; path = Clocker/Onboarding/CLIntroView.xib; sourceTree = "<group>"; };
9A25F7411C1A5E17007D369B /* iRate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iRate.h; path = "Clocker/Rate App/iRate.h"; sourceTree = "<group>"; };
9A25F7441C1A5E17007D369B /* iRate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iRate.m; path = "Clocker/Rate App/iRate.m"; sourceTree = "<group>"; };
9A3247301C25FD3A00CF6B6E /* CLCustomSliderCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLCustomSliderCell.h; path = "Clocker/Custom Slider/CLCustomSliderCell.h"; sourceTree = "<group>"; };
@ -258,6 +268,9 @@
9A392EE61C1CDD530072C10A /* CLAboutUsViewController.m */,
9A392EEA1C1CE9950072C10A /* CLPreferencesViewController.h */,
9A392EEB1C1CE9950072C10A /* CLPreferencesViewController.m */,
9A20A07B1C4EAAEB00FB45AB /* CLIntroViewController.h */,
9A20A07C1C4EAAEB00FB45AB /* CLIntroViewController.m */,
9A20A07D1C4EAAEB00FB45AB /* CLIntroView.xib */,
);
name = "View Controllers";
sourceTree = "<group>";
@ -291,6 +304,7 @@
9A392EEC1C1CE9950072C10A /* CLPreferencesView.xib */,
9A3247381C263F4F00CF6B6E /* CLAppearanceView.xib */,
9A9E63851C2C673E009A299B /* CLAppFeedbackWindow.xib */,
9A20A0771C4EA53600FB45AB /* CLOnboardingWindow.xib */,
);
name = XIB;
sourceTree = "<group>";
@ -334,6 +348,8 @@
9A8605E51BEC165400A810A4 /* Controllers */ = {
isa = PBXGroup;
children = (
9A20A0751C4EA53600FB45AB /* CLOnboardingWindowController.h */,
9A20A0761C4EA53600FB45AB /* CLOnboardingWindowController.m */,
9A9E63831C2C673E009A299B /* CLAppFeedbackWindowController.h */,
9A9E63841C2C673E009A299B /* CLAppFeedbackWindowController.m */,
9A5951BE1C1D0AA0009C17AA /* CLOneWindowController.m */,
@ -535,9 +551,11 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
9A20A0791C4EA53600FB45AB /* CLOnboardingWindow.xib in Resources */,
9A9E63871C2C673E009A299B /* CLAppFeedbackWindow.xib in Resources */,
9A5951FD1C1D592D009C17AA /* iVersion.bundle in Resources */,
9A392EEE1C1CE9950072C10A /* CLPreferencesView.xib in Resources */,
9A20A07F1C4EAAEB00FB45AB /* CLIntroView.xib in Resources */,
9A56DB811C1CFB73004CE6AF /* Panel.xib in Resources */,
9A43792E1BEC256200F4E27F /* Media.xcassets in Resources */,
9A392EE91C1CDD530072C10A /* CLAboutUsView.xib in Resources */,
@ -583,6 +601,7 @@
9A5951BD1C1D0A8D009C17AA /* CommonStrings.m in Sources */,
9A5951FA1C1D5214009C17AA /* iVersion.m in Sources */,
9A87DAC61C358FA800A8CF3B /* DTError.m in Sources */,
9A20A0781C4EA53600FB45AB /* CLOnboardingWindowController.m in Sources */,
9A87DACA1C358FA800A8CF3B /* DTTimePeriodGroup.m in Sources */,
9A25F7471C1A5E17007D369B /* iRate.m in Sources */,
9A8605C01BEC14F600A810A4 /* Panel.m in Sources */,
@ -593,6 +612,7 @@
9A8605BB1BEC14DC00A810A4 /* PanelController.m in Sources */,
9A8605B61BEC14BE00A810A4 /* MenubarController.m in Sources */,
9A5951C01C1D0AA0009C17AA /* CLOneWindowController.m in Sources */,
9A20A07E1C4EAAEB00FB45AB /* CLIntroViewController.m in Sources */,
9A8605B71BEC14BE00A810A4 /* ApplicationDelegate.m in Sources */,
9A5951F51C1D3D81009C17AA /* CLTimezoneCellView.m in Sources */,
9ABF58721C29A80600BD0187 /* CLTimezoneData.m in Sources */,
@ -658,7 +678,7 @@
GCC_PREFIX_HEADER = "Clocker/Clocker-Prefix.pch";
INFOPLIST_FILE = "Clocker/Clocker-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.9;
MACOSX_DEPLOYMENT_TARGET = 10.10;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.abhishek.Clocker;
PRODUCT_NAME = Clocker;
@ -759,7 +779,7 @@
GCC_PREFIX_HEADER = "Clocker/Clocker-Prefix.pch";
INFOPLIST_FILE = "Clocker/Clocker-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.9;
MACOSX_DEPLOYMENT_TARGET = 10.10;
ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.abhishek.Clocker;
@ -788,7 +808,7 @@
GCC_PREFIX_HEADER = "Clocker/Clocker-Prefix.pch";
INFOPLIST_FILE = "Clocker/Clocker-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.9;
MACOSX_DEPLOYMENT_TARGET = 10.10;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.abhishek.Clocker;
PRODUCT_NAME = Clocker;

BIN
Clocker.xcodeproj/project.xcworkspace/xcuserdata/abhishekbanthia.xcuserdatad/UserInterfaceState.xcuserstate generated

Binary file not shown.

32
Clocker.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@ -29,5 +29,37 @@
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Clocker/Model/CLTimezoneData.m"
timestampString = "474940922.914305"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "61"
endingLineNumber = "61"
landmarkName = "+getCustomObject:"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Clocker/Model/CLTimezoneData.m"
timestampString = "474941219.735933"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "229"
endingLineNumber = "229"
landmarkName = "-compareSystemDate:toTimezoneDate:"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>

2
Clocker/AboutUsWindow/CLAboutUsView.xib

@ -52,7 +52,7 @@
<constraints>
<constraint firstAttribute="height" constant="20" id="6fy-MI-uin"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Copyright (2015) Abhishek Banthia" id="4PX-se-5ds">
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Copyright (2016) Abhishek Banthia" id="4PX-se-5ds">
<font key="font" size="14" name="SFUIDisplay-Ultralight"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>

10
Clocker/App Feedback/CLAppFeedbackWindow.xib

@ -82,9 +82,9 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" preferredMaxLayoutWidth="269" translatesAutoresizingMaskIntoConstraints="NO" id="LVY-Qw-MYC">
<rect key="frame" x="3" y="0.0" width="288" height="42"/>
<rect key="frame" x="6" y="8" width="283" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="42" id="dRi-pM-pWX"/>
<constraint firstAttribute="height" constant="30" id="dRi-pM-pWX"/>
</constraints>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="center" title="Your contact information will let us contact you in case we need more information or can help!" placeholderString="" id="yEq-6I-HBq">
<font key="font" size="10" name="SFUIDisplay-Regular"/>
@ -97,8 +97,8 @@
<constraint firstItem="zlM-Cf-OxV" firstAttribute="top" secondItem="Qzm-kE-Igl" secondAttribute="bottom" constant="10" id="9Gc-9K-fJF"/>
<constraint firstItem="Qzm-kE-Igl" firstAttribute="top" secondItem="moX-Vc-vMc" secondAttribute="top" constant="11" id="Dpz-4F-hN7"/>
<constraint firstItem="Qzm-kE-Igl" firstAttribute="leading" secondItem="moX-Vc-vMc" secondAttribute="leading" constant="10" id="GKZ-24-t7t"/>
<constraint firstItem="LVY-Qw-MYC" firstAttribute="top" secondItem="zlM-Cf-OxV" secondAttribute="bottom" constant="3" id="Xck-iy-cZk"/>
<constraint firstItem="LVY-Qw-MYC" firstAttribute="leading" secondItem="moX-Vc-vMc" secondAttribute="leading" constant="5" id="iLs-Ob-MZC"/>
<constraint firstItem="LVY-Qw-MYC" firstAttribute="top" secondItem="zlM-Cf-OxV" secondAttribute="bottom" constant="7" id="Xck-iy-cZk"/>
<constraint firstItem="LVY-Qw-MYC" firstAttribute="leading" secondItem="moX-Vc-vMc" secondAttribute="leading" constant="8" id="iLs-Ob-MZC"/>
<constraint firstItem="LVY-Qw-MYC" firstAttribute="centerX" secondItem="moX-Vc-vMc" secondAttribute="centerX" constant="2.5" id="k3n-00-eiV"/>
<constraint firstItem="zlM-Cf-OxV" firstAttribute="leading" secondItem="moX-Vc-vMc" secondAttribute="leading" constant="10" id="u3y-gI-YeL"/>
</constraints>
@ -182,7 +182,7 @@ DQ
<constraint firstAttribute="trailing" secondItem="Qzm-kE-Igl" secondAttribute="trailing" constant="30" id="5UG-sC-szG"/>
<constraint firstItem="W3a-Hi-ryk" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="12" id="8UN-bn-s8Y"/>
<constraint firstAttribute="trailing" secondItem="zlM-Cf-OxV" secondAttribute="trailing" constant="30" id="Arj-b2-oje"/>
<constraint firstAttribute="trailing" secondItem="LVY-Qw-MYC" secondAttribute="trailing" constant="20" id="I39-jS-bL7"/>
<constraint firstAttribute="trailing" secondItem="LVY-Qw-MYC" secondAttribute="trailing" constant="22" id="I39-jS-bL7"/>
<constraint firstAttribute="trailing" secondItem="oNX-kV-RGt" secondAttribute="trailing" constant="12" id="IqR-EG-ga3"/>
<constraint firstItem="sJq-1o-Bft" firstAttribute="leading" secondItem="szs-8j-SMN" secondAttribute="trailing" constant="8" id="JSB-K6-cbX"/>
<constraint firstAttribute="trailing" secondItem="sJq-1o-Bft" secondAttribute="trailing" constant="20" id="KuW-ez-Od9"/>

63
Clocker/Appearance Tab/CLAppearanceView.xib

@ -7,6 +7,7 @@
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="CLAppearanceViewController">
<connections>
<outlet property="informationLabel" destination="WDP-d4-eNj" id="4Af-T9-vEI"/>
<outlet property="theme" destination="5tI-fU-0lZ" id="dzr-Zx-E8x"/>
<outlet property="timeFormat" destination="OrL-Ix-fmY" id="ZzR-ip-HS9"/>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
@ -60,12 +61,12 @@
</connections>
</segmentedControl>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YQi-x8-6f8">
<rect key="frame" x="168" y="287" width="104" height="18"/>
<rect key="frame" x="143" y="287" width="154" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="18" id="eY8-bV-QLM"/>
<constraint firstAttribute="width" constant="100" id="n8S-fR-UtY"/>
<constraint firstAttribute="width" constant="150" id="n8S-fR-UtY"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Display Options" id="KTv-74-itf">
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Day Display Options" id="KTv-74-itf">
<font key="font" size="13" name="SFUIDisplay-Light"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
@ -110,6 +111,9 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="enabled" keyPath="self.enableOptions" id="wwV-Hq-RlT"/>
</connections>
</textField>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="atA-2r-FXV">
<rect key="frame" x="179" y="116" width="84" height="24"/>
@ -125,6 +129,7 @@
</segments>
</segmentedCell>
<connections>
<binding destination="-2" name="enabled" keyPath="self.enableOptions" id="K4w-DT-u3f"/>
<binding destination="WGI-5h-l6M" name="selectedIndex" keyPath="values.showDate" id="Qee-Dc-Piu"/>
</connections>
</segmentedControl>
@ -139,6 +144,9 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="enabled" keyPath="self.enableOptions" id="56M-0X-vvP"/>
</connections>
</textField>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XwV-hy-YiP">
<rect key="frame" x="178" y="67" width="84" height="24"/>
@ -154,6 +162,7 @@
</segments>
</segmentedCell>
<connections>
<binding destination="-2" name="enabled" keyPath="self.enableOptions" id="5wv-GT-fne"/>
<binding destination="WGI-5h-l6M" name="selectedIndex" keyPath="values.showDay" id="AeO-a9-xU4"/>
</connections>
</segmentedControl>
@ -201,6 +210,9 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="enabled" keyPath="self.enableOptions" id="3ho-kS-zgV"/>
</connections>
</textField>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JR8-v7-K0w">
<rect key="frame" x="178" y="15" width="84" height="24"/>
@ -216,6 +228,7 @@
</segments>
</segmentedCell>
<connections>
<binding destination="-2" name="enabled" keyPath="self.enableOptions" id="g8k-2L-2XR"/>
<binding destination="WGI-5h-l6M" name="selectedIndex" keyPath="values.showCityName" id="FYy-NU-cIr"/>
</connections>
</segmentedControl>
@ -232,15 +245,15 @@
</textFieldCell>
</textField>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1eh-BT-2fK">
<rect key="frame" x="133" y="256" width="174" height="24"/>
<rect key="frame" x="155" y="256" width="129" height="24"/>
<constraints>
<constraint firstAttribute="width" constant="170" id="u9T-ks-rqA"/>
<constraint firstAttribute="width" constant="125" id="u9T-ks-rqA"/>
</constraints>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="ZV9-ih-faz">
<font key="font" size="12" name="SFUIDisplay-Light"/>
<segments>
<segment label="Relative Dates"/>
<segment label="Actual day" selected="YES" tag="1"/>
<segment label="Relative"/>
<segment label="Actual" selected="YES" tag="1"/>
</segments>
</segmentedCell>
<connections>
@ -248,6 +261,37 @@
<binding destination="WGI-5h-l6M" name="selectedIndex" keyPath="values.relativeDate" id="eKo-sG-1eE"/>
</connections>
</segmentedControl>
<visualEffectView wantsLayer="YES" appearanceType="vibrantLight" alphaValue="0.90000000000000002" blendingMode="withinWindow" state="followsWindowActiveState" translatesAutoresizingMaskIntoConstraints="NO" id="kHi-mx-HdE">
<rect key="frame" x="0.0" y="0.0" width="439" height="195"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WDP-d4-eNj">
<rect key="frame" x="58" y="67" width="324" height="39"/>
<constraints>
<constraint firstAttribute="width" constant="320" id="3wp-Z6-TrB"/>
<constraint firstAttribute="height" constant="39" id="IyN-y5-6JP"/>
</constraints>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="center" id="JHS-Tb-Aq8">
<font key="font" size="13" name="SFUIDisplay-Bold"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="-2" name="hidden" keyPath="self.enableOptions" id="ZtR-jU-eva"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="195" id="JD3-oH-lbP"/>
<constraint firstItem="WDP-d4-eNj" firstAttribute="centerY" secondItem="kHi-mx-HdE" secondAttribute="centerY" constant="11" id="YZN-MB-zQ8"/>
<constraint firstItem="WDP-d4-eNj" firstAttribute="centerX" secondItem="kHi-mx-HdE" secondAttribute="centerX" id="xlO-Y9-7Dn"/>
</constraints>
<shadow key="shadow" blurRadius="10">
<color key="color" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
</shadow>
<connections>
<binding destination="-2" name="hidden" keyPath="self.enableOptions" id="4El-Z9-rMM"/>
</connections>
</visualEffectView>
</subviews>
<constraints>
<constraint firstItem="5TC-RQ-gzI" firstAttribute="top" secondItem="X5s-Mc-Yfo" secondAttribute="bottom" constant="8" id="1Wi-S2-cSq"/>
@ -257,14 +301,17 @@
<constraint firstItem="YQi-x8-6f8" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="6LU-d8-lKX"/>
<constraint firstItem="3d9-qg-dNb" firstAttribute="top" secondItem="MHe-dB-GZr" secondAttribute="bottom" constant="4" id="BZ1-zf-1At"/>
<constraint firstItem="3d9-qg-dNb" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="FBj-0N-ltc"/>
<constraint firstAttribute="bottom" secondItem="kHi-mx-HdE" secondAttribute="bottom" id="GqC-hp-yU9"/>
<constraint firstItem="OrL-Ix-fmY" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="JtZ-ra-RaC"/>
<constraint firstItem="kEn-QZ-niZ" firstAttribute="top" secondItem="atA-2r-FXV" secondAttribute="bottom" constant="5" id="O8m-uk-Ppx"/>
<constraint firstItem="kHi-mx-HdE" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="Oan-Iw-Pp1"/>
<constraint firstItem="X5s-Mc-Yfo" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="8" id="OeD-4K-q6Y"/>
<constraint firstItem="HTZ-1V-qZb" firstAttribute="top" secondItem="1eh-BT-2fK" secondAttribute="bottom" constant="7" id="Ohx-zT-4Wu"/>
<constraint firstItem="pqa-Qg-U8Y" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="PHa-pY-kHG"/>
<constraint firstItem="1eh-BT-2fK" firstAttribute="top" secondItem="YQi-x8-6f8" secondAttribute="bottom" constant="8" id="POa-Gi-Prk"/>
<constraint firstItem="X5s-Mc-Yfo" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="PRU-TH-852"/>
<constraint firstItem="atA-2r-FXV" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" constant="1" id="Pjx-sg-kK0"/>
<constraint firstAttribute="trailing" secondItem="kHi-mx-HdE" secondAttribute="trailing" id="QaQ-6R-Oy9"/>
<constraint firstItem="XwV-hy-YiP" firstAttribute="top" secondItem="kEn-QZ-niZ" secondAttribute="bottom" constant="5" id="Qyy-6B-BBN"/>
<constraint firstItem="atA-2r-FXV" firstAttribute="top" secondItem="pqa-Qg-U8Y" secondAttribute="bottom" constant="5" id="RdE-wy-6vH"/>
<constraint firstItem="MHe-dB-GZr" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="TyR-gg-RLi"/>
@ -277,7 +324,7 @@
<constraint firstItem="iVw-cq-zLz" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="Zh8-Vn-VxM"/>
<constraint firstItem="5tI-fU-0lZ" firstAttribute="top" secondItem="iVw-cq-zLz" secondAttribute="bottom" constant="8" id="bo6-s2-Vfj"/>
<constraint firstItem="kEn-QZ-niZ" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="eU3-c4-cnM"/>
<constraint firstItem="1eh-BT-2fK" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" constant="0.5" id="fvI-By-5Ef"/>
<constraint firstItem="1eh-BT-2fK" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="fvI-By-5Ef"/>
<constraint firstAttribute="trailing" secondItem="MHe-dB-GZr" secondAttribute="trailing" id="jL7-Cv-YuY"/>
<constraint firstItem="5TC-RQ-gzI" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="lc0-ud-Mnw"/>
<constraint firstItem="JR8-v7-K0w" firstAttribute="top" secondItem="LC1-Sx-uav" secondAttribute="bottom" constant="5" id="pHX-KA-5RI"/>

2
Clocker/Appearance Tab/CLAppearanceViewController.h

@ -11,4 +11,6 @@
@interface CLAppearanceViewController : NSViewController
@property (assign, nonatomic) BOOL enableOptions;
@end

10
Clocker/Appearance Tab/CLAppearanceViewController.m

@ -16,6 +16,7 @@
@property (weak) IBOutlet NSSegmentedControl *timeFormat;
@property (weak) IBOutlet NSSegmentedControl *theme;
@property (weak) IBOutlet NSSegmentedControl *menuOptions;
@property (weak) IBOutlet NSTextField *informationLabel;
@end
@ -29,13 +30,10 @@
[self.view setWantsLayer:YES]; // view's backing store is using a Core Animation Layer
[self.view setLayer:viewLayer];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSNumber *shouldCityBeShown = [userDefaults objectForKey:@"shouldCityBeShown"];
NSNumber *shouldDayBeShown = [userDefaults objectForKey:@"shouldDayBeShown"];
[self.menuOptions setSelected:shouldDayBeShown.boolValue forSegment:0];
[self.menuOptions setSelected:shouldCityBeShown.boolValue forSegment:1];
self.informationLabel.stringValue = @"Select a favourite timezone to enable menubar display options.";
self.informationLabel.textColor = [NSColor secondaryLabelColor];
self.enableOptions = [[NSUserDefaults standardUserDefaults] objectForKey:@"favouriteTimezone"] == nil ? NO : YES;
}
- (IBAction)timeFormatSelectionChanged:(id)sender

16
Clocker/ApplicationDelegate.m

@ -32,6 +32,7 @@
#import "CommonStrings.h"
#import "iVersion.h"
#import <Parse/Parse.h>
#import "CLOnboardingWindowController.h"
NSString *const CLParseApplicationID = @"F2ahd8J6sfjQMCc5z3xSy9kVK94PmKmH6hV2UsUK";
NSString *const CLParseClientID = @"vfnqDtinvmwUBkcifznYHzYTetxN5iMvt8Ey8StD";
@ -118,12 +119,23 @@ void *kContextActivePanel = &kContextActivePanel;
[[NSUserDefaults standardUserDefaults] setObject:@0 forKey:@"startAtLogin"];
}
NSString *onboarding = [[NSUserDefaults standardUserDefaults] objectForKey:@"initalLaunch"];
// Install icon into the menu bar
self.menubarController = [[MenubarController alloc] init];
if (onboarding == nil)
{
[[NSUserDefaults standardUserDefaults] setObject:@"OnboardingDone" forKey:@"initalLaunch"];
[self.menubarController setInitialTimezoneData];
}
CLOnboardingWindowController *windowController = [CLOnboardingWindowController sharedWindow];
[windowController showWindow:nil];
[NSApp activateIgnoringOtherApps:YES];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"NSApplicationCrashOnExceptions": @YES }];
[[Crashlytics sharedInstance] setDebugMode:NO];

5
Clocker/BackgroundView.m

@ -136,7 +136,10 @@
[self addTrackingArea:self.trackingArea];
}
-(BOOL)allowsVibrancy
{
return YES;
}
#pragma mark -
#pragma mark Public accessors

1
Clocker/CLOneWindow/CLOneWindow.xib

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/>
</dependencies>
<objects>

4
Clocker/CLOneWindow/CLOneWindowController.m

@ -35,6 +35,7 @@ static CLOneWindowController *sharedWindow = nil;
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}
+ (instancetype)sharedWindow
{
if (sharedWindow == nil)
@ -63,6 +64,9 @@ static CLOneWindowController *sharedWindow = nil;
{
[self.window setContentSize:contentView.frame.size];
[self.window setContentView:contentView];
CGFloat xPos = NSWidth([[self.window screen] frame])/2 - NSWidth([self.window frame])/2;
CGFloat yPos = NSHeight([[self.window screen] frame])/2 - NSHeight([self.window frame])/2;
[self.window setFrame:NSMakeRect(xPos, yPos, NSWidth([self.window frame]), NSHeight([self.window frame])) display:YES];
}
- (IBAction)openAboutUsView:(id)sender

11
Clocker/Custom Table Cell Views/CLTimezoneCellView.m

@ -40,8 +40,7 @@
if ([[sender superview] isKindOfClass:[self class]]) {
CLTimezoneCellView *cellView = (CLTimezoneCellView *)[sender superview];
NSData *dataObject = panelController.defaultPreferences[cellView.rowNumber];
NSData *newDataObject = [dataObject mutableCopy];
CLTimezoneData *timezoneObject = [CLTimezoneData getCustomObject:newDataObject];
CLTimezoneData *timezoneObject = [CLTimezoneData getCustomObject:dataObject];
for (NSData *object in panelController.defaultPreferences)
{
@ -50,14 +49,18 @@
return;
}
}
timezoneObject.customLabel = (customLabelValue.length > 0) ? customLabelValue : CLEmptyString;
[panelController.defaultPreferences replaceObjectAtIndex:cellView.rowNumber withObject:newDataObject];
NSData *newObject = [NSKeyedArchiver archivedDataWithRootObject:timezoneObject];
[panelController.defaultPreferences replaceObjectAtIndex:cellView.rowNumber withObject:newObject];
[[NSUserDefaults standardUserDefaults] setObject:panelController.defaultPreferences forKey:CLDefaultPreferenceKey];
[panelController updateDefaultPreferences];
[panelController.mainTableview reloadData];
[[NSNotificationCenter defaultCenter] postNotificationName:CLCustomLabelChangedNotification object:nil];
[[NSNotificationCenter defaultCenter]
postNotificationName:CLCustomLabelChangedNotification
object:nil];
}
}

2
Clocker/MenubarController.h

@ -41,4 +41,6 @@
@property (nonatomic, strong, readonly) NSStatusItem *statusItem;
@property (nonatomic, strong, readonly) StatusItemView *statusItemView;
- (void)setInitialTimezoneData;
@end

5
Clocker/MenubarController.m

@ -47,6 +47,11 @@
return self;
}
- (void)setInitialTimezoneData
{
[CLTimezoneData setInitialTimezoneData];
}
- (void)updateIconDisplay
{
[self.statusItemView setNeedsDisplay:YES];

13
Clocker/Model/CLTimezoneData.h

@ -9,6 +9,11 @@
#import <Foundation/Foundation.h>
#import "CLTimezoneCellView.h"
typedef enum : NSUInteger {
CLPanelDisplay,
CLMenuDisplay
} CLDateDisplayType;
@interface CLTimezoneData : NSObject<NSCoding>
@property (strong, nonatomic) NSString *customLabel;
@ -21,14 +26,16 @@
@property (strong, nonatomic) NSNumber *isFavourite;
+ (instancetype)getCustomObject:(NSData *)encodedData;
- (void)sendAnalyticsData;
+ (void)setInitialTimezoneData;
- (void)sendAnalyticsData;
- (instancetype)initWithDictionary:(NSDictionary *)dictionary;
- (BOOL)saveObjectToPreferences:(CLTimezoneData *)object;
- (BOOL)saveObjectToPreferences;
- (NSString *)getTimeForTimeZoneWithFutureSliderValue:(NSInteger)futureSliderValue;
- (NSString *)getLocalCurrentDate;
- (NSString *)compareSystemDate:(NSString *)systemDate toTimezoneDate:(NSString *)date;
- (NSString *)getDateForTimeZoneWithFutureSliderValue:(NSInteger)futureSliderValue;
- (NSString *)getDateForTimeZoneWithFutureSliderValue:(NSInteger)futureSliderValue andDisplayType:(CLDateDisplayType)type;
- (void)getTimeZoneForLatitude:(NSString *)latitude andLongitude:(NSString *)longitude andDataObject:(CLTimezoneData *)dataObject;
- (NSString *)formatStringShouldContainCity:(BOOL)value;
- (NSString *)getMenuTitle;

110
Clocker/Model/CLTimezoneData.m

@ -33,10 +33,19 @@
return self;
}
- (BOOL)saveObjectToPreferences:(CLTimezoneData *)object
+ (void)setInitialTimezoneData
{
CLTimezoneData *newData = [[self alloc] init];
newData.timezoneID = [[NSTimeZone systemTimeZone] name];
newData.formattedAddress = newData.timezoneID;
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:object];
[newData saveObjectToPreferences];
}
- (BOOL)saveObjectToPreferences
{
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:self];
NSMutableArray *array = [NSMutableArray new];
[array addObject:encodedObject];
@ -241,19 +250,10 @@
panelController = window.windowController;
}
}
[panelController.defaultPreferences replaceObjectAtIndex:[panelController.defaultPreferences indexOfObject:self] withObject:newDataObject];
[[NSUserDefaults standardUserDefaults] setObject:panelController.defaultPreferences forKey:CLDefaultPreferenceKey];
}
else if ([self.nextUpdate isKindOfClass:[NSDate class]] &&
[self.nextUpdate isEarlierThanOrEqualTo:timezoneDate])
{
[self getTimeZoneForLatitude:self.latitude
andLongitude:self.longitude
andDataObject:self];
}
NSInteger daysApart = [timezoneDate daysFrom:localDate];
@ -274,7 +274,7 @@
}
}
- (NSString *)getDateForTimeZoneWithFutureSliderValue:(NSInteger)futureSliderValue
- (NSString *)getDateForTimeZoneWithFutureSliderValue:(NSInteger)futureSliderValue andDisplayType:(CLDateDisplayType)type
{
NSCalendar *currentCalendar = [NSCalendar autoupdatingCurrentCalendar];
NSDate *newDate = [currentCalendar dateByAddingUnit:NSCalendarUnitHour
@ -288,7 +288,7 @@
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:self.timezoneID];
NSNumber *relativeDayPreference = [[NSUserDefaults standardUserDefaults] objectForKey:CLRelativeDateKey];
if (relativeDayPreference.integerValue == 0) {
if (relativeDayPreference.integerValue == 0 && type == CLPanelDisplay) {
return [self compareSystemDate:[self getLocalCurrentDate]
toTimezoneDate:[dateFormatter stringFromDate:newDate]];
}
@ -305,88 +305,6 @@
}
}
- (void)getTimeZoneForLatitude:(NSString *)latitude andLongitude:(NSString *)longitude andDataObject:(CLTimezoneData *)dataObject
{
if (![CLAPI isUserConnectedToInternet])
{
//Could not fetch data
return;
}
NSString *urlString = [NSString stringWithFormat:@"http://api.geonames.org/timezoneJSON?lat=%@&lng=%@&username=abhishaker17", latitude, longitude];
[CLAPI dataTaskWithServicePath:urlString
bySender:self
withCompletionBlock:^(NSError *error, NSDictionary *json) {
dispatch_async(dispatch_get_main_queue(), ^{
if (json.count == 0) {
//No results found
return;
}
if ([json[@"status"][@"message"]
isEqualToString:@"the hourly limit of 2000 credits for abhishaker17 has been exceeded. Please throttle your requests or use the commercial service."])
{
return;
}
CLTimezoneData *newDataObject = [dataObject mutableCopy];
/*
if (json[@"sunrise"] && json[@"sunset"]) {
newDataObject.sunriseTime = json[@"sunrise"];
newDataObject.sunsetTime = json[@"sunset"];
}*/
NSUInteger units = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *comps = [[NSCalendar currentCalendar] components:units fromDate:newDataObject.nextUpdate];
comps.day = comps.day + 1;
NSDate *tomorrowMidnight = [[NSCalendar currentCalendar] dateFromComponents:comps];
dataObject.nextUpdate = tomorrowMidnight;
NSArray *defaultPreference = [[NSUserDefaults standardUserDefaults] objectForKey:CLDefaultPreferenceKey];
if (defaultPreference == nil)
{
defaultPreference = [[NSMutableArray alloc] init];
}
PanelController *panelController;
for (NSWindow *window in [[NSApplication sharedApplication] windows])
{
if ([window.windowController isMemberOfClass:[PanelController class]])
{
panelController = window.windowController;
}
}
NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray:defaultPreference];
for (NSMutableDictionary *timeDictionary in panelController.defaultPreferences) {
if ([dataObject.place_id isEqualToString:timeDictionary[CLPlaceIdentifier]]) {
[newArray replaceObjectAtIndex:[panelController.defaultPreferences indexOfObject:dataObject] withObject:newDataObject];
}
}
[[NSUserDefaults standardUserDefaults] setObject:newArray forKey:CLDefaultPreferenceKey];
[panelController.mainTableview reloadData];
});
}];
}
- (NSString *)getWeekdayFromInteger:(NSInteger)weekdayInteger
{
if (weekdayInteger > 7) {
@ -443,7 +361,7 @@
if (shouldDayBeShown.boolValue == 0)
{
NSString *substring = [self getDateForTimeZoneWithFutureSliderValue:0];
NSString *substring = [self getDateForTimeZoneWithFutureSliderValue:0 andDisplayType:CLMenuDisplay];
substring = [substring substringToIndex:3];
if (menuTitle.length > 0)

77
Clocker/Onboarding/CLIntroView.xib

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="CLIntroViewController">
<connections>
<outlet property="onboardingImageView" destination="qZ4-qB-r3O" id="5cu-wZ-y8M"/>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="485" height="520"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<visualEffectView wantsLayer="YES" alphaValue="0.80000000000000004" blendingMode="behindWindow" state="followsWindowActiveState" translatesAutoresizingMaskIntoConstraints="NO" id="G8h-RB-gyd">
<rect key="frame" x="0.0" y="-10" width="485" height="530"/>
<subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="qZ4-qB-r3O">
<rect key="frame" x="0.0" y="60" width="485" height="479"/>
<constraints>
<constraint firstAttribute="height" constant="479" id="QkO-Un-33O"/>
<constraint firstAttribute="width" constant="485" id="Ymc-PM-QEC"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="Onboarding" id="Rvj-vz-qz1"/>
</imageView>
</subviews>
<constraints>
<constraint firstItem="qZ4-qB-r3O" firstAttribute="top" secondItem="G8h-RB-gyd" secondAttribute="top" constant="-9" id="DK4-8b-YaJ"/>
<constraint firstItem="qZ4-qB-r3O" firstAttribute="leading" secondItem="G8h-RB-gyd" secondAttribute="leading" id="WFY-ka-uhT"/>
<constraint firstAttribute="trailing" secondItem="qZ4-qB-r3O" secondAttribute="trailing" id="jid-yl-vki"/>
</constraints>
<shadow key="shadow">
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
</shadow>
</visualEffectView>
<button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sgW-1g-MOH">
<rect key="frame" x="186" y="13" width="114" height="32"/>
<constraints>
<constraint firstAttribute="height" constant="21" id="d55-vu-duj"/>
<constraint firstAttribute="width" constant="102" id="v47-Kn-aPA"/>
</constraints>
<buttonCell key="cell" type="push" title="Continue" bezelStyle="rounded" alignment="center" borderStyle="border" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="VSI-LD-Fkc">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
DQ
</string>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
<color key="value" red="0.5" green="0.0" blue="0.5" alpha="1" colorSpace="calibratedRGB"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</buttonCell>
<connections>
<action selector="continueOnboarding:" target="-2" id="VxO-5e-FH6"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="sgW-1g-MOH" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="OlA-UF-19Y"/>
<constraint firstAttribute="bottom" secondItem="G8h-RB-gyd" secondAttribute="bottom" constant="-10" id="Sme-p8-MK1"/>
<constraint firstItem="G8h-RB-gyd" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="Ugy-Fp-utH"/>
<constraint firstAttribute="bottom" secondItem="sgW-1g-MOH" secondAttribute="bottom" constant="20" id="Zuy-ve-Ywq"/>
<constraint firstItem="G8h-RB-gyd" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="bYK-JY-bx6"/>
<constraint firstAttribute="trailing" secondItem="G8h-RB-gyd" secondAttribute="trailing" id="tS5-KQ-4aS"/>
</constraints>
<point key="canvasLocation" x="185.5" y="348"/>
</customView>
</objects>
<resources>
<image name="Onboarding" width="916" height="794"/>
</resources>
</document>

13
Clocker/Onboarding/CLIntroViewController.h

@ -0,0 +1,13 @@
//
// CLIntroViewController.h
// Clocker
//
// Created by Abhishek Banthia on 1/19/16.
//
//
#import <Cocoa/Cocoa.h>
@interface CLIntroViewController : NSViewController
@end

59
Clocker/Onboarding/CLIntroViewController.m

@ -0,0 +1,59 @@
//
// CLIntroViewController.m
// Clocker
//
// Created by Abhishek Banthia on 1/19/16.
//
//
#import "CLIntroViewController.h"
#import <QuartzCore/QuartzCore.h>
#import "ApplicationDelegate.h"
@interface CLIntroViewController ()
@property (weak) IBOutlet NSImageView *onboardingImageView;
@end
@implementation CLIntroViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do view setup here.
// self.view.window.titleVisibility = NSWindowTitleHidden;
CALayer *viewLayer = [CALayer layer];
[viewLayer setBackgroundColor:CGColorCreateGenericRGB(255.0, 255.0, 255.0, 0.8)]; //RGB plus Alpha Channel
[self.view setWantsLayer:YES]; // view's backing store is using a Core Animation Layer
[self.view setLayer:viewLayer];
self.view.window.styleMask = NSFullSizeContentViewWindowMask;
}
- (IBAction)continueOnboarding:(NSButton *)sender
{
if ([sender.title isEqualToString:@"Get Started"])
{
[self.view.window close];
ApplicationDelegate *delegate = (ApplicationDelegate*)[NSApplication sharedApplication].delegate;
[delegate togglePanel:nil];
return;
}
self.onboardingImageView.image = [NSImage imageNamed:@"FinalOnboarding"];
[sender setTitle:@"Get Started"];
CATransition *transition = [CATransition animation];
transition.duration = 1.0f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
transition.type = kCATransitionMoveIn;
[self.view setWantsLayer:YES];
[self.onboardingImageView.layer addAnimation:transition forKey:nil];
}
@end

110
Clocker/Onboarding/CLOnboardingWindow.xib

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="CLOnboardingWindowController">
<connections>
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<rect key="contentRect" x="196" y="240" width="275" height="233"/>
<rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
<view key="contentView" id="se5-gp-TjO">
<rect key="frame" x="0.0" y="0.0" width="275" height="233"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="TaQ-Ln-Vip">
<rect key="frame" x="114" y="155" width="48" height="48"/>
<constraints>
<constraint firstAttribute="width" constant="48" id="Ll6-ju-UBQ"/>
<constraint firstAttribute="height" constant="48" id="kpd-df-Kmk"/>
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="ClockerIcon-256" id="2t2-AF-Gtf"/>
</imageView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oiI-iN-JcW">
<rect key="frame" x="18" y="120" width="239" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="C7v-6N-7K9"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Clocker" id="r8V-tn-VkN">
<font key="font" size="20" name="SFUIDisplay-Bold"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oyE-6j-Mni">
<rect key="frame" x="18" y="11" width="239" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="Ttg-Xe-RUI"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" placeholderString="Made by Abhishek Banthia" id="cdT-3T-Jmu">
<font key="font" size="11" name="SFUIDisplay-Light"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MQa-AK-s2j">
<rect key="frame" x="81" y="27" width="114" height="32"/>
<constraints>
<constraint firstAttribute="width" constant="102" id="17K-x2-WJw"/>
<constraint firstAttribute="height" constant="21" id="uWT-Rz-CCE"/>
</constraints>
<buttonCell key="cell" type="push" title="Continue" bezelStyle="rounded" alignment="center" borderStyle="border" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="TjC-Ot-oen">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
DQ
</string>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
<color key="value" red="0.5" green="0.0" blue="0.5" alpha="1" colorSpace="calibratedRGB"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</buttonCell>
<connections>
<action selector="continueButtonPressed:" target="-2" id="vNV-kl-MtP"/>
</connections>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wod-xv-dtj">
<rect key="frame" x="18" y="99" width="239" height="19"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Your timezone manager!" id="hQe-Z5-uca">
<font key="font" size="13" name="SFUIDisplay-Light"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="MQa-AK-s2j" firstAttribute="centerX" secondItem="se5-gp-TjO" secondAttribute="centerX" id="3QT-5g-r17"/>
<constraint firstItem="wod-xv-dtj" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="6V0-ex-bD0"/>
<constraint firstAttribute="trailing" secondItem="oyE-6j-Mni" secondAttribute="trailing" constant="20" id="Cnl-ve-VbG"/>
<constraint firstItem="oiI-iN-JcW" firstAttribute="top" secondItem="TaQ-Ln-Vip" secondAttribute="bottom" constant="5" id="M9K-qv-5Bd"/>
<constraint firstItem="TaQ-Ln-Vip" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="30" id="MAA-ac-ceo"/>
<constraint firstItem="oyE-6j-Mni" firstAttribute="top" secondItem="MQa-AK-s2j" secondAttribute="bottom" constant="6" id="U8v-lf-N46"/>
<constraint firstItem="oiI-iN-JcW" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="ajN-5l-kDS"/>
<constraint firstItem="wod-xv-dtj" firstAttribute="top" secondItem="oiI-iN-JcW" secondAttribute="bottom" constant="2" id="bed-o9-FYi"/>
<constraint firstItem="wod-xv-dtj" firstAttribute="centerX" secondItem="se5-gp-TjO" secondAttribute="centerX" id="bm9-w8-ea0"/>
<constraint firstItem="TaQ-Ln-Vip" firstAttribute="centerX" secondItem="se5-gp-TjO" secondAttribute="centerX" id="dV9-LG-Mh6"/>
<constraint firstAttribute="bottom" secondItem="oyE-6j-Mni" secondAttribute="bottom" constant="11" id="fGG-Ao-iJ2"/>
<constraint firstItem="oyE-6j-Mni" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="fMJ-gf-n5K"/>
<constraint firstAttribute="trailing" secondItem="wod-xv-dtj" secondAttribute="trailing" constant="20" id="kcg-ph-uGv"/>
<constraint firstItem="oiI-iN-JcW" firstAttribute="centerX" secondItem="se5-gp-TjO" secondAttribute="centerX" id="nnJ-Ie-tQW"/>
<constraint firstAttribute="trailing" secondItem="oiI-iN-JcW" secondAttribute="trailing" constant="20" id="ux4-02-bAj"/>
</constraints>
</view>
<connections>
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
</connections>
<point key="canvasLocation" x="295.5" y="171.5"/>
</window>
</objects>
<resources>
<image name="ClockerIcon-256" width="256" height="256"/>
</resources>
</document>

18
Clocker/Onboarding/CLOnboardingWindowController.h

@ -0,0 +1,18 @@
//
// CLOnboardingWindowController.h
// Clocker
//
// Created by Abhishek Banthia on 1/19/16.
//
//
#import <Cocoa/Cocoa.h>
#import "CLIntroViewController.h"
@interface CLOnboardingWindowController : NSWindowController
@property (strong, nonatomic) CLIntroViewController *introViewController;
+ (instancetype)sharedWindow;
@end

63
Clocker/Onboarding/CLOnboardingWindowController.m

@ -0,0 +1,63 @@
//
// CLOnboardingWindowController.m
// Clocker
//
// Created by Abhishek Banthia on 1/19/16.
//
//
#import "CLOnboardingWindowController.h"
#import <QuartzCore/QuartzCore.h>
@interface CLOnboardingWindowController ()
@end
static CLOnboardingWindowController *sharedOnboardingWindow;
@implementation CLOnboardingWindowController
- (void)windowDidLoad {
[super windowDidLoad];
CALayer *viewLayer = [CALayer layer];
[viewLayer setBackgroundColor:CGColorCreateGenericRGB(255.0, 255.0, 255.0, 0.8)]; //RGB plus Alpha Channel
[self.window.contentView setWantsLayer:YES]; // view's backing store is using a Core Animation Layer
[self.window.contentView setLayer:viewLayer];
self.window.titlebarAppearsTransparent = YES;
self.window.backgroundColor = [NSColor whiteColor];
self.window.titleVisibility = NSWindowTitleHidden;
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}
+ (instancetype)sharedWindow
{
if (sharedOnboardingWindow == nil)
{
/*Using a thread safe pattern*/
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedOnboardingWindow = [[self alloc] initWithWindowNibName:@"CLOnboardingWindow"];
});
}
return sharedOnboardingWindow;
}
- (IBAction)continueButtonPressed:(id)sender
{
self.introViewController = [[CLIntroViewController alloc] initWithNibName:@"CLIntroView" bundle:nil];
[[self.window animator] setContentSize:self.introViewController.view.frame.size];
[[self.window animator] setContentView:self.introViewController.view];
CGFloat xPos = NSWidth([[self.window screen] frame])/2 - NSWidth([self.window frame])/2;
CGFloat yPos = NSHeight([[self.window screen] frame])/2 - NSHeight([self.window frame])/2;
[self.window setFrame:NSMakeRect(xPos, yPos, NSWidth([self.window frame]), NSHeight([self.window frame])) display:YES];
}
@end

18
Clocker/Panel.xib

@ -60,9 +60,9 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="etF-33-bCB">
<rect key="frame" x="7" y="33" width="134" height="22"/>
<rect key="frame" x="7" y="33" width="154" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="130" id="32b-h6-joo"/>
<constraint firstAttribute="width" constant="150" id="32b-h6-joo"/>
<constraint firstAttribute="height" constant="22" id="vod-YN-iNX"/>
</constraints>
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" placeholderString="Timezone Name" id="rnh-AP-ooc">
@ -87,13 +87,13 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="101" translatesAutoresizingMaskIntoConstraints="NO" id="vnv-J2-7r1">
<rect key="frame" x="139" y="21" width="134" height="35"/>
<rect key="frame" x="159" y="21" width="114" height="35"/>
<constraints>
<constraint firstAttribute="height" constant="35" id="3WU-de-OQL"/>
<constraint firstAttribute="width" constant="130" id="cQV-gJ-zMz"/>
<constraint firstAttribute="width" constant="110" id="cQV-gJ-zMz"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" placeholderString="23:46 AM" id="g8s-EU-UHx">
<font key="font" size="27" name="SFUIDisplay-Thin"/>
<font key="font" size="22" name="SFUIDisplay-Thin"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
@ -203,7 +203,7 @@
</scroller>
</scrollView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" preferredMaxLayoutWidth="75" translatesAutoresizingMaskIntoConstraints="NO" id="rGL-w7-iSa">
<rect key="frame" x="97" y="29" width="84" height="17"/>
<rect key="frame" x="97" y="31" width="84" height="17"/>
<constraints>
<constraint firstAttribute="width" constant="80" id="XLu-0I-ACL"/>
<constraint firstAttribute="height" constant="17" id="j4s-Vf-pQQ"/>
@ -215,9 +215,9 @@
</textFieldCell>
</textField>
<slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="T7e-RS-eTE">
<rect key="frame" x="29" y="16" width="217" height="16"/>
<rect key="frame" x="29" y="13" width="217" height="19"/>
<constraints>
<constraint firstAttribute="height" constant="12" id="tQw-lm-Ify"/>
<constraint firstAttribute="height" constant="15" id="tQw-lm-Ify"/>
</constraints>
<sliderCell key="cell" state="on" alignment="left" maxValue="24" tickMarkPosition="above" sliderType="linear" id="V8R-sf-5hO" customClass="CLCustomSliderCell"/>
<connections>
@ -262,7 +262,7 @@
<constraint firstAttribute="bottom" secondItem="nTt-pf-Hw2" secondAttribute="bottom" constant="2" id="QoV-TI-KVJ"/>
<constraint firstAttribute="bottom" secondItem="OFy-u1-TnH" secondAttribute="bottom" constant="2" id="Ubf-Mv-WMp"/>
<constraint firstAttribute="trailing" secondItem="4Gd-Nv-fXr" secondAttribute="trailing" constant="-1" id="XP6-W0-2XT"/>
<constraint firstItem="T7e-RS-eTE" firstAttribute="top" secondItem="rGL-w7-iSa" secondAttribute="bottom" constant="-1" id="cuU-JZ-uRn"/>
<constraint firstItem="T7e-RS-eTE" firstAttribute="top" secondItem="rGL-w7-iSa" secondAttribute="bottom" constant="1" id="cuU-JZ-uRn"/>
<constraint firstItem="4Gd-Nv-fXr" firstAttribute="leading" secondItem="6" secondAttribute="leading" constant="-1" id="fHc-VQ-mJ3"/>
<constraint firstAttribute="trailing" secondItem="OFy-u1-TnH" secondAttribute="trailing" constant="5" id="p2a-qj-LHE"/>
<constraint firstItem="nTt-pf-Hw2" firstAttribute="leading" secondItem="6" secondAttribute="leading" id="pKl-Ay-0cB"/>

16
Clocker/PanelController.m

@ -84,8 +84,6 @@ NSString *const CLTimezoneCellViewIdentifier = @"timeZoneCell";
{
self.dateFormatter = [[NSDateFormatter alloc] init];
}
[self updateDefaultPreferences];
if ([[[NSUserDefaults standardUserDefaults] objectForKey:CLThemeKey] isEqualToString:@"Black"]) {
self.shutdownButton.image = [NSImage imageNamed:@"PowerIcon-White"];
@ -307,8 +305,9 @@ NSString *const CLTimezoneCellViewIdentifier = @"timeZoneCell";
CLTimezoneData *dataObject = [CLTimezoneData getCustomObject:self.defaultPreferences[row]];
NSTextView *customLabel = (NSTextView*)[cell.relativeDate.window fieldEditor:YES
forObject:cell.relativeDate];
NSTextView *customLabel = (NSTextView*)[cell.relativeDate.window
fieldEditor:YES
forObject:cell.relativeDate];
NSString *theme = [[NSUserDefaults standardUserDefaults] objectForKey:CLThemeKey];
if (theme.length > 0 && ![theme isEqualToString:@"Default"])
@ -330,7 +329,7 @@ NSString *const CLTimezoneCellViewIdentifier = @"timeZoneCell";
customLabel.insertionPointColor = [NSColor blackColor];
}
cell.relativeDate.stringValue = [dataObject getDateForTimeZoneWithFutureSliderValue:self.futureSliderValue];
cell.relativeDate.stringValue = [dataObject getDateForTimeZoneWithFutureSliderValue:self.futureSliderValue andDisplayType:CLPanelDisplay];
cell.time.stringValue = [dataObject getTimeForTimeZoneWithFutureSliderValue:self.futureSliderValue];
@ -379,9 +378,8 @@ NSString *const CLTimezoneCellViewIdentifier = @"timeZoneCell";
return;
}
CLTimezoneData *mutableTimeZoneData = [dataObject mutableCopy];
mutableTimeZoneData.customLabel = object;
[self.defaultPreferences replaceObjectAtIndex:row withObject:mutableTimeZoneData];
dataObject.customLabel = object;
[self.defaultPreferences replaceObjectAtIndex:row withObject:dataObject];
[[NSUserDefaults standardUserDefaults] setObject:self.defaultPreferences forKey:CLDefaultPreferenceKey];
[self.mainTableview reloadData];
}
@ -522,8 +520,6 @@ NSString *const CLTimezoneCellViewIdentifier = @"timeZoneCell";
[self.mainTableview setBackgroundColor:[NSColor whiteColor]];
self.window.alphaValue = 1;
}
}
@end

20
Clocker/Preferences/CLPreferencesView.xib

@ -179,11 +179,6 @@ CA
</searchFieldCell>
<connections>
<action selector="filterArray:" target="-2" id="MWr-sX-24E"/>
<binding destination="-2" name="editable" keyPath="self.activityInProgress" id="qG8-46-bev">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
</connections>
</searchField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KFC-NV-5A3">
@ -198,22 +193,15 @@ CA
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Wb6-yr-Pw4">
<rect key="frame" x="13" y="118" width="317" height="20"/>
<rect key="frame" x="11" y="118" width="321" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="QQQ-at-c1H"/>
</constraints>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="Please enter a timezone name" placeholderString="Please enter a timezone name" drawsBackground="YES" id="l4k-Vi-z4I">
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="Please enter a timezone name" placeholderString="Please enter a timezone name" id="l4k-Vi-z4I">
<font key="font" size="13" name="SFUIDisplay-Light"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.0" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
</textFieldCell>
<connections>
<binding destination="-2" name="hidden" keyPath="self.activityInProgress" id="62r-5u-wa3">
<dictionary key="options">
<string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
</connections>
</textField>
<progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="ifx-PO-gfq">
<rect key="frame" x="164" y="143" width="16" height="16"/>

12
Clocker/Preferences/CLPreferencesViewController.m

@ -164,9 +164,7 @@ NSString *const CLTryAgainMessage = @"Try again, maybe?";
}
return self.timeZoneArray[row];
}
return nil;
}
else if([[tableColumn identifier] isEqualToString:CLPreferencesCustomLabelIdentifier])
@ -229,8 +227,7 @@ NSString *const CLTryAgainMessage = @"Try again, maybe?";
dataObject.isFavourite = object;
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:dataObject];
[newArray replaceObjectAtIndex:row withObject:encodedObject];
self.selectedTimeZones = [NSMutableArray arrayWithArray:newArray];
[[NSUserDefaults standardUserDefaults] setObject:self.selectedTimeZones forKey:CLDefaultPreferenceKey];
[[NSUserDefaults standardUserDefaults] setObject:newArray forKey:CLDefaultPreferenceKey];
(dataObject.isFavourite.integerValue == 1) ?
@ -239,7 +236,9 @@ NSString *const CLTryAgainMessage = @"Try again, maybe?";
[[NSUserDefaults standardUserDefaults] setObject:nil
forKey:@"favouriteTimezone"];
[self.timezoneTableView reloadData];
[self refereshTimezoneTableView];
[self refreshMainTableview];
}
}
@ -412,7 +411,7 @@ NSString *const CLTryAgainMessage = @"Try again, maybe?";
[itemsToRemove addObject:self.selectedTimeZones[idx]];
}];
[self.selectedTimeZones removeObjectsInArray:itemsToRemove];
NSMutableArray *newDefaults = [[NSMutableArray alloc] initWithArray:self.selectedTimeZones];
@ -422,6 +421,7 @@ NSString *const CLTryAgainMessage = @"Try again, maybe?";
[self.timezoneTableView reloadData];
[self refreshMainTableview];
}
- (IBAction)filterTimezoneArray:(id)sender

5
Clocker/StatusItemView.m

@ -29,6 +29,7 @@
#import "StatusItemView.h"
#import "CommonStrings.h"
#import "CLTimezoneData.h"
#import "DateTools.h"
@implementation StatusItemView
@ -78,7 +79,9 @@
}
else
{
textField.stringValue = @"Icon";
textField.stringValue = [[NSDate date] formattedDateWithFormat:@"MMM dd HH:mm"
timeZone:[NSTimeZone systemTimeZone]
locale:[NSLocale currentLocale]];
}

21
Media.xcassets/EmptyPanel.imageset/Contents.json vendored

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "EmptyPanel.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

BIN
Media.xcassets/EmptyPanel.imageset/EmptyPanel.png vendored

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

21
Media.xcassets/FinalOnboarding.imageset/Contents.json vendored

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "FinalOnboarding.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

BIN
Media.xcassets/FinalOnboarding.imageset/FinalOnboarding.png vendored

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

21
Media.xcassets/Future Slider.imageset/Contents.json vendored

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Future Slider.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

BIN
Media.xcassets/Future Slider.imageset/Future Slider.png vendored

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

21
Media.xcassets/Main Panel.imageset/Contents.json vendored

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Main Panel.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

BIN
Media.xcassets/Main Panel.imageset/Main Panel.png vendored

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

21
Media.xcassets/Onboarding.imageset/Contents.json vendored

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Onboarding.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

BIN
Media.xcassets/Onboarding.imageset/Onboarding.png vendored

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Loading…
Cancel
Save