Browse Source

Merge branch 'master' of https://github.com/n0shake/Clocker

pull/101/head
Abhishek Banthia 3 years ago
parent
commit
cec31fd6ce
  1. 20
      Clocker/Clocker.xcodeproj/project.pbxproj
  2. 80
      Clocker/Clocker/en.lproj/Panel.xib
  3. 165
      Clocker/Clocker/hr.lproj/Localizable.strings
  4. 15
      Clocker/Events and Reminders/CalendarHandler.swift
  5. 2
      Clocker/Onboarding/OnboardingSearchController.swift
  6. 46
      Clocker/Overall App/Themer.swift
  7. 15
      Clocker/Panel/ParentPanelController+ModernSlider.swift
  8. 8
      Clocker/Panel/ParentPanelController.swift
  9. 2
      Clocker/Panel/UI/TimezoneDataSource.swift
  10. 1
      Clocker/Preferences/Menu Bar/StatusContainerView.swift
  11. 89
      Clocker/Preferences/Menu Bar/UpcomingEventStatusItemView.swift
  12. 30
      Clocker/Preferences/Preferences.storyboard

20
Clocker/Clocker.xcodeproj/project.pbxproj

@ -16,7 +16,6 @@
3531F7C426936C8300DF0111 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3531F7C026936C6E00DF0111 /* GoogleService-Info.plist */; };
3531F7C526936C8400DF0111 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3531F7C026936C6E00DF0111 /* GoogleService-Info.plist */; };
3531F7F52693882300DF0111 /* Keys.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3531F7F42693882300DF0111 /* Keys.plist */; };
3531F7F72693882300DF0111 /* Keys.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3531F7F42693882300DF0111 /* Keys.plist */; };
3531F80626938D7700DF0111 /* GoogleUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3531F7FC26938D7600DF0111 /* GoogleUtilities.framework */; };
3531F80726938D7700DF0111 /* GoogleUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3531F7FC26938D7600DF0111 /* GoogleUtilities.framework */; };
3531F80826938D7700DF0111 /* GoogleUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3531F7FC26938D7600DF0111 /* GoogleUtilities.framework */; };
@ -47,6 +46,7 @@
3531F82126938D7700DF0111 /* GoogleDataTransport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3531F80526938D7700DF0111 /* GoogleDataTransport.framework */; };
3531F82226938D7700DF0111 /* GoogleDataTransport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3531F80526938D7700DF0111 /* GoogleDataTransport.framework */; };
3531F82326938D7700DF0111 /* GoogleDataTransport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3531F80526938D7700DF0111 /* GoogleDataTransport.framework */; };
353B5BC52698B78A0023858D /* UpcomingEventStatusItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 353B5BC42698B78A0023858D /* UpcomingEventStatusItemView.swift */; };
357391872507277500D30819 /* TimeMarkerViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 357391852507277500D30819 /* TimeMarkerViewItem.swift */; };
357391882507277500D30819 /* HourMarkerViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 357391862507277500D30819 /* HourMarkerViewItem.xib */; };
3579765E2680208C009DDA6E /* ParentPanelController+ModernSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3579765D2680208C009DDA6E /* ParentPanelController+ModernSlider.swift */; };
@ -158,8 +158,6 @@
9AB6F1642259D1B900A44663 /* ParentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AB6F1632259D1B800A44663 /* ParentViewController.swift */; };
9AB6F1672259D23200A44663 /* PermissionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AB6F1662259D23200A44663 /* PermissionsViewController.swift */; };
9AB89E031CE97A4900EC8EB1 /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9AB89E021CE97A4900EC8EB1 /* Media.xcassets */; };
9ABF454E268FCF10002C779B /* Keys.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9ABF454D268FCF10002C779B /* Keys.plist */; };
9ABF454F268FCF10002C779B /* Keys.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9ABF454D268FCF10002C779B /* Keys.plist */; };
9ABF455B268FDABA002C779B /* CopyToClipboardTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABF4559268FDABA002C779B /* CopyToClipboardTests.swift */; };
9ABFB3801CA6882000E10745 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ABFB37F1CA6882000E10745 /* ApplicationServices.framework */; };
9AC678E41C1ABAB9003B4F6B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AC678E31C1ABAB9003B4F6B /* QuartzCore.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
@ -271,6 +269,8 @@
3531F80326938D7700DF0111 /* FirebaseInstallations.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseInstallations.framework; path = Frameworks/Firebase/FirebaseInstallations.framework; sourceTree = "<group>"; };
3531F80426938D7700DF0111 /* leveldb-library.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "leveldb-library.framework"; path = "Frameworks/Firebase/leveldb-library.framework"; sourceTree = "<group>"; };
3531F80526938D7700DF0111 /* GoogleDataTransport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleDataTransport.framework; path = Frameworks/Firebase/GoogleDataTransport.framework; sourceTree = "<group>"; };
353B5BC42698B78A0023858D /* UpcomingEventStatusItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpcomingEventStatusItemView.swift; sourceTree = "<group>"; };
353B5BC72698D4BB0023858D /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/Localizable.strings; sourceTree = "<group>"; };
3569A44E25441F320087E254 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = "<group>"; };
357391852507277500D30819 /* TimeMarkerViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeMarkerViewItem.swift; sourceTree = "<group>"; };
357391862507277500D30819 /* HourMarkerViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HourMarkerViewItem.xib; sourceTree = "<group>"; };
@ -422,7 +422,6 @@
9AB6F1632259D1B800A44663 /* ParentViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParentViewController.swift; sourceTree = "<group>"; };
9AB6F1662259D23200A44663 /* PermissionsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PermissionsViewController.swift; sourceTree = "<group>"; };
9AB89E021CE97A4900EC8EB1 /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Media.xcassets; sourceTree = "<group>"; };
9ABF454D268FCF10002C779B /* Keys.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Keys.plist; path = Internal/Keys.plist; sourceTree = "<group>"; };
9ABF4559268FDABA002C779B /* CopyToClipboardTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CopyToClipboardTests.swift; sourceTree = "<group>"; };
9ABFB37F1CA6882000E10745 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = System/Library/Frameworks/ApplicationServices.framework; sourceTree = SDKROOT; };
9AC678E31C1ABAB9003B4F6B /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
@ -548,6 +547,7 @@
3508CC99259A0001000E3530 /* StatusItemView.swift */,
3508CC9E259A000E000E3530 /* StatusItemHandler.swift */,
3508CCA9259A0027000E3530 /* StatusContainerView.swift */,
353B5BC42698B78A0023858D /* UpcomingEventStatusItemView.swift */,
);
path = "Menu Bar";
sourceTree = "<group>";
@ -882,7 +882,6 @@
DD4F7BF913C30F9F00825C6E = {
isa = PBXGroup;
children = (
9ABF454D268FCF10002C779B /* Keys.plist */,
35B2FEE4259A2C25005DA84D /* CoreModelKit */,
35B2FED4259A2244005DA84D /* CoreLoggerKit */,
35B2FEB1259A1649005DA84D /* StartupKit */,
@ -1110,6 +1109,7 @@
ar,
"pt-BR",
"zh-Hant",
hr,
);
mainGroup = DD4F7BF913C30F9F00825C6E;
productRefGroup = DD4F7C0513C30F9F00825C6E /* Products */;
@ -1183,14 +1183,12 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
9ABF454E268FCF10002C779B /* Keys.plist in Resources */,
9A13BAEA1CA88A76007C6CBE /* Localizable.strings in Resources */,
357391882507277500D30819 /* HourMarkerViewItem.xib in Resources */,
9AB6F15E2259D08300A44663 /* iVersion.bundle in Resources */,
35C36F972259EBB1002FA5C6 /* AppFeedbackWindow.xib in Resources */,
9A13BAE01CA882FA007C6CBE /* InfoPlist.strings in Resources */,
35C36F912259EAF4002FA5C6 /* Preferences.storyboard in Resources */,
3531F7F52693882300DF0111 /* Keys.plist in Resources */,
9AB89E031CE97A4900EC8EB1 /* Media.xcassets in Resources */,
9A13BAD61CA87F08007C6CBE /* Panel.xib in Resources */,
35C36F6B2259E0E1002FA5C6 /* FloatingWindow.xib in Resources */,
@ -1313,6 +1311,7 @@
35C36F582259DD8A002FA5C6 /* PanelTableView.swift in Sources */,
35C36F0F225961DA002FA5C6 /* TimePeriodCollection.swift in Sources */,
35C36F18225961DA002FA5C6 /* Date+Comparators.swift in Sources */,
353B5BC52698B78A0023858D /* UpcomingEventStatusItemView.swift in Sources */,
35C36FA02259ED6D002FA5C6 /* CalendarHandler.swift in Sources */,
35C36F1A225961DA002FA5C6 /* Date+Manipulations.swift in Sources */,
35C36F572259DD8A002FA5C6 /* TimezoneDataSource.swift in Sources */,
@ -1422,6 +1421,7 @@
9AA522D723416E6000C9E005 /* it */,
3569A44E25441F320087E254 /* pt-BR */,
35A6A4B925C5DEF300356073 /* zh-Hant */,
353B5BC72698D4BB0023858D /* hr */,
);
name = Localizable.strings;
path = Clocker;
@ -1568,7 +1568,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.13;
MARKETING_VERSION = 21.07.02;
MARKETING_VERSION = 21.07.03;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_BUNDLE_IDENTIFIER = com.abhishek.Clocker;
@ -2138,7 +2138,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.13;
MARKETING_VERSION = 21.07.02;
MARKETING_VERSION = 21.07.03;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "-ObjC";
"OTHER_SWIFT_FLAGS[arch=*]" = "-D DEBUG";
@ -2219,7 +2219,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.13;
MARKETING_VERSION = 21.07.02;
MARKETING_VERSION = 21.07.03;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "-ObjC";
"OTHER_SWIFT_FLAGS[arch=*]" = "-D RELEASE";

80
Clocker/Clocker/en.lproj/Panel.xib

@ -13,11 +13,14 @@
<outlet property="calendarColorView" destination="KFy-Xe-qhq" id="Qta-Vq-YyP"/>
<outlet property="futureSlider" destination="Vf2-uI-yf3" id="waZ-HW-18U"/>
<outlet property="futureSliderView" destination="C7R-Dq-MFr" id="IsR-aV-vjD"/>
<outlet property="goBackwardsButton" destination="aW8-hr-4Zh" id="EWT-EA-AGP"/>
<outlet property="goForwardButton" destination="Bmz-Z2-OvH" id="6bR-Ph-Nit"/>
<outlet property="leftButton" destination="WVY-D9-AAX" id="M2W-xG-chN"/>
<outlet property="leftField" destination="8Qj-Y9-Okf" id="q3N-ht-jCd"/>
<outlet property="mainTableView" destination="dFw-ts-8OZ" id="2kY-dd-rDV"/>
<outlet property="modernContainerView" destination="8W7-rS-Uob" id="qgZ-SS-ayy"/>
<outlet property="modernSlider" destination="lxA-64-3QU" id="kS5-ub-7gV"/>
<outlet property="modernSliderLabel" destination="e2d-EI-Dm0" id="eby-rL-B21"/>
<outlet property="nextEventLabel" destination="rld-Ag-KL1" id="GTY-j3-A1g"/>
<outlet property="pinButton" destination="YXE-4J-5cn" id="k6V-HK-7XG"/>
<outlet property="preferencesButton" destination="Ctq-BV-GPN" id="cdL-5h-qmx"/>
@ -42,15 +45,15 @@
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="1000" y="379" width="350" height="460"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
<view key="contentView" focusRingType="none" misplaced="YES" id="6" customClass="BackgroundPanelView" customModule="Clocker" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="350" height="460"/>
<view key="contentView" focusRingType="none" id="6" customClass="BackgroundPanelView" customModule="Clocker" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="350" height="440"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<stackView focusRingType="none" distribution="fill" orientation="vertical" alignment="leading" spacing="0.0" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="OZA-6o-SbE">
<rect key="frame" x="0.0" y="0.0" width="350" height="410"/>
<rect key="frame" x="0.0" y="0.0" width="350" height="440"/>
<subviews>
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="96" horizontalPageScroll="1" verticalLineScroll="96" verticalPageScroll="1" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" scrollerKnobStyle="light" translatesAutoresizingMaskIntoConstraints="NO" id="4Gd-Nv-fXr">
<rect key="frame" x="-20" y="145" width="370" height="265"/>
<rect key="frame" x="-20" y="175" width="370" height="265"/>
<clipView key="contentView" focusRingType="none" drawsBackground="NO" copiesOnScroll="NO" id="4MZ-Di-yNR">
<rect key="frame" x="0.0" y="0.0" width="370" height="265"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
@ -260,7 +263,7 @@
</scroller>
</scrollView>
<customView wantsLayer="YES" focusRingType="none" translatesAutoresizingMaskIntoConstraints="NO" id="C7R-Dq-MFr" userLabel="Slider View">
<rect key="frame" x="0.0" y="115" width="350" height="30"/>
<rect key="frame" x="0.0" y="235" width="350" height="30"/>
<subviews>
<slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Vf2-uI-yf3">
<rect key="frame" x="7" y="2" width="201" height="23"/>
@ -309,13 +312,13 @@
</constraints>
</customView>
<customView wantsLayer="YES" focusRingType="none" id="8W7-rS-Uob" userLabel="Modern Slider" customClass="ModernSliderContainerView" customModule="Clocker" customModuleProvider="target">
<rect key="frame" x="0.0" y="165" width="350" height="40"/>
<rect key="frame" x="0.0" y="165" width="350" height="70"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<scrollView wantsLayer="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO" horizontalScrollElasticity="allowed" verticalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="htc-pO-AqH">
<rect key="frame" x="0.0" y="0.0" width="350" height="50"/>
<rect key="frame" x="0.0" y="30" width="350" height="40"/>
<clipView key="contentView" drawsBackground="NO" id="N1e-zE-F86" customClass="DraggableClipView" customModule="Clocker" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="350" height="50"/>
<rect key="frame" x="0.0" y="0.0" width="350" height="40"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<collectionView focusRingType="none" allowsEmptySelection="NO" id="lxA-64-3QU">
@ -342,15 +345,70 @@
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="hma-wI-Sc9" userLabel="Modern Slider Metadata View" customClass="ClockerTextBackgroundView" customModule="Clocker" customModuleProvider="target">
<rect key="frame" x="125" y="0.0" width="100" height="20"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="e2d-EI-Dm0">
<rect key="frame" x="-2" y="0.0" width="104" height="20"/>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="Label" id="6ph-Pe-Ayg">
<font key="font" size="12" name="Avenir-Book"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="e2d-EI-Dm0" secondAttribute="bottom" id="8gX-z3-MxE"/>
<constraint firstItem="e2d-EI-Dm0" firstAttribute="top" secondItem="hma-wI-Sc9" secondAttribute="top" id="Ej7-XJ-dNL"/>
<constraint firstAttribute="height" constant="20" id="gFM-oL-xxD"/>
<constraint firstAttribute="width" constant="100" id="lD4-UL-UOh"/>
<constraint firstItem="e2d-EI-Dm0" firstAttribute="leading" secondItem="hma-wI-Sc9" secondAttribute="leading" id="siz-5L-N0Q"/>
<constraint firstAttribute="trailing" secondItem="e2d-EI-Dm0" secondAttribute="trailing" id="vFB-mV-hbB"/>
</constraints>
</customView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aW8-hr-4Zh">
<rect key="frame" x="75" y="0.0" width="45" height="20"/>
<constraints>
<constraint firstAttribute="width" constant="45" id="2Ef-45-5pI"/>
<constraint firstAttribute="height" constant="20" id="Cgv-Fx-BfO"/>
</constraints>
<buttonCell key="cell" type="bevel" title="Back" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="cLW-iV-S4k">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="goBackward:" target="-2" id="oE4-v9-7LC"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bmz-Z2-OvH">
<rect key="frame" x="230" y="0.0" width="45" height="20"/>
<constraints>
<constraint firstAttribute="width" constant="45" id="ZOn-jQ-Wdp"/>
<constraint firstAttribute="height" constant="20" id="gfg-y1-zD1"/>
</constraints>
<buttonCell key="cell" type="bevel" title="Forward" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="hsm-i0-5Ct">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="goForward:" target="-2" id="ax0-sN-nD8"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="40" id="5HT-Ps-YH3"/>
<constraint firstItem="Bmz-Z2-OvH" firstAttribute="leading" secondItem="hma-wI-Sc9" secondAttribute="trailing" constant="5" id="1xy-0v-oyi"/>
<constraint firstItem="aW8-hr-4Zh" firstAttribute="centerY" secondItem="hma-wI-Sc9" secondAttribute="centerY" id="2ct-Wg-TX8"/>
<constraint firstAttribute="height" constant="70" id="5HT-Ps-YH3"/>
<constraint firstItem="Bmz-Z2-OvH" firstAttribute="centerY" secondItem="hma-wI-Sc9" secondAttribute="centerY" id="6aM-Qm-05e"/>
<constraint firstItem="e2d-EI-Dm0" firstAttribute="leading" secondItem="aW8-hr-4Zh" secondAttribute="trailing" constant="5" id="8cY-4o-YNN"/>
<constraint firstItem="htc-pO-AqH" firstAttribute="top" secondItem="8W7-rS-Uob" secondAttribute="top" id="Ag8-2G-tVA"/>
<constraint firstItem="hma-wI-Sc9" firstAttribute="centerX" secondItem="8W7-rS-Uob" secondAttribute="centerX" id="GGe-go-nVx"/>
<constraint firstItem="htc-pO-AqH" firstAttribute="leading" secondItem="8W7-rS-Uob" secondAttribute="leading" id="QmJ-Dd-WLb"/>
<constraint firstAttribute="bottom" secondItem="htc-pO-AqH" secondAttribute="bottom" priority="750" id="YCJ-zB-dvc"/>
<constraint firstAttribute="bottom" secondItem="hma-wI-Sc9" secondAttribute="bottom" id="TDr-Pa-iYA"/>
<constraint firstAttribute="bottom" secondItem="htc-pO-AqH" secondAttribute="bottom" priority="750" constant="30" id="YCJ-zB-dvc"/>
<constraint firstAttribute="trailing" secondItem="htc-pO-AqH" secondAttribute="trailing" id="esR-My-uoD"/>
</constraints>
<accessibility identifier="Modern Slider"/>
<accessibility identifier="Modern Slider Container"/>
</customView>
<customView identifier="Review Cell" focusRingType="none" translatesAutoresizingMaskIntoConstraints="NO" id="TDn-Kk-KkV" userLabel="Review View">
<rect key="frame" x="0.0" y="115" width="350" height="50"/>

165
Clocker/Clocker/hr.lproj/Localizable.strings

@ -0,0 +1,165 @@
/*
Localizable.strings
Clocker
Created by Abhishek Banthia on 7/9/21.
*/
"CFBundleDisplayName" = "Clocker";
"Thank you for helping make Clocker even better!" = "Hvala što pomažeš poboljšati Clocker!";
"iRateMessageTitle" = "Ocijeni %@";
"iRateAppMessage" = "Ako voliš koristiti %@, ocijeni program. Postupak ocjenjivanja traje manje od jedne minute. Hvala na podršci!";
"iRateGameMessage" = "Ako voliš igrati %@, ocijeni program. Postupak ocjenjivanja traje manje od jedne minute. Hvala na podršci!";
"iRateCancelButton" = "Ne, hvala";
"iRateRateButton" = "Ocijeni";
"iRateRemindButton" = "Podsjeti me kasnije";
"iRateUpdateMessage" = "Sada aktualizirati?";
"ClockerVersion" = "Verzija %@";
"CLFeedbackAlertTitle" = "Hvala što pomažeš poboljšati Clocker!";
"app-name" = "Clocker";
"start-at-login" = "Pokreni nakon prijave";
"setup-steps" = "Za postavljanje programa Clocker potrebna su samo tri koraka";
"Permissions-Header" = "Dozvole";
"See your next Calendar event here." = "Ovdje pogledaj svoje sljedeće kalendarske događaje.";
"Click here to start." = "Pritisni ovdje za pokretanje.";
"Reminders Access" = "Pristup podsjetnicima";
"Calendar Access" = "Pristup kalendaru";
"Permissions" = "Dozvole";
"Calendar Detail" = "Predstojeći događaji iz tvojih osobnih i zajedničkih kalendara mogu se prikazati u traci izbornika i na ploči.";
"Reminders Detail" = "Postavi podsjetnike u tvoju vremensku zonu mjesta. Tvoji se podsjetnici spremaju u standardni program Podsjetnici.";
"Privacy Text" = "Ovo možeš kasnije promijeniti u odjeljku Privatnost u Postavkama sustava.";
"Granted Button Text" = "Dozvoljeno";
"Denied Button Text" = "Zabranjeno";
"Grant Button Text" = "Dozvoli";
// Welcome Onboarding
"It only takes 3 steps to setup Clocker." = "Za postavljanje programa Clocker potrebna su samo tri koraka.";
"Get Started" = "PoÄŤetak";
// Tab Item Titles
"Preferences Tab" = "Postavke";
"Appearance Tab" = "Izgled";
"Calendar Tab" = "Kalendar";
"About Tab" = "Informacije";
"Permissions Tab" = "Dozvole";
// General Preferences Screen
"Start at Login" = "Pokreni Clocker nakon prijave";
"Sort by Time Difference" = "Razvrstaj po vremenskoj ralzici";
"Sort by Name" = "Razvrstaj po imenu";
"Sort by Label" = "Razvrstaj po oznaci";
"Search Field Placeholder" = "Upiši grad, državu ili zemlju";
"No Timezone Selected" = "Odaberi vremensku zonu!";
"Max Timezones Selected" = "OgraniÄŤeno na 100 vremenskih zona!";
"Max Search Characters" = "OgraniÄŤeno na 50 znakova!";
"Add Button Title" = "Dodaj";
"Close Button Title" = "Zatvori";
// Onboarding
"Open Clocker At Login" = "Otvori Clocker nakon prijave";
"Launch Clocker" = "Pokreni Clocker";
// Welcome Onboarding
"It only takes 3 steps to set up Clocker." = "Za postavljanje programa Clocker potrebna su samo tri koraka.";
"Get Started" = "PoÄŤetak";
// Permissions
"Calendar Access Title" = "Pristup kalendaru";
"Reminders Access Title" = "Pristup podsjetnicima";
"Later Config Description" = "Mogu se kasnije konfigurirati u postavkama sustava.";
"Back" = "Natrag";
"Continue" = "Nastavi";
"Clocker is more useful when it can display events from your calendars." = "Clocker je korisniji kad može prikazivati događaje u tvojim kalendarima.";
"Clocker is more useful when it can display events from your calendars. You can change this setting in System Preferences › Security & Privacy › Privacy." = "Clocker je korisniji kad može prikazivati događaje u tvojim kalendarima. Ovu postavku možeš promijeniti u Postavke sustava › Sigurnost i privatnost › Privatnost.";
/* Text for button that takes the user to the System Preferences app. In case the user hasn't given Calendar/Reminders access permission, this button takes you to the System Preferences app where the user can give proper permissions to Clocker. */
"Launch Preferences" = "Pokreni postavke";
"Grant Access" = "Dopusti pristup";
"Upcoming events from your personal and shared calendars can be shown in the menubar and the panel." = "Predstojeći događaji iz tvojih osobnih i zajedničkih kalendara mogu se prikazati u traci izbornika i na ploči.";
"Granted" = "Dodijeljeno";
"Denied" = "Odbijeno";
"Grant" = "Odobrenje";
"Unexpected" = "NeoÄŤekivano";
// Onboarding Search
"Quick Add Locations" = "Brzo dodavanje mjesta";
"More search options in Clocker Preferences." = "Daljnje opcije pretage u Clocker postavkama.";
"Enter 3 or more characters for locations you'll like to add" = "Upiši tri ili više znakova za mjesta koja želiš dodati";
// Start at Login
"Launch at Login" = "Pokreni nakon prijave";
"This can be configured later in Clocker Preferences." = "Ovo se moĹľe kasnije konfigurirati u Clocker postavkama.";
"Should Clocker open automatically on startup?" = "Želiš li automatski pokrenuti Clocker nakon pokretanja računala?";
// Final Onboarding Screen
"You're all set!" = "Sve je spremno!";
"Thank you for the details." = "Hvala ti na detalju.";
"You'll see a clock icon in your Menu Bar when you launch the app. If you'd like to see a dock icon, go to Preferences." = "Kad pokreneš program, u traci izbornika vidjet ćeš ikonu sata. Ako želiš vidjeti ikonu u traci programa, idi na Postavke.";
"If you'd like to help us localize the app in your language or receive infrequent app-related updates, please enter your email!" = "Ako želiš pomoći prevesti program na tvoj jezik ili primati rijetke obavijesti o novim verzijama programa, upiši tvoju e-mail adresu!";
// Appearance Tab
"Panel Theme" = "Tema ploÄŤe";
"Favourite a timezone to enable menubar display options." = "Odaberi vremensku zonu za aktiviranje opcija prikaza trake izbornika.";
"Main Panel Options" = "Opcije glavne ploÄŤe";
"Time Format" = "Format za vrijeme";
"Day Display Options" = "Opcije za prikaz dana";
"Show Future Slider" = "Prikaži klizač budućnosti";
"Show Sunrise/Sunset" = "PrikaĹľi izlazak/zalazak sunca";
"Display the time in seconds" = "PrikaĹľi vrijeme u sekundama";
"Larger Text" = "Veći tekst";
"Future Slider Range" = "Klizač za raspon budućnosti";
"Include Date" = "UkljuÄŤi datum";
"Include Day" = "UkljuÄŤi dan";
"Include Place Name" = "UkljuÄŤi ime mjesta";
"Menubar Display Options" = "Opcije prikaza izbornika";
/* Appears in Preferences -> Appearance which allows the user to switch between the compact and standard menubar mode. It doesn't lead anywhere. */
"Menubar Mode" = "Modus izbornika";
"Preview" = " Pregled";
"Miscellaneous" = "Razno";
// Empty View
"No places added" = "Nema dodanih mjesta";
// Panel
"No upcoming event." = "Nema predstojećih događaja.";
"You have no events scheduled for tomorrow." = "Za sutra nemaš zakazanih događaja.";
// Review
"Enjoy using Clocker?" = "Voliš Clocker?";
// App Feedback
"Tell us what you think!" = "Javi nam što misliš!";
"Contact Information (Optional)" = "Kontaktni podaci (opcionalno)";
"Contact fields are optional! Your contact information will let us contact you in case we need more information or can help!" = "Polja za kontakt nisu obavezna! Tvoji kontaktni podaci omogućit će nam da te kontaktiramo u slučaju da trebamo daljnje informacije ili ako možemo pomoći!";
// About View Screen
"Feedback is always welcome:" = "Uvijek se radujemo povratnim informacijama:";
// Calendars View
"Upcoming Event View Options" = "Opcije prikaza predstojećih događaja";
"Show Upcoming Event View" = "Prikaži prikaz predstojećih događaja";
"Show All Day Meetings" = "PrikaĹľi cjelodnevne sastanke";
"Show Next Meeting Title in Menubar" = "Prikaži sljedeći sastanak u traci izbornika";
"Truncate menubar text longer than" = "Skrati tekst izbone trake koji je duĹľi od";
"characters" = "znakova";
"Show events from" = "Prikaži događaje od";
"If meeting title is \"Meeting with Neel\" and truncate length is set to 5, text in menubar will appear as \"Meeti...\"" = "Ako je naslov sastanka „Sastanak s Vladimirom”, a kraćenje je postavljeno na 5, tekst na traci pojavit će se kao „Sasta …”";
// Notes Popover
"Reminder Set" = "Postavljanje podsjetnika";
"Successfully set." = "Uspješno postavljeno.";
// Errors
"You're offline, maybe?" = "Možda nemaš vezu s internetom?";
"Try again, maybe?" = "Želiš li ponovo pokušati?";
"The Internet connection appears to be offline." = "ÄŚini se da ne postoji veza s internetom.";
// UI Tests
"New Zealand" = "Novi Zeland";
"Florida" = "Florida";
"San Francisco" = "San Francisco";
// DST changes
"Daylights Saving transition will occur in < 24 hours" = "Daylights Saving transition will occur in < 24 hours";
"Copied to Clipboard" = "Copied to Clipboard";

15
Clocker/Events and Reminders/CalendarHandler.swift

@ -158,7 +158,7 @@ extension EventCenter {
let relevantEvents = filteredEvents[autoupdatingCalendar.startOfDay(for: Date())] ?? []
let filteredEvent = relevantEvents.filter {
$0.event.isAllDay == false && $0.event.startDate.timeIntervalSinceNow > 0
$0.event.isAllDay == false && $0.event.startDate.timeIntervalSinceNow > -300
}.first
if let firstEvent = filteredEvent {
@ -424,4 +424,17 @@ struct EventInfo {
let isAllDay: Bool
let isSingleDay: Bool
let meetingURL: URL?
func metadataForMeeting() -> String {
let timeIntervalSinceNowForMeeting = event.startDate.timeIntervalSinceNow
if (timeIntervalSinceNowForMeeting < 0 && timeIntervalSinceNowForMeeting > -300) {
return "started \(event.startDate.shortTimeAgoSinceNow) ago."
} else {
let timeSince = Date().timeAgo(since: event.startDate)
let withoutAn = timeSince.replacingOccurrences(of: "an", with: CLEmptyString)
let withoutAgo = withoutAn.replacingOccurrences(of: "ago", with: CLEmptyString)
return "in \(withoutAgo.lowercased())"
}
}
}

2
Clocker/Onboarding/OnboardingSearchController.swift

@ -61,7 +61,7 @@ class OnboardingSearchController: NSViewController {
resultsTableView.reloadData()
func setupUndoButton() {
let font = NSFont(name: "Avenir", size: 13)!
let font = NSFont(name: "Avenir", size: 13) ?? NSFont.systemFont(ofSize: 13)
let attributes = [NSAttributedString.Key.foregroundColor: NSColor.linkColor,
NSAttributedString.Key.font: font]
undoButton.attributedTitle = NSAttributedString(string: "UNDO", attributes: attributes)

46
Clocker/Overall App/Themer.swift

@ -105,7 +105,7 @@ extension Themer {
return themeIndex == .dark ? NSColor.white : NSColor.gray
}
func mainControlColor() -> NSColor {
func mainBackgroundColor() -> NSColor {
if #available(macOS 10.14, *) {
switch themeIndex {
case .light:
@ -113,26 +113,27 @@ extension Themer {
case .dark:
return NSColor(deviceRed: 42.0 / 255.0, green: 42.0 / 255.0, blue: 42.0 / 255.0, alpha: 1.0)
case .system:
return NSColor.controlBackgroundColor
return retrieveCurrentSystem() == .light ? NSColor.white : NSColor.windowBackgroundColor
}
}
return themeIndex == .light ? NSColor.white : NSColor(deviceRed: 42.0 / 255.0, green: 42.0 / 255.0, blue: 42.0 / 255.0, alpha: 1.0)
return themeIndex == .light ? NSColor.white : NSColor(deviceRed: 55.0 / 255.0, green: 71.0 / 255.0, blue: 79.0 / 255.0, alpha: 1.0)
}
func mainBackgroundColor() -> NSColor {
if #available(macOS 10.14, *) {
switch themeIndex {
case .light:
return NSColor.white
case .dark:
return NSColor(deviceRed: 42.0 / 255.0, green: 42.0 / 255.0, blue: 42.0 / 255.0, alpha: 1.0)
case .system:
return NSColor.windowBackgroundColor
private func retrieveCurrentSystem() -> Theme {
if #available(OSX 10.15, *) {
let appearanceDescription = NSApplication.shared.effectiveAppearance.debugDescription.lowercased()
if appearanceDescription.contains("dark") {
return .dark
}
} else if #available(OSX 10.14, *) {
if let appleInterfaceStyle = UserDefaults.standard.object(forKey: "AppleInterfaceStyle") as? String {
if appleInterfaceStyle.lowercased().contains("dark") {
return .dark
}
}
return themeIndex == .light ? NSColor.white : NSColor(deviceRed: 55.0 / 255.0, green: 71.0 / 255.0, blue: 79.0 / 255.0, alpha: 1.0)
}
return .light
}
func mainTextColor() -> NSColor {
@ -433,7 +434,7 @@ extension Themer {
case .dark:
return NSColor(deviceRed: 42.0 / 255.0, green: 55.0 / 255.0, blue: 62.0 / 255.0, alpha: 1.0)
case .system:
return NSColor.controlBackgroundColor
return retrieveCurrentSystem() == .light ? NSColor(deviceRed: 241.0 / 255.0, green: 241.0 / 255.0, blue: 241.0 / 255.0, alpha: 1.0) : NSColor.controlBackgroundColor
}
}
@ -451,7 +452,20 @@ extension Themer {
}
}
func symbolImage(for name: String) -> NSImage? {
func filledTrashImage() -> NSImage? {
return symbolImage(for: "trash.fill")
}
// Modern Slider
func goBackwardsImage() -> NSImage? {
return symbolImage(for: "gobackward.15")
}
func goForwardsImage() -> NSImage? {
return symbolImage(for: "goforward.15")
}
private func symbolImage(for name: String) -> NSImage? {
assert(name.isEmpty == false)
if #available(OSX 11.0, *) {

15
Clocker/Panel/ParentPanelController+ModernSlider.swift

@ -18,6 +18,12 @@ extension ParentPanelController: NSCollectionViewDataSource {
extension ParentPanelController {
func setupModernSliderIfNeccessary() {
if modernSlider != nil {
goBackwardsButton.image = Themer.shared().goBackwardsImage()
goForwardButton.image = Themer.shared().goForwardsImage()
goForwardButton.isContinuous = true
goBackwardsButton.isContinuous = true
modernSlider.enclosingScrollView?.scrollerInsets = NSEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
modernSlider.enclosingScrollView?.backgroundColor = NSColor.clear
modernSlider.setAccessibility("ModernSlider")
@ -78,10 +84,9 @@ extension ParentPanelController {
direction: .forward)!
if shouldUpdate {
// modernSliderLabel.stringValue = timezoneFormattedStringRepresentation(hourQuarterDate)
modernSliderLabel.stringValue = timezoneFormattedStringRepresentation(hourQuarterDate)
} else {
// let fullString = NSMutableAttributedString(string: "Time Scroller")
// modernSliderLabel.attributedStringValue = fullString
modernSliderLabel.stringValue = "Time Scroller"
}
return hourQuarterDate
@ -93,12 +98,12 @@ extension ParentPanelController {
if index > (centerPoint + 1) {
let remainder = (index % (centerPoint + 1))
let nextDate = Calendar.current.date(byAdding: .minute, value: remainder * 15, to: closestQuarterTimeRepresentation ?? Date())!
// modernSliderLabel.stringValue = timezoneFormattedStringRepresentation(nextDate)
modernSliderLabel.stringValue = timezoneFormattedStringRepresentation(nextDate)
return nextDate.minutes(from: Date()) + 1
} else if index <= centerPoint {
let remainder = centerPoint - index + 1
let previousDate = Calendar.current.date(byAdding: .minute, value: -1 * remainder * 15, to: closestQuarterTimeRepresentation ?? Date())!
// modernSliderLabel.stringValue = timezoneFormattedStringRepresentation(previousDate)
modernSliderLabel.stringValue = timezoneFormattedStringRepresentation(previousDate)
return previousDate.minutes(from: Date())
} else {
setModernSliderLabel(true)

8
Clocker/Panel/ParentPanelController.swift

@ -92,6 +92,8 @@ class ParentPanelController: NSWindowController {
@IBOutlet var modernSlider: NSCollectionView!
@IBOutlet var modernSliderLabel: NSTextField!
@IBOutlet var modernContainerView: ModernSliderContainerView!
@IBOutlet var goBackwardsButton: NSButton!
@IBOutlet var goForwardButton: NSButton!
var defaultPreferences: [Data] {
return DataStore.shared().timezones()
@ -840,11 +842,7 @@ class ParentPanelController: NSWindowController {
return
}
let timeSince = Date().timeAgo(since: upcomingEvent.event.startDate)
let withoutAn = timeSince.replacingOccurrences(of: "an", with: CLEmptyString)
let withoutAgo = withoutAn.replacingOccurrences(of: "ago", with: CLEmptyString)
self.setCalendarButtonTitle(buttonTitle: "in \(withoutAgo.lowercased())")
self.setCalendarButtonTitle(buttonTitle: upcomingEvent.metadataForMeeting())
if upcomingEvent.meetingURL != nil {
self.whiteRemoveButton.image = Themer.shared().videoCallImage()

2
Clocker/Panel/UI/TimezoneDataSource.swift

@ -148,7 +148,7 @@ extension TimezoneDataSource: NSTableViewDataSource, NSTableViewDelegate {
})
if #available(OSX 11.0, *) {
swipeToDelete.image = Themer.shared().symbolImage(for: "trash.fill")
swipeToDelete.image = Themer.shared().filledTrashImage()
} else {
swipeToDelete.image = NSImage(named: NSImage.Name("Trash"))

1
Clocker/Preferences/Menu Bar/StatusContainerView.swift

@ -51,7 +51,6 @@ func compactWidth(for timezone: TimezoneData) -> Int {
totalWidth += 20
}
print("-- Compact Width is \(totalWidth)")
return totalWidth
}

89
Clocker/Preferences/Menu Bar/UpcomingEventStatusItemView.swift

@ -0,0 +1,89 @@
// Copyright © 2015 Abhishek Banthia
import Foundation
import AppKit
class UpcomingEventStatusItemView: NSView {
static let containerWidth = 70
private let nextEventField = NSTextField(labelWithString: "Next Event")
private let etaField = NSTextField(labelWithString: "5 mins")
var dataObject: EventInfo! {
didSet {
initialSetup()
}
}
private var timeAttributes: [NSAttributedString.Key: AnyObject] {
let textColor = hasDarkAppearance ? NSColor.white : NSColor.black
let attributes = [
NSAttributedString.Key.font: compactModeTimeFont,
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
return attributes
}
private var textFontAttributes: [NSAttributedString.Key: Any] {
let textColor = hasDarkAppearance ? NSColor.white : NSColor.black
let textFontAttributes = [
NSAttributedString.Key.font: NSFont.boldSystemFont(ofSize: 10),
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
return textFontAttributes
}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
[etaField, nextEventField].forEach {
$0.wantsLayer = true
$0.applyDefaultStyle()
$0.translatesAutoresizingMaskIntoConstraints = false
addSubview($0)
}
etaField.disableWrapping()
NSLayoutConstraint.activate([
nextEventField.leadingAnchor.constraint(equalTo: leadingAnchor),
nextEventField.trailingAnchor.constraint(equalTo: trailingAnchor),
nextEventField.topAnchor.constraint(equalTo: topAnchor, constant: 7),
nextEventField.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.35),
])
NSLayoutConstraint.activate([
etaField.leadingAnchor.constraint(equalTo: leadingAnchor),
etaField.trailingAnchor.constraint(equalTo: trailingAnchor, constant: 0),
etaField.topAnchor.constraint(equalTo: nextEventField.bottomAnchor),
etaField.bottomAnchor.constraint(equalTo: bottomAnchor),
])
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func initialSetup() {
nextEventField.attributedStringValue = NSAttributedString(string: "Next Event", attributes: textFontAttributes)
etaField.attributedStringValue = NSAttributedString(string: dataObject.metadataForMeeting(), attributes: timeAttributes)
}
func updateWithNextEventInfo(_ metadata: String) {
nextEventField.attributedStringValue = NSAttributedString(string: "Next Event", attributes: textFontAttributes)
etaField.attributedStringValue = NSAttributedString(string: metadata, attributes: timeAttributes)
}
override func mouseDown(with event: NSEvent) {
super.mouseDown(with: event)
guard let mainDelegate = NSApplication.shared.delegate as? AppDelegate else {
return
}
mainDelegate.togglePanel(event)
}
}

30
Clocker/Preferences/Preferences.storyboard

@ -590,7 +590,7 @@
<outlet property="truncateAccessoryLabel" destination="IXx-xe-JuJ" id="K0V-Et-EiN"/>
<outlet property="truncateTextField" destination="QvL-RL-y11" id="Jqj-Sy-bkR"/>
<outlet property="truncateTextLabel" destination="94u-Ea-XeF" id="KQR-tK-kDM"/>
<outlet property="upcomingEventView" destination="8pM-Qz-i7L" id="DjH-hd-v16"/>
<outlet property="upcomingEventView" destination="c5D-oS-eI6" id="N8W-ha-UKC"/>
</connections>
</viewController>
<customObject id="C2F-OS-twj" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
@ -909,11 +909,11 @@
</slider>
<scrollView borderType="line" autohidesScrollers="YES" horizontalLineScroll="113" horizontalPageScroll="10" verticalLineScroll="113" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ytg-0u-Mtu">
<rect key="frame" x="122" y="81" width="400" height="100"/>
<clipView key="contentView" ambiguous="YES" id="gnX-f5-31D">
<clipView key="contentView" id="gnX-f5-31D">
<rect key="frame" x="1" y="1" width="398" height="98"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="111" rowSizeStyle="automatic" viewBased="YES" id="KbJ-p4-i6E">
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="111" rowSizeStyle="automatic" viewBased="YES" id="KbJ-p4-i6E">
<rect key="frame" x="0.0" y="0.0" width="412" height="113"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
@ -1491,7 +1491,7 @@
<windowStyleMask key="styleMask" closable="YES" miniaturizable="YES" nonactivatingPanel="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="120" y="64" width="345" height="320"/>
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1025"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
<value key="minSize" type="size" width="345" height="320"/>
<value key="maxSize" type="size" width="345" height="320"/>
<view key="contentView" misplaced="YES" id="MAe-t5-3A2">
@ -1499,7 +1499,7 @@
<autoresizingMask key="autoresizingMask"/>
<subviews>
<searchField toolTip="Search a timezone" wantsLayer="YES" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Dha-h9-Nd0" customClass="ClockerSearchField" customModule="Clocker" customModuleProvider="target">
<rect key="frame" x="8" y="49" width="320" height="23"/>
<rect key="frame" x="8" y="277" width="320" height="23"/>
<searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" focusRingType="none" placeholderString="Enter a city, state, country name" usesSingleLineMode="YES" maximumRecents="5" id="ikU-Tm-0WZ">
<font key="font" size="13" name="Avenir-Light"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -1556,13 +1556,13 @@ DQ
</connections>
</button>
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="32" horizontalPageScroll="10" verticalLineScroll="32" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0wY-ff-FLW">
<rect key="frame" x="8" y="30" width="320" height="9"/>
<rect key="frame" x="8" y="30" width="320" height="237"/>
<clipView key="contentView" drawsBackground="NO" id="rGc-3M-cCq">
<rect key="frame" x="0.0" y="0.0" width="320" height="9"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<rect key="frame" x="0.0" y="0.0" width="320" height="237"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<tableView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" rowHeight="30" rowSizeStyle="automatic" viewBased="YES" id="xkl-2X-ZCb">
<rect key="frame" x="0.0" y="0.0" width="320" height="64"/>
<rect key="frame" x="0.0" y="0.0" width="320" height="237"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@ -1652,14 +1652,14 @@ DQ
</scroller>
</scrollView>
<progressIndicator wantsLayer="YES" focusRingType="none" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="0A5-gp-lay">
<rect key="frame" x="160" y="54" width="16" height="16"/>
<rect key="frame" x="160" y="168" width="16" height="16"/>
<constraints>
<constraint firstAttribute="height" constant="16" id="fgE-77-Vda"/>
<constraint firstAttribute="width" constant="16" id="pwe-em-e0a"/>
</constraints>
</progressIndicator>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xgb-wU-8RU">
<rect key="frame" x="18" y="24" width="300" height="22"/>
<rect key="frame" x="18" y="138" width="300" height="22"/>
<constraints>
<constraint firstAttribute="height" constant="22" id="zqt-d8-yas"/>
</constraints>
@ -1707,7 +1707,7 @@ DQ
<rect key="frame" x="0.0" y="484" width="613" height="30"/>
<subviews>
<button toolTip="Sorts by time difference from your current timezone" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="P6d-qq-ycq">
<rect key="frame" x="285" y="3" width="8" height="25"/>
<rect key="frame" x="283" y="3" width="9" height="25"/>
<constraints>
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="180" id="cAs-on-f7X"/>
<constraint firstAttribute="height" constant="25" id="juv-QL-vMx"/>
@ -1722,7 +1722,7 @@ DQ
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0HL-uj-s4v">
<rect key="frame" x="331" y="3" width="8" height="25"/>
<rect key="frame" x="331" y="3" width="9" height="25"/>
<constraints>
<constraint firstAttribute="height" constant="25" id="eZL-Gr-38S"/>
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="120" id="sJk-T7-7Lm"/>
@ -1737,7 +1737,7 @@ DQ
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6fs-Mx-NcG">
<rect key="frame" x="308" y="3" width="8" height="25"/>
<rect key="frame" x="307" y="3" width="9" height="25"/>
<constraints>
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="190" id="241-Rn-G6N"/>
<constraint firstAttribute="height" constant="25" id="weP-ll-vZ8"/>
@ -1991,7 +1991,7 @@ CA
<image name="ClockerIcon-512" width="1024" height="1024"/>
<image name="CurrentLocation" width="350" height="350"/>
<image name="Extra" width="700" height="700"/>
<image name="NSDescendingSortIndicator" width="8" height="8"/>
<image name="NSDescendingSortIndicator" width="9" height="9"/>
<image name="NSFontPanel" width="32" height="32"/>
<image name="NSInfo" width="32" height="32"/>
<image name="NSPreferencesGeneral" width="32" height="32"/>

Loading…
Cancel
Save