Browse Source

Appearance Tab

v1.2.1
Abhishek Banthia 9 years ago
parent
commit
1897662899
  1. 10
      Clocker.xcodeproj/project.pbxproj
  2. BIN
      Clocker.xcodeproj/project.xcworkspace/xcuserdata/abhishekbanthia.xcuserdatad/UserInterfaceState.xcuserstate
  3. 123
      Clocker/Appearance Tab/CLAppearanceView.xib
  4. 15
      Clocker/Appearance Tab/CLAppearanceViewController.h
  5. 114
      Clocker/Appearance Tab/CLAppearanceViewController.m
  6. 5
      Clocker/ApplicationDelegate.m
  7. 1
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/ApptentiveConnect
  8. 1
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Headers
  9. 1
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Resources
  10. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/ApptentiveConnect
  11. 120
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Headers/ATAppRatingFlow.h
  12. 95
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Headers/ATConnect.h
  13. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/ATFeedbackWindow.nib
  14. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/English.lproj/InfoPlist.strings
  15. 44
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/Info.plist
  16. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/at_logo_info.png
  17. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/at_logo_info@2x.png
  18. 1
      Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/Current
  19. 1
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/ApptentiveConnect
  20. 1
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Headers
  21. 1
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Resources
  22. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/ApptentiveConnect
  23. 120
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Headers/ATAppRatingFlow.h
  24. 95
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Headers/ATConnect.h
  25. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/ATFeedbackWindow.nib
  26. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/English.lproj/InfoPlist.strings
  27. 44
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/Info.plist
  28. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/at_logo_info.png
  29. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/at_logo_info@2x.png
  30. 1
      Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/Current
  31. 2
      Clocker/ApptentiveConnect/ApptentiveConnect/resources/English.lproj/InfoPlist.strings
  32. BIN
      Clocker/ApptentiveConnect/ApptentiveConnect/resources/English.lproj/Localizable.strings
  33. 28
      Clocker/ApptentiveConnect/ApptentiveConnect/resources/Info.plist
  34. 7
      Clocker/ApptentiveConnect/ApptentiveConnect/source/ApptentiveConnect_Prefix.pch
  35. 36
      Clocker/ApptentiveConnect/ApptentiveConnect/source/Controllers/ATFeedbackWindowController.h
  36. 378
      Clocker/ApptentiveConnect/ApptentiveConnect/source/Controllers/ATFeedbackWindowController.m
  37. 15
      Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATConnect_FeedbackWindowPrivate.h
  38. 19
      Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATConnect_FeedbackWindowPrivate.m
  39. 16
      Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATImageButton.h
  40. 18
      Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATImageButton.m
  41. 17
      Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATImageView.h
  42. 27
      Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATImageView.m
  43. 17
      Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATPlaceholderTextView.h
  44. 65
      Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATPlaceholderTextView.m
  45. 17
      Clocker/ApptentiveConnect/ApptentiveConnect/tests/ATSampleTest.h
  46. 17
      Clocker/ApptentiveConnect/ApptentiveConnect/tests/ATSampleTest.m
  47. 22
      Clocker/ApptentiveConnect/ApptentiveConnect/tests/ApptentiveUnitTests-Info.plist
  48. 249
      Clocker/ApptentiveConnect/ApptentiveConnect/xibs/ATFeedbackWindow.xib
  49. 34
      Clocker/ApptentiveConnect/CHANGELOG.md
  50. 9
      Clocker/ApptentiveConnect/CONTRIBUTING.md
  51. 2
      Clocker/ApptentiveConnect/FeedbackDemo/English.lproj/InfoPlist.strings
  52. 3857
      Clocker/ApptentiveConnect/FeedbackDemo/English.lproj/MainMenu.xib
  53. 32
      Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo-Info.plist
  54. 416
      Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo.xcodeproj/project.pbxproj
  55. 7
      Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  56. BIN
      Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo.xcodeproj/project.xcworkspace/xcuserdata/abhishekbanthia.xcuserdatad/UserInterfaceState.xcuserstate
  57. 91
      Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcschemes/FeedbackDemo.xcscheme
  58. 22
      Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcschemes/xcschememanagement.plist
  59. 22
      Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemoAppDelegate.h
  60. 39
      Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemoAppDelegate.m
  61. 7
      Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo_Prefix.pch
  62. BIN
      Clocker/ApptentiveConnect/FeedbackDemo/art/ApptentiveLogo.icns
  63. 11
      Clocker/ApptentiveConnect/FeedbackDemo/defines.h
  64. 14
      Clocker/ApptentiveConnect/FeedbackDemo/main.m
  65. 24
      Clocker/ApptentiveConnect/LICENSE.txt
  66. 125
      Clocker/ApptentiveConnect/README.md
  67. 28
      Clocker/ApptentiveConnect/apptentive-osx.podspec
  68. BIN
      Clocker/ApptentiveConnect/etc/screenshots/integration_step1.png
  69. BIN
      Clocker/ApptentiveConnect/etc/screenshots/integration_step2.png
  70. BIN
      Clocker/ApptentiveConnect/etc/screenshots/integration_step3.png
  71. BIN
      Clocker/ApptentiveConnect/etc/screenshots/integration_step4.png
  72. 14
      Clocker/CLOneWindow/CLOneWindow.xib
  73. 2
      Clocker/CLOneWindow/CLOneWindowController.h
  74. 13
      Clocker/CLOneWindow/CLOneWindowController.m
  75. 4
      Clocker/Panel.xib
  76. 2
      Clocker/PanelController.m
  77. 112
      Clocker/Preferences/CLPreferencesView.xib
  78. 2
      Clocker/Preferences/CLPreferencesViewController.h
  79. 65
      Clocker/Preferences/CLPreferencesViewController.m

10
Clocker.xcodeproj/project.pbxproj

@ -9,6 +9,8 @@
/* Begin PBXBuildFile section */
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 */; };
9A32473A1C263F4F00CF6B6E /* CLAppearanceView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A3247381C263F4F00CF6B6E /* CLAppearanceView.xib */; };
9A392EE81C1CDD530072C10A /* CLAboutUsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A392EE61C1CDD530072C10A /* CLAboutUsViewController.m */; };
9A392EE91C1CDD530072C10A /* CLAboutUsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A392EE71C1CDD530072C10A /* CLAboutUsView.xib */; };
9A392EED1C1CE9950072C10A /* CLPreferencesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A392EEB1C1CE9950072C10A /* CLPreferencesViewController.m */; };
@ -68,6 +70,9 @@
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>"; };
9A3247311C25FD3A00CF6B6E /* CLCustomSliderCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLCustomSliderCell.m; path = "Clocker/Custom Slider/CLCustomSliderCell.m"; sourceTree = "<group>"; };
9A3247361C263F4F00CF6B6E /* CLAppearanceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLAppearanceViewController.h; path = "Clocker/Appearance Tab/CLAppearanceViewController.h"; sourceTree = "<group>"; };
9A3247371C263F4F00CF6B6E /* CLAppearanceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLAppearanceViewController.m; path = "Clocker/Appearance Tab/CLAppearanceViewController.m"; sourceTree = "<group>"; };
9A3247381C263F4F00CF6B6E /* CLAppearanceView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CLAppearanceView.xib; path = "Clocker/Appearance Tab/CLAppearanceView.xib"; sourceTree = "<group>"; };
9A392EE51C1CDD530072C10A /* CLAboutUsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLAboutUsViewController.h; path = Clocker/AboutUsWindow/CLAboutUsViewController.h; sourceTree = "<group>"; };
9A392EE61C1CDD530072C10A /* CLAboutUsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLAboutUsViewController.m; path = Clocker/AboutUsWindow/CLAboutUsViewController.m; sourceTree = "<group>"; };
9A392EE71C1CDD530072C10A /* CLAboutUsView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CLAboutUsView.xib; path = Clocker/AboutUsWindow/CLAboutUsView.xib; sourceTree = "<group>"; };
@ -209,6 +214,9 @@
9A56DB7E1C1CFB73004CE6AF /* Panel.xib */,
9A392EE71C1CDD530072C10A /* CLAboutUsView.xib */,
9A392EEC1C1CE9950072C10A /* CLPreferencesView.xib */,
9A3247361C263F4F00CF6B6E /* CLAppearanceViewController.h */,
9A3247371C263F4F00CF6B6E /* CLAppearanceViewController.m */,
9A3247381C263F4F00CF6B6E /* CLAppearanceView.xib */,
);
name = XIB;
sourceTree = "<group>";
@ -402,6 +410,7 @@
9A56DB811C1CFB73004CE6AF /* Panel.xib in Resources */,
9A43792E1BEC256200F4E27F /* Media.xcassets in Resources */,
9A392EE91C1CDD530072C10A /* CLAboutUsView.xib in Resources */,
9A32473A1C263F4F00CF6B6E /* CLAppearanceView.xib in Resources */,
9A5951C21C1D0AAD009C17AA /* CLOneWindow.xib in Resources */,
9A56DB801C1CFB73004CE6AF /* MainMenu.xib in Resources */,
);
@ -440,6 +449,7 @@
9A25F7471C1A5E17007D369B /* iRate.m in Sources */,
9A8605C01BEC14F600A810A4 /* Panel.m in Sources */,
9A8605BA1BEC14DC00A810A4 /* StatusItemView.m in Sources */,
9A3247391C263F4F00CF6B6E /* CLAppearanceViewController.m in Sources */,
9A8605BB1BEC14DC00A810A4 /* PanelController.m in Sources */,
9A8605B61BEC14BE00A810A4 /* MenubarController.m in Sources */,
9A5951C01C1D0AA0009C17AA /* CLOneWindowController.m in Sources */,

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

Binary file not shown.

123
Clocker/Appearance Tab/CLAppearanceView.xib

@ -0,0 +1,123 @@
<?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="CLAppearanceViewController">
<connections>
<outlet property="fontPopup" destination="6mg-pt-RHb" id="bOB-pV-Ehz"/>
<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"/>
</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="272" height="180"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6mg-pt-RHb">
<rect key="frame" x="47" y="17" width="179" height="26"/>
<constraints>
<constraint firstAttribute="width" constant="174" id="jc9-tN-3oB"/>
</constraints>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" arrowPosition="noArrow" selectedItem="gEI-6s-6qO" id="2gD-cC-vIo">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" size="12" name="HelveticaNeue-Thin"/>
<menu key="menu" id="Y2j-n2-KOX">
<items>
<menuItem state="on" id="gEI-6s-6qO"/>
<menuItem title="Item 2" id="kjc-LK-jcH"/>
<menuItem title="Item 3" id="9v0-Ii-eh4"/>
</items>
</menu>
</popUpButtonCell>
<connections>
<action selector="fontChanged:" target="-2" id="7lT-DL-WtM"/>
<binding destination="-2" name="content" keyPath="self.fontFamilies" id="LJn-b0-hQa"/>
<binding destination="WGI-5h-l6M" name="selectedValue" keyPath="values.defaultFontFamily" previousBinding="LJn-b0-hQa" id="U8F-ZD-GfW"/>
</connections>
</popUpButton>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Qi6-T2-p3b">
<rect key="frame" x="103" y="45" width="67" height="19"/>
<constraints>
<constraint firstAttribute="width" constant="63" id="4T0-z6-dAq"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Font Family" id="txc-ed-fjd">
<font key="font" size="12" name="HelveticaNeue-Light"/>
<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="iVw-cq-zLz">
<rect key="frame" x="116" y="93" width="40" height="19"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Theme" id="hCb-NM-To8">
<font key="font" size="12" name="HelveticaNeue-Light"/>
<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="5TC-RQ-gzI">
<rect key="frame" x="101" y="141" width="70" height="19"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Time Format" id="Hza-PB-FEf">
<font key="font" size="12" name="HelveticaNeue-Light"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5tI-fU-0lZ">
<rect key="frame" x="74" y="66" width="124" height="24"/>
<constraints>
<constraint firstAttribute="width" constant="120" id="dW5-vG-EwD"/>
</constraints>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="3ED-rf-SN8">
<font key="font" size="12" name="HelveticaNeue-Light"/>
<segments>
<segment label="Default"/>
<segment label="Black" toolTip="Customize the timezone panel by selecting a theme!" selected="YES" tag="1"/>
</segments>
</segmentedCell>
<connections>
<action selector="themeChanged:" target="-2" id="V9J-fh-uqe"/>
<binding destination="WGI-5h-l6M" name="selectedLabel" keyPath="values.defaultTheme" id="vyq-YM-las"/>
</connections>
</segmentedControl>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OrL-Ix-fmY">
<rect key="frame" x="18" y="114" width="236" height="24"/>
<constraints>
<constraint firstAttribute="width" constant="232" id="uOJ-Mi-Fin"/>
</constraints>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="s7b-og-KCV">
<font key="font" size="13" name="HelveticaNeue-Light"/>
<segments>
<segment label="12-hour clock" width="115"/>
<segment label="24-hour clock" toolTip="Set the time format you want to see in the timezone panel!" width="114" tag="1"/>
</segments>
</segmentedCell>
<connections>
<action selector="timeFormatSelectionChanged:" target="-2" id="EcS-pz-e0o"/>
<binding destination="WGI-5h-l6M" name="selectedIndex" keyPath="values.is24HourFormatSelected" id="UsS-ER-9M9"/>
</connections>
</segmentedControl>
</subviews>
<constraints>
<constraint firstItem="OrL-Ix-fmY" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="JtZ-ra-RaC"/>
<constraint firstItem="6mg-pt-RHb" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="Oh4-4K-mPE"/>
<constraint firstItem="6mg-pt-RHb" firstAttribute="top" secondItem="Qi6-T2-p3b" secondAttribute="bottom" constant="4" id="P8v-4d-79D"/>
<constraint firstItem="5tI-fU-0lZ" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="Vkb-QV-unN"/>
<constraint firstItem="iVw-cq-zLz" firstAttribute="top" secondItem="OrL-Ix-fmY" secondAttribute="bottom" constant="4" id="XgM-Wl-Xap"/>
<constraint firstItem="Qi6-T2-p3b" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="ZKu-5n-Qwo"/>
<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="4" id="bo6-s2-Vfj"/>
<constraint firstItem="5TC-RQ-gzI" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="lc0-ud-Mnw"/>
<constraint firstItem="5TC-RQ-gzI" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" id="oI8-4L-ppf"/>
<constraint firstItem="Qi6-T2-p3b" firstAttribute="top" secondItem="5tI-fU-0lZ" secondAttribute="bottom" constant="4" id="rAe-QL-e4G"/>
<constraint firstItem="OrL-Ix-fmY" firstAttribute="top" secondItem="5TC-RQ-gzI" secondAttribute="bottom" constant="4" id="rpk-WN-DT9"/>
</constraints>
<point key="canvasLocation" x="187" y="251"/>
</customView>
<userDefaultsController representsSharedInstance="YES" id="WGI-5h-l6M"/>
</objects>
</document>

15
Clocker/Appearance Tab/CLAppearanceViewController.h

@ -0,0 +1,15 @@
//
// CLAppearanceViewController.h
// Clocker
//
// Created by Abhishek Banthia on 12/19/15.
//
//
#import <Cocoa/Cocoa.h>
@interface CLAppearanceViewController : NSViewController
@property (atomic, strong) NSArray *fontFamilies;
@end

114
Clocker/Appearance Tab/CLAppearanceViewController.m

@ -0,0 +1,114 @@
//
// CLAppearanceViewController.m
// Clocker
//
// Created by Abhishek Banthia on 12/19/15.
//
//
#import "CLAppearanceViewController.h"
#import "ApplicationDelegate.h"
#import "PanelController.h"
#import "CommonStrings.h"
@interface CLAppearanceViewController ()
@property (weak) IBOutlet NSSegmentedControl *timeFormat;
@property (weak) IBOutlet NSSegmentedControl *theme;
@property (weak) IBOutlet NSPopUpButton *fontPopup;
@property (weak) IBOutlet NSSegmentedControl *sunriseToggle;
@end
@implementation CLAppearanceViewController
- (void)viewDidLoad {
[super viewDidLoad];
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];
//Certain fonts don't look good with constraints set
NSMutableArray *availableFonts = [[NSMutableArray alloc] init];
NSFontCollection *fontCollection = [NSFontCollection fontCollectionWithName:@"com.apple.UserFonts"];
for (NSFontDescriptor *descriptor in fontCollection.matchingDescriptors) {
if ([descriptor objectForKey:@"NSFontFamilyAttribute"]) {
if (![availableFonts containsObject:[descriptor objectForKey:@"NSFontFamilyAttribute"]]) {
[availableFonts addObject:[descriptor objectForKey:@"NSFontFamilyAttribute"]];
}
}
}
NSArray *fontsToRemove = [NSArray arrayWithObjects:@"Apple Chancery", @"Zapfino",
@"Trattatello", @"Noteworthy", @"Arial Black", @"Chalkduster",@"Monoid", @"Andale Mono", @"Courier" ,@"Courier New",@"Geneva",@"Menlo", @"Monaco",@"PT Mono", @"Verdana", nil];
for (NSString *font in fontsToRemove) {
if([availableFonts containsObject:font])
{
[availableFonts removeObject:font];
}
}
[availableFonts insertObject:@"Default" atIndex:0];
self.fontFamilies = [[NSArray alloc] initWithArray:availableFonts];
// Do view setup here.
}
- (IBAction)timeFormatSelectionChanged:(id)sender
{
NSSegmentedControl *timeFormat = (NSSegmentedControl *)sender;
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:timeFormat.selectedSegment] forKey:CL24hourFormatSelectedKey];
[self refreshMainTableview];
}
- (IBAction)themeChanged:(id)sender
{
NSSegmentedControl *themeSegment = (NSSegmentedControl *)sender;
ApplicationDelegate *appDelegate = [[NSApplication sharedApplication] delegate];
PanelController *panelController = appDelegate.panelController;
[panelController.backgroundView setNeedsDisplay:YES];
if (themeSegment.selectedSegment == CLBlackTheme) {
panelController.shutdownButton.image = [NSImage imageNamed:@"PowerIcon-White"];
panelController.preferencesButton.image = [NSImage imageNamed:@"Settings-White"];
}
else
{
panelController.shutdownButton.image = [NSImage imageNamed:@"PowerIcon"];
panelController.preferencesButton.image = [NSImage imageNamed:NSImageNameActionTemplate];
}
[panelController.mainTableview reloadData];
}
- (IBAction)fontChanged:(id)sender
{
ApplicationDelegate *appDelegate = [[NSApplication sharedApplication] delegate];
PanelController *panelController = appDelegate.panelController;
[panelController.mainTableview reloadData];
}
- (IBAction)toggleSunriseAndSunset:(id)sender {
}
- (void)refreshMainTableview
{
dispatch_async(dispatch_get_main_queue(), ^{
ApplicationDelegate *appDelegate = [[NSApplication sharedApplication] delegate];
PanelController *panelController = appDelegate.panelController;
[panelController updateDefaultPreferences];
[panelController.mainTableview reloadData];
});
}
@end

5
Clocker/ApplicationDelegate.m

@ -100,6 +100,11 @@ void *kContextActivePanel = &kContextActivePanel;
if (defaultTheme == nil) {
[[NSUserDefaults standardUserDefaults] setObject:@"Default" forKey:@"defaultTheme"];
}
NSNumber *defaultTimeFormat = [[NSUserDefaults standardUserDefaults] objectForKey:CL24hourFormatSelectedKey];
if (defaultTimeFormat == nil) {
[[NSUserDefaults standardUserDefaults] setObject:@1 forKey:CL24hourFormatSelectedKey];
}
// Install icon into the menu bar
self.menubarController = [[MenubarController alloc] init];

1
Clocker/ApptentiveConnect/ApptentiveConnect.framework/ApptentiveConnect

@ -1 +0,0 @@
Versions/Current/ApptentiveConnect

1
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Headers

@ -1 +0,0 @@
Versions/Current/Headers

1
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Resources

@ -1 +0,0 @@
Versions/Current/Resources

BIN
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/ApptentiveConnect

Binary file not shown.

120
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Headers/ATAppRatingFlow.h

@ -1,120 +0,0 @@
//
// ATAppRatingFlow.h
// ApptentiveConnect
//
// Created by Andrew Wooster on 7/8/11.
// Copyright 2011 Apptentive, Inc. All rights reserved.
//
#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>
#elif TARGET_OS_MAC
#import <Cocoa/Cocoa.h>
#endif
/*! Notification sent when the user has agreed to rate the application. */
extern NSString *const ATAppRatingFlowUserAgreedToRateAppNotification;
/*! A workflow for a user either giving feedback on or rating the current
application. */
@interface ATAppRatingFlow : NSObject
#if TARGET_OS_IPHONE
<SKStoreProductViewControllerDelegate, UIAlertViewDelegate>
#endif
{
@private
NSString *iTunesAppID;
#if TARGET_OS_IPHONE
UIAlertView *enjoymentDialog;
UIAlertView *ratingDialog;
#endif
NSUInteger daysBeforePrompt;
NSUInteger usesBeforePrompt;
NSUInteger significantEventsBeforePrompt;
NSUInteger daysBeforeRePrompting;
NSDate *lastUseOfApp;
NSString *appName;
}
/*! Set to a custom app name if you'd like to use something other than the bundle display name. */
@property (nonatomic, copy) NSString *appName;
/*! The default singleton constructor. Call with an iTunes Applicaiton ID as
an NSString */
+ (ATAppRatingFlow *)sharedRatingFlowWithAppID:(NSString *)iTunesAppID;
#if TARGET_OS_IPHONE
/*!
Call when the application is done launching. If we should be able to
prompt for a rating, pass YES for canPromptRating. The viewController is
the viewController from which a feedback dialog will be shown.
*/
- (void)appDidLaunch:(BOOL)canPromptForRating viewController:(UIViewController *)viewController;
/*!
Call when the application enters the foreground. If we should be able to
prompt for a rating, pass YES.
The viewController is the UIViewController from which a feedback dialog
will be shown.
*/
- (void)appDidEnterForeground:(BOOL)canPromptForRating viewController:(UIViewController *)viewController;
/*!
Call whenever a significant event occurs in the application. So, for example,
if you want to have a rating show up after the user has played 20 levels of
a game, you would set significantEventsBeforePrompt to 20, and call this
after each level.
If we should be able to prompt for a rating when this is called, pass YES.
The viewController is the UIViewController from which a feedback dialog
will be shown.
*/
- (void)userDidPerformSignificantEvent:(BOOL)canPromptForRating viewController:(UIViewController *)viewController;
#elif TARGET_OS_MAC
/*!
Call when the application is done launching. If we should be able to
prompt for a rating, pass YES.
*/
- (void)appDidLaunch:(BOOL)canPromptForRating;
/*!
Call whenever a significant event occurs in the application. So, for example,
if you want to have a rating show up after the user has played 20 levels of
a game, you would set significantEventsBeforePrompt to 20, and call this
after each level.
If we should be able to prompt for a rating when this is called, pass YES.
*/
- (void)userDidPerformSignificantEvent:(BOOL)canPromptForRating;
#endif
#if TARGET_OS_IPHONE
/*!
Call if you want to show the enjoyment dialog directly. This enters the flow
for either bringing up the feedback view or the rating dialog.
*/
- (void)showEnjoymentDialog:(UIViewController *)vc;
/*!
Call if you want to show the rating dialog directly.
*/
- (IBAction)showRatingDialog:(UIViewController *)vc;
#elif TARGET_OS_MAC
/*!
Call if you want to show the enjoyment dialog directly. This enters the flow
for either bringing up the feedback view or the rating dialog.
*/
- (IBAction)showEnjoymentDialog:(id)sender;
/*!
Call if you want to show the rating dialog directly.
*/
- (IBAction)showRatingDialog:(id)sender;
#endif
@end

95
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Headers/ATConnect.h

@ -1,95 +0,0 @@
//
// ATConnect.h
// ApptentiveConnect
//
// Created by Andrew Wooster on 3/12/11.
// Copyright 2011 Apptentive, Inc.. All rights reserved.
//
#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
#elif TARGET_OS_MAC
#import <Cocoa/Cocoa.h>
#endif
#define kATConnectVersionString @"0.4.12"
#if TARGET_OS_IPHONE
#define kATConnectPlatformString @"iOS"
@class ATFeedbackController;
#elif TARGET_OS_MAC
#define kATConnectPlatformString @"Mac OS X"
@class ATFeedbackWindowController;
#endif
typedef enum {
ATFeedbackControllerDefault,
ATFeedbackControllerSimple
} ATFeedbackControllerType;
@interface ATConnect : NSObject {
@private
#if TARGET_OS_IPHONE
ATFeedbackController *feedbackController;
ATFeedbackController *currentFeedbackController;
#elif TARGET_OS_MAC
ATFeedbackWindowController *feedbackWindowController;
#endif
NSMutableDictionary *additionalFeedbackData;
NSString *apiKey;
BOOL showTagline;
BOOL shouldTakeScreenshot;
BOOL showEmailField;
NSString *initialName;
NSString *initialEmailAddress;
ATFeedbackControllerType feedbackControllerType;
NSString *customPlaceholderText;
}
@property (nonatomic, copy) NSString *apiKey;
@property (nonatomic, assign) BOOL showTagline;
@property (nonatomic, assign) BOOL shouldTakeScreenshot;
@property (nonatomic, assign) BOOL showEmailField;
@property (nonatomic, copy) NSString *initialName;
@property (nonatomic, copy) NSString *initialEmailAddress;
@property (nonatomic, assign) ATFeedbackControllerType feedbackControllerType;
/*! Set this if you want some custom text to appear as a placeholder in the
feedback text box. */
@property (nonatomic, copy) NSString *customPlaceholderText;
+ (ATConnect *)sharedConnection;
#if TARGET_OS_IPHONE
/*!
* Presents a feedback controller in the window of the given view controller.
*/
- (void)presentFeedbackControllerFromViewController:(UIViewController *)viewController;
/*!
* Dismisses the feedback controller. You normally won't need to call this.
*/
- (void)dismissFeedbackControllerAnimated:(BOOL)animated completion:(void (^)(void))completion;
#elif TARGET_OS_MAC
/*!
* Presents a feedback window.
*/
- (IBAction)showFeedbackWindow:(id)sender;
#endif
/*! Adds an additional data field to any feedback sent. */
- (void)addAdditionalInfoToFeedback:(NSObject<NSCoding> *)object withKey:(NSString *)key;
/*! Removes an additional data field from the feedback sent. */
- (void)removeAdditionalInfoFromFeedbackWithKey:(NSString *)key;
/*!
* Returns the NSBundle corresponding to the bundle containing ATConnect's
* images, xibs, strings files, etc.
*/
+ (NSBundle *)resourceBundle;
@end
/*! Replacement for NSLocalizedString within ApptentiveConnect. Pulls
localized strings out of the resource bundle. */
extern NSString *ATLocalizedString(NSString *key, NSString *comment);

BIN
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/ATFeedbackWindow.nib generated

Binary file not shown.

BIN
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/English.lproj/InfoPlist.strings

Binary file not shown.

44
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/Info.plist

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>15C50</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>ApptentiveConnect</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.ApptentiveConnect</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>ApptentiveConnect</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>1</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>7C68</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>15C43</string>
<key>DTSDKName</key>
<string>macosx10.11</string>
<key>DTXcode</key>
<string>0720</string>
<key>DTXcodeBuild</key>
<string>7C68</string>
</dict>
</plist>

BIN
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/at_logo_info.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

BIN
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/at_logo_info@2x.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

1
Clocker/ApptentiveConnect/ApptentiveConnect.framework/Versions/Current

@ -1 +0,0 @@
A

1
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/ApptentiveConnect

@ -1 +0,0 @@
Versions/Current/ApptentiveConnect

1
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Headers

@ -1 +0,0 @@
Versions/Current/Headers

1
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Resources

@ -1 +0,0 @@
Versions/Current/Resources

BIN
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/ApptentiveConnect

Binary file not shown.

120
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Headers/ATAppRatingFlow.h

@ -1,120 +0,0 @@
//
// ATAppRatingFlow.h
// ApptentiveConnect
//
// Created by Andrew Wooster on 7/8/11.
// Copyright 2011 Apptentive, Inc. All rights reserved.
//
#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>
#elif TARGET_OS_MAC
#import <Cocoa/Cocoa.h>
#endif
/*! Notification sent when the user has agreed to rate the application. */
extern NSString *const ATAppRatingFlowUserAgreedToRateAppNotification;
/*! A workflow for a user either giving feedback on or rating the current
application. */
@interface ATAppRatingFlow : NSObject
#if TARGET_OS_IPHONE
<SKStoreProductViewControllerDelegate, UIAlertViewDelegate>
#endif
{
@private
NSString *iTunesAppID;
#if TARGET_OS_IPHONE
UIAlertView *enjoymentDialog;
UIAlertView *ratingDialog;
#endif
NSUInteger daysBeforePrompt;
NSUInteger usesBeforePrompt;
NSUInteger significantEventsBeforePrompt;
NSUInteger daysBeforeRePrompting;
NSDate *lastUseOfApp;
NSString *appName;
}
/*! Set to a custom app name if you'd like to use something other than the bundle display name. */
@property (nonatomic, copy) NSString *appName;
/*! The default singleton constructor. Call with an iTunes Applicaiton ID as
an NSString */
+ (ATAppRatingFlow *)sharedRatingFlowWithAppID:(NSString *)iTunesAppID;
#if TARGET_OS_IPHONE
/*!
Call when the application is done launching. If we should be able to
prompt for a rating, pass YES for canPromptRating. The viewController is
the viewController from which a feedback dialog will be shown.
*/
- (void)appDidLaunch:(BOOL)canPromptForRating viewController:(UIViewController *)viewController;
/*!
Call when the application enters the foreground. If we should be able to
prompt for a rating, pass YES.
The viewController is the UIViewController from which a feedback dialog
will be shown.
*/
- (void)appDidEnterForeground:(BOOL)canPromptForRating viewController:(UIViewController *)viewController;
/*!
Call whenever a significant event occurs in the application. So, for example,
if you want to have a rating show up after the user has played 20 levels of
a game, you would set significantEventsBeforePrompt to 20, and call this
after each level.
If we should be able to prompt for a rating when this is called, pass YES.
The viewController is the UIViewController from which a feedback dialog
will be shown.
*/
- (void)userDidPerformSignificantEvent:(BOOL)canPromptForRating viewController:(UIViewController *)viewController;
#elif TARGET_OS_MAC
/*!
Call when the application is done launching. If we should be able to
prompt for a rating, pass YES.
*/
- (void)appDidLaunch:(BOOL)canPromptForRating;
/*!
Call whenever a significant event occurs in the application. So, for example,
if you want to have a rating show up after the user has played 20 levels of
a game, you would set significantEventsBeforePrompt to 20, and call this
after each level.
If we should be able to prompt for a rating when this is called, pass YES.
*/
- (void)userDidPerformSignificantEvent:(BOOL)canPromptForRating;
#endif
#if TARGET_OS_IPHONE
/*!
Call if you want to show the enjoyment dialog directly. This enters the flow
for either bringing up the feedback view or the rating dialog.
*/
- (void)showEnjoymentDialog:(UIViewController *)vc;
/*!
Call if you want to show the rating dialog directly.
*/
- (IBAction)showRatingDialog:(UIViewController *)vc;
#elif TARGET_OS_MAC
/*!
Call if you want to show the enjoyment dialog directly. This enters the flow
for either bringing up the feedback view or the rating dialog.
*/
- (IBAction)showEnjoymentDialog:(id)sender;
/*!
Call if you want to show the rating dialog directly.
*/
- (IBAction)showRatingDialog:(id)sender;
#endif
@end

95
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Headers/ATConnect.h

@ -1,95 +0,0 @@
//
// ATConnect.h
// ApptentiveConnect
//
// Created by Andrew Wooster on 3/12/11.
// Copyright 2011 Apptentive, Inc.. All rights reserved.
//
#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
#elif TARGET_OS_MAC
#import <Cocoa/Cocoa.h>
#endif
#define kATConnectVersionString @"0.4.12"
#if TARGET_OS_IPHONE
#define kATConnectPlatformString @"iOS"
@class ATFeedbackController;
#elif TARGET_OS_MAC
#define kATConnectPlatformString @"Mac OS X"
@class ATFeedbackWindowController;
#endif
typedef enum {
ATFeedbackControllerDefault,
ATFeedbackControllerSimple
} ATFeedbackControllerType;
@interface ATConnect : NSObject {
@private
#if TARGET_OS_IPHONE
ATFeedbackController *feedbackController;
ATFeedbackController *currentFeedbackController;
#elif TARGET_OS_MAC
ATFeedbackWindowController *feedbackWindowController;
#endif
NSMutableDictionary *additionalFeedbackData;
NSString *apiKey;
BOOL showTagline;
BOOL shouldTakeScreenshot;
BOOL showEmailField;
NSString *initialName;
NSString *initialEmailAddress;
ATFeedbackControllerType feedbackControllerType;
NSString *customPlaceholderText;
}
@property (nonatomic, copy) NSString *apiKey;
@property (nonatomic, assign) BOOL showTagline;
@property (nonatomic, assign) BOOL shouldTakeScreenshot;
@property (nonatomic, assign) BOOL showEmailField;
@property (nonatomic, copy) NSString *initialName;
@property (nonatomic, copy) NSString *initialEmailAddress;
@property (nonatomic, assign) ATFeedbackControllerType feedbackControllerType;
/*! Set this if you want some custom text to appear as a placeholder in the
feedback text box. */
@property (nonatomic, copy) NSString *customPlaceholderText;
+ (ATConnect *)sharedConnection;
#if TARGET_OS_IPHONE
/*!
* Presents a feedback controller in the window of the given view controller.
*/
- (void)presentFeedbackControllerFromViewController:(UIViewController *)viewController;
/*!
* Dismisses the feedback controller. You normally won't need to call this.
*/
- (void)dismissFeedbackControllerAnimated:(BOOL)animated completion:(void (^)(void))completion;
#elif TARGET_OS_MAC
/*!
* Presents a feedback window.
*/
- (IBAction)showFeedbackWindow:(id)sender;
#endif
/*! Adds an additional data field to any feedback sent. */
- (void)addAdditionalInfoToFeedback:(NSObject<NSCoding> *)object withKey:(NSString *)key;
/*! Removes an additional data field from the feedback sent. */
- (void)removeAdditionalInfoFromFeedbackWithKey:(NSString *)key;
/*!
* Returns the NSBundle corresponding to the bundle containing ATConnect's
* images, xibs, strings files, etc.
*/
+ (NSBundle *)resourceBundle;
@end
/*! Replacement for NSLocalizedString within ApptentiveConnect. Pulls
localized strings out of the resource bundle. */
extern NSString *ATLocalizedString(NSString *key, NSString *comment);

BIN
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/ATFeedbackWindow.nib generated

Binary file not shown.

BIN
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/English.lproj/InfoPlist.strings

Binary file not shown.

44
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/Info.plist

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>15C50</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>ApptentiveConnect</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.ApptentiveConnect</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>ApptentiveConnect</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>1</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>7C68</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>15C43</string>
<key>DTSDKName</key>
<string>macosx10.11</string>
<key>DTXcode</key>
<string>0720</string>
<key>DTXcodeBuild</key>
<string>7C68</string>
</dict>
</plist>

BIN
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/at_logo_info.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

BIN
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/A/Resources/at_logo_info@2x.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

1
Clocker/ApptentiveConnect/ApptentiveConnect/ApptentiveConnect.framework/Versions/Current

@ -1 +0,0 @@
A

2
Clocker/ApptentiveConnect/ApptentiveConnect/resources/English.lproj/InfoPlist.strings

@ -1,2 +0,0 @@
/* Localized versions of Info.plist keys */

BIN
Clocker/ApptentiveConnect/ApptentiveConnect/resources/English.lproj/Localizable.strings

Binary file not shown.

28
Clocker/ApptentiveConnect/ApptentiveConnect/resources/Info.plist

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.${PRODUCT_NAME:rfc1034Identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>

7
Clocker/ApptentiveConnect/ApptentiveConnect/source/ApptentiveConnect_Prefix.pch

@ -1,7 +0,0 @@
//
// Prefix header for all source files of the 'ApptentiveConnect' target in the 'ApptentiveConnect' project.
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

36
Clocker/ApptentiveConnect/ApptentiveConnect/source/Controllers/ATFeedbackWindowController.h

@ -1,36 +0,0 @@
//
// ATFeedbackWindowController.h
// ApptentiveConnect
//
// Created by Andrew Wooster on 6/1/11.
// Copyright 2011 Apptentive, Inc. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "ATFeedback.h"
#import "ATImageView.h"
#import "ATAPIRequest.h"
#import "ATPlaceholderTextView.h"
@interface ATFeedbackWindowController : NSWindowController <NSWindowDelegate, NSTextViewDelegate, NSComboBoxDelegate, ATAPIRequestDelegate> {
IBOutlet ATPlaceholderTextView *feedbackTextView;
IBOutlet ATImageView *screenshotView;
IBOutlet NSProgressIndicator *progressIndicator;
IBOutlet NSComboBox *nameBox;
IBOutlet NSComboBox *emailBox;
IBOutlet NSComboBox *phoneNumberBox;
IBOutlet NSButton *sendButton;
IBOutlet NSButton *cancelButton;
IBOutlet NSImageView *logoImageView;
@private
ATAPIRequest *feedbackRequest;
ATFeedback *feedback;
}
@property (nonatomic, retain) ATFeedback *feedback;
- (id)initWithFeedback:(ATFeedback *)newFeedback;
- (IBAction)browseForScreenshotPressed:(id)sender;
- (IBAction)cancelPressed:(id)sender;
- (IBAction)sendFeedbackPressed:(id)sender;
- (IBAction)openApptentivePressed:(id)sender;
@end

378
Clocker/ApptentiveConnect/ApptentiveConnect/source/Controllers/ATFeedbackWindowController.m

@ -1,378 +0,0 @@
//
// ATFeedbackWindowController.m
// ApptentiveConnect
//
// Created by Andrew Wooster on 6/1/11.
// Copyright 2011 Apptentive, Inc. All rights reserved.
//
#import <AddressBook/AddressBook.h>
#import "ATFeedbackWindowController.h"
#import "ATBackend.h"
#import "ATConnect.h"
#import "ATContactStorage.h"
#import "ATImageView.h"
#import "ATConnect_FeedbackWindowPrivate.h"
#import "ATUtilities.h"
#import "ATWebClient.h"
#import <QuartzCore/QuartzCore.h>
@interface ATFeedbackWindowController (Private)
- (void)setup;
- (void)teardown;
/*! Fills in the contact information. */
- (void)fillInContactInfo;
/*! Returns the text view for the current feedback type. */
- (NSTextView *)currentTextView;
/*! Takes text from current text view and puts in feedback. */
- (void)updateFeedbackWithText;
/*! Takes text from feedback and puts in current text view. */
- (void)updateTextWithFeedback;
- (void)setScreenshotToFilename:(NSString *)filename;
- (void)imageChanged:(NSNotification *)notification;
@end
@implementation ATFeedbackWindowController
@synthesize feedback;
- (id)initWithFeedback:(ATFeedback *)newFeedback {
NSBundle *bundle = [ATConnect resourceBundle];
NSString *path = [bundle pathForResource:@"ATFeedbackWindow" ofType:@"nib"];
if ((self = [super initWithWindowNibPath:path owner:self])) {
self.feedback = newFeedback;
}
return self;
}
- (void)dealloc {
[self teardown];
[super dealloc];
}
- (void)windowDidLoad {
[super windowDidLoad];
[self setup];
}
#pragma mark Actions
- (IBAction)browseForScreenshotPressed:(id)sender {
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseFiles:YES];
[openPanel setCanCreateDirectories:NO];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setAllowedFileTypes:[NSArray arrayWithObjects:@"jpg", @"jpeg", @"png", @"gif", @"bmp", nil]];
if ([openPanel runModal] == NSOKButton) {
NSArray *URLs = [openPanel URLs];
for (NSURL *URL in URLs) {
[self setScreenshotToFilename:[URL path]];
}
}
}
- (IBAction)cancelPressed:(id)sender {
[self close];
}
- (IBAction)sendFeedbackPressed:(id)sender {
@synchronized(self) {
if (!feedbackRequest) {
[self updateFeedbackWithText];
[progressIndicator setHidden:NO];
[progressIndicator startAnimation:self];
[progressIndicator setDoubleValue:0.01];
feedbackRequest = [[[ATWebClient sharedClient] requestForPostingFeedback:self.feedback] retain];
feedbackRequest.delegate = self;
[feedbackRequest start];
[sendButton setEnabled:NO];
}
}
}
- (IBAction)openApptentivePressed:(id)sender {
[[NSWorkspace sharedWorkspace] openURL:[[ATBackend sharedBackend] apptentiveHomepageURL]];
}
#pragma mark ATAPIRequestDelegate
- (void)at_APIRequestDidFinish:(ATAPIRequest *)request result:(id)result {
@synchronized(self) {
feedbackRequest.delegate = nil;
[feedbackRequest release];
feedbackRequest = nil;
[progressIndicator setDoubleValue:1.0];
[progressIndicator stopAnimation:self];
[progressIndicator setHidden:YES];
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:@"Okay"];
[alert setMessageText:@"Thanks! Your feedback has been sent successfully"];
[alert setAlertStyle:NSInformationalAlertStyle];
[alert beginSheetModalForWindow:self.window modalDelegate:self didEndSelector:@selector(thanksSheetDidClose:returnCode:contextInfo:) contextInfo:nil];
}
}
- (void)at_APIRequestDidProgress:(ATAPIRequest *)request {
@synchronized(self) {
[progressIndicator setDoubleValue:(double)[request percentageComplete]];
}
}
- (void)at_APIRequestDidFail:(ATAPIRequest *)request {
//!!
[sendButton setEnabled:YES];
[progressIndicator stopAnimation:self];
[progressIndicator setHidden:YES];
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:ATLocalizedString(@"Try Again", @"Button title for failed request retry.")];
[alert addButtonWithTitle:ATLocalizedString(@"Cancel", @"Cancel")];
[alert setMessageText:request.errorTitle];
[alert setInformativeText:request.errorMessage];
[alert setAlertStyle:NSWarningAlertStyle];
[alert setIcon:[NSImage imageNamed:NSImageNameCaution]];
[alert beginSheetModalForWindow:self.window modalDelegate:self didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) contextInfo:nil];
feedbackRequest.delegate = nil;
[feedbackRequest release];
feedbackRequest = nil;
}
- (void)alertDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
if (returnCode == NSAlertFirstButtonReturn) {
[self sendFeedbackPressed:self];
} else if (returnCode == NSAlertSecondButtonReturn) {
[self close];
}
}
- (void)thanksSheetDidClose:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
[[ATBackend sharedBackend] setCurrentFeedback:nil];
[self performSelectorOnMainThread:@selector(close) withObject:nil waitUntilDone:NO];
}
#pragma mark NSWindowDelegate
- (void)windowWillClose:(NSNotification *)notification {
[self teardown];
}
#pragma mark NSComboBoxDelegate
- (void)comboBoxSelectionDidChange:(NSNotification *)notification {
NSComboBox *sender = (NSComboBox *)[notification object];
if (sender) {
NSString *value = (NSString *)[sender itemObjectValueAtIndex:[sender indexOfSelectedItem]];
if (value) {
if (sender == emailBox) {
self.feedback.email = value;
} else if (sender == phoneNumberBox) {
self.feedback.phone = value;
} else if (sender == nameBox) {
self.feedback.name = value;
}
}
}
}
#pragma mark NSTextViewDelegate
- (void)controlTextDidChange:(NSNotification *)aNotification {
NSControl *sender = (NSControl *)[aNotification object];
if (sender && [sender isKindOfClass:[NSComboBox class]]) {
NSString *value = [sender stringValue];
if (value) {
if (sender == emailBox) {
self.feedback.email = value;
} else if (sender == phoneNumberBox) {
self.feedback.phone = value;
} else if (sender == nameBox) {
self.feedback.name = value;
}
}
}
}
@end
@implementation ATFeedbackWindowController (Private)
- (void)setup {
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.styleMask |= NSFullSizeContentViewWindowMask;
self.window.titleVisibility = NSWindowTitleHidden;
self.window.delegate = self;
[self.window center];
[self.window setTitle:@"Send Feedback"];
[self fillInContactInfo];
[self updateTextWithFeedback];
if ([self.feedback hasScreenshot]) {
NSImage *screenshot = [[self.feedback copyScreenshot] autorelease];
screenshotView.image = screenshot;
}
[feedbackTextView setTextContainerInset:NSMakeSize(4, 4)];
NSString *placeholder = [[ATConnect sharedConnection] customPlaceholderText];
if (placeholder) {
feedbackTextView.placeholder = placeholder;
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageChanged:) name:ATImageViewContentsChanged object:nil];
[logoImageView setImage:[ATBackend imageNamed:@"at_logo_info"]];
[logoImageView setTarget:self];
[logoImageView setAction:@selector(openApptentivePressed:)];
[sendButton setTitle:@"Send Feedback"];
[cancelButton setTitle:@"Cancel"];
}
- (void)teardown {
[self updateFeedbackWithText];
[[ATConnect sharedConnection] feedbackWindowDidClose:self];
self.feedback = nil;
[[NSNotificationCenter defaultCenter] removeObserver:self name:ATImageViewContentsChanged object:nil];
}
- (void)fillInContactInfo {
ATContactStorage *contactStorage = [ATContactStorage sharedContactStorage];
NSMutableArray *names = [NSMutableArray array];
NSMutableArray *emails = [NSMutableArray array];
NSMutableArray *phoneNumbers = [NSMutableArray array];
if (contactStorage.name) {
[names addObject:contactStorage.name];
}
if (contactStorage.email) {
[emails addObject:contactStorage.email];
}
if (contactStorage.phone) {
[phoneNumbers addObject:contactStorage.phone];
}
if (self.feedback.name) {
[names addObject:self.feedback.name];
}
if (self.feedback.email) {
[emails addObject:self.feedback.email];
}
if (self.feedback.phone) {
[phoneNumbers addObject:self.feedback.phone];
}
ABPerson *me = nil;
// Uncommenting the following line will cause OS X to prompt the user for Contacts access.
// "THIS_APP would like to access your contacts. [Don't Allow] [OK]"
// Disabling for now.
// me = [[ABAddressBook sharedAddressBook] me];
if (me) {
NSString *firstName = [me valueForProperty:kABFirstNameProperty];
NSString *middleName = [me valueForProperty:kABMiddleNameProperty];
NSString *lastName = [me valueForProperty:kABLastNameProperty];
NSMutableArray *nameParts = [NSMutableArray array];
if (firstName) {
[nameParts addObject:firstName];
}
if (middleName) {
[nameParts addObject:middleName];
}
if (lastName) {
[nameParts addObject:lastName];
}
if ([nameParts count]) {
NSString *newName = [nameParts componentsJoinedByString:@" "];
if (contactStorage.name == nil || ![contactStorage.name isEqualToString:newName]) {
[names addObject:newName];
}
}
ABMultiValue *abEmails = [me valueForProperty:kABEmailProperty];
if (abEmails && [abEmails count]) {
for (NSInteger i = 0; i < [abEmails count]; i++) {
NSString *abEmail = [abEmails valueAtIndex:i];
if (contactStorage.email == nil || ![contactStorage.email isEqualToString:abEmail]) {
[emails addObject:abEmail];
}
}
}
ABMultiValue *abPhoneNumbers = [me valueForProperty:kABPhoneProperty];
if (abPhoneNumbers && [abPhoneNumbers count]) {
for (NSInteger i = 0; i < [abPhoneNumbers count]; i++) {
NSString *abPhoneNumber = [abPhoneNumbers valueAtIndex:i];
if (contactStorage.phone == nil || ![contactStorage.phone isEqualToString:abPhoneNumber]) {
[phoneNumbers addObject:abPhoneNumber];
}
}
}
}
[ATUtilities uniquifyArray:names];
[ATUtilities uniquifyArray:emails];
[ATUtilities uniquifyArray:phoneNumbers];
if (nameBox && [names count]) {
[nameBox addItemsWithObjectValues:names];
if (self.feedback.name && [names containsObject:self.feedback.name]) {
[nameBox selectItemAtIndex:[names indexOfObject:self.feedback.name]];
} else {
[nameBox selectItemAtIndex:0];
}
}
if (emailBox && [emails count]) {
[emailBox addItemsWithObjectValues:emails];
if (self.feedback.email && [emails containsObject:self.feedback.email]) {
[emailBox selectItemAtIndex:[emails indexOfObject:self.feedback.email]];
} else {
[emailBox selectItemAtIndex:0];
}
}
if (phoneNumberBox && [phoneNumbers count]) {
[phoneNumberBox addItemsWithObjectValues:phoneNumbers];
if (self.feedback.phone && [phoneNumbers containsObject:self.feedback.phone]) {
[phoneNumberBox selectItemAtIndex:[phoneNumbers indexOfObject:self.feedback.phone]];
} else {
[phoneNumberBox selectItemAtIndex:0];
}
}
}
- (NSTextView *)currentTextView {
NSTextView *result = feedbackTextView;
return result;
}
- (void)updateFeedbackWithText {
NSString *text = [[[self currentTextView] textStorage] string];
self.feedback.text = text;
}
- (void)updateTextWithFeedback {
NSTextView *currentTextView = [self currentTextView];
NSRange range = NSMakeRange(0, [[currentTextView textStorage] length]);
NSString *replacement = self.feedback.text ? self.feedback.text : @"";
[[currentTextView textStorage] replaceCharactersInRange:range withString:replacement];
}
- (void)setScreenshotToFilename:(NSString *)filename {
NSImage *image = [[NSImage alloc] initWithContentsOfFile:filename];
if (image) {
self.feedback.screenshot = image;
[screenshotView setImage:image];
}
[image release];
}
- (void)imageChanged:(NSNotification *)notification {
NSObject *obj = [notification object];
if (obj == screenshotView) {
NSImage *feedbackScreenshot = [[self.feedback copyScreenshot] autorelease];
if ([screenshotView image] != feedbackScreenshot) {
self.feedback.screenshot = [screenshotView image];
}
}
}
@end

15
Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATConnect_FeedbackWindowPrivate.h

@ -1,15 +0,0 @@
//
// ATConnect_FeedbackWindowPrivate.h
// ApptentiveConnect
//
// Created by Andrew Wooster on 6/28/11.
// Copyright 2011 Apptentive, Inc. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "ATConnect.h"
@interface ATConnect (FeedbackWindowPrivate)
- (void)feedbackWindowDidClose:(id)sender;
@end

19
Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATConnect_FeedbackWindowPrivate.m

@ -1,19 +0,0 @@
//
// ATConnect_FeedbackWindowPrivate.m
// ApptentiveConnect
//
// Created by Andrew Wooster on 6/28/11.
// Copyright 2011 Apptentive, Inc. All rights reserved.
//
#import "ATConnect_FeedbackWindowPrivate.h"
@implementation ATConnect (FeedbackWindowPrivate)
- (void)feedbackWindowDidClose:(id)sender {
if (feedbackWindowController && feedbackWindowController == sender) {
[feedbackWindowController autorelease];
feedbackWindowController = nil;
}
}
@end

16
Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATImageButton.h

@ -1,16 +0,0 @@
//
// ATImageButton.h
// ApptentiveConnect
//
// Created by Andrew Wooster on 7/2/11.
// Copyright 2011 Apptentive, Inc. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface ATImageButton : NSImageView {
}
@end

18
Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATImageButton.m

@ -1,18 +0,0 @@
//
// ATImageButton.m
// ApptentiveConnect
//
// Created by Andrew Wooster on 7/2/11.
// Copyright 2011 Apptentive, Inc. All rights reserved.
//
#import "ATImageButton.h"
@implementation ATImageButton
- (void)mouseDown:(NSEvent *)theEvent {
if ([self target] && [self action]) {
[NSApp sendAction:[self action] to:[self target] from:self];
}
}
@end

17
Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATImageView.h

@ -1,17 +0,0 @@
//
// ATImageView.h
// ApptentiveConnect
//
// Created by Andrew Wooster on 6/28/11.
// Copyright 2011 Apptentive, Inc. All rights reserved.
//
#import <Cocoa/Cocoa.h>
NSString *const ATImageViewContentsChanged;
@interface ATImageView : NSImageView {
}
@end

27
Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATImageView.m

@ -1,27 +0,0 @@
//
// ATImageView.m
// ApptentiveConnect
//
// Created by Andrew Wooster on 6/28/11.
// Copyright 2011 Apptentive, Inc. All rights reserved.
//
#import "ATImageView.h"
NSString *const ATImageViewContentsChanged = @"ATImageViewContentsChanged";
@implementation ATImageView
- (void)setImage:(NSImage *)newImage {
BOOL wasNew = NO;
if ([self image] != newImage) {
wasNew = YES;
}
[super setImage:newImage];
if (wasNew) {
[[NSNotificationCenter defaultCenter] postNotificationName:ATImageViewContentsChanged object:self];
}
}
@end

17
Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATPlaceholderTextView.h

@ -1,17 +0,0 @@
//
// ATPlaceholderTextView.h
// ApptentiveConnect
//
// Created by Andrew Wooster on 8/30/12.
// Copyright (c) 2012 Apptentive, Inc. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface ATPlaceholderTextView : NSTextView {
@private
NSString *placeholder;
}
@property (nonatomic, retain) NSString *placeholder;
- (BOOL)isDefault;
@end

65
Clocker/ApptentiveConnect/ApptentiveConnect/source/Misc/ATPlaceholderTextView.m

@ -1,65 +0,0 @@
//
// ATPlaceholderTextView.m
// ApptentiveConnect
//
// Created by Andrew Wooster on 8/30/12.
// Copyright (c) 2012 Apptentive, Inc. All rights reserved.
//
#import "ATPlaceholderTextView.h"
@implementation ATPlaceholderTextView
@synthesize placeholder;
- (id)initWithFrame:(NSRect)frame {
if ((self = [super initWithFrame:frame])) {
}
return self;
}
- (void)dealloc {
[placeholder release], placeholder = nil;
[super dealloc];
}
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
if (placeholder != nil && [self isDefault]) {
CGRect r = NSRectToCGRect([self frame]);
r.origin.x += 6;
CGSize inset = NSSizeToCGSize([self textContainerInset]);
NSRect textRect = NSRectFromCGRect(CGRectInset(r, inset.width, inset.height));
NSAttributedString *s = [[NSAttributedString alloc] initWithString:self.placeholder attributes:[NSDictionary dictionaryWithObject:[NSColor grayColor] forKey:NSForegroundColorAttributeName]];
[s drawInRect:textRect];
[s release], s = nil;
}
}
- (void)setPlaceholder:(NSString *)newPlaceholder {
if (placeholder != newPlaceholder) {
[placeholder release];
placeholder = nil;
placeholder = [newPlaceholder retain];
[self setNeedsDisplay:YES];
}
}
- (BOOL)isDefault {
if (![self string] || [[self string] length] == 0) return YES;
return NO;
}
- (BOOL)becomeFirstResponder {
if (placeholder != nil) {
[self setNeedsDisplay:YES];
}
return [super becomeFirstResponder];
}
- (BOOL)resignFirstResponder {
if (placeholder != nil) {
[self setNeedsDisplay:YES];
}
return [super resignFirstResponder];
}
@end

17
Clocker/ApptentiveConnect/ApptentiveConnect/tests/ATSampleTest.h

@ -1,17 +0,0 @@
//
// ATSampleTest.h
// ApptentiveConnect
//
// Created by Andrew Wooster on 5/30/11.
// Copyright 2011 Planetary Scale LLC. All rights reserved.
//
#import <SenTestingKit/SenTestingKit.h>
@interface ATSampleTest : SenTestCase {
}
- (void)testTests;
@end

17
Clocker/ApptentiveConnect/ApptentiveConnect/tests/ATSampleTest.m

@ -1,17 +0,0 @@
//
// ATSampleTest.m
// ApptentiveConnect
//
// Created by Andrew Wooster on 5/30/11.
// Copyright 2011 Planetary Scale LLC. All rights reserved.
//
#import "ATSampleTest.h"
@implementation ATSampleTest
- (void)testTests {
STAssertTrue(YES, @"Should always pass.");
}
@end

22
Clocker/ApptentiveConnect/ApptentiveConnect/tests/ApptentiveUnitTests-Info.plist

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

249
Clocker/ApptentiveConnect/ApptentiveConnect/xibs/ATFeedbackWindow.xib

@ -1,249 +0,0 @@
<?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">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/>
<capability name="box content view" minToolsVersion="7.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="ATFeedbackWindowController">
<connections>
<outlet property="cancelButton" destination="40" id="112"/>
<outlet property="emailBox" destination="24" id="67"/>
<outlet property="feedbackTextView" destination="109" id="111"/>
<outlet property="nameBox" destination="22" id="66"/>
<outlet property="phoneNumberBox" destination="26" id="68"/>
<outlet property="progressIndicator" destination="57" id="60"/>
<outlet property="screenshotView" destination="13" id="88"/>
<outlet property="sendButton" destination="38" id="92"/>
<outlet property="window" destination="1" id="3"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Send Feedback" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="309" y="98" width="379" height="528"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="379" height="528"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="104">
<rect key="frame" x="20" y="230" width="339" height="176"/>
<autoresizingMask key="autoresizingMask"/>
<clipView key="contentView" id="ERA-pO-91r">
<rect key="frame" x="1" y="1" width="337" height="174"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textView importsGraphics="NO" richText="NO" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" usesFontPanel="YES" verticallyResizable="YES" allowsNonContiguousLayout="YES" quoteSubstitution="YES" spellingCorrection="YES" smartInsertDelete="YES" id="109" customClass="ATPlaceholderTextView">
<rect key="frame" x="0.0" y="0.0" width="337" height="174"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<size key="minSize" width="337" height="174"/>
<size key="maxSize" width="689" height="10000000"/>
<color key="insertionPointColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<size key="minSize" width="337" height="174"/>
<size key="maxSize" width="689" height="10000000"/>
<connections>
<outlet property="delegate" destination="-2" id="110"/>
</connections>
</textView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="0.99128919860627185" horizontal="YES" id="108">
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="107">
<rect key="frame" x="322" y="1" width="16" height="174"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<view id="103">
<rect key="frame" x="20" y="172" width="693" height="57"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView id="13" customClass="ATImageView">
<rect key="frame" x="0.0" y="4" width="48" height="48"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" selectable="YES" editable="YES" alignment="left" imageScaling="proportionallyDown" imageFrameStyle="grayBezel" id="14"/>
</imageView>
<textField verticalHuggingPriority="750" id="15">
<rect key="frame" x="50" y="20" width="292" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Attach a screenshot. (Optional)" id="16">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" id="84">
<rect key="frame" x="248" y="11" width="98" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Browse…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="85">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="browseForScreenshotPressed:" target="-2" id="86"/>
</connections>
</button>
</subviews>
</view>
<box autoresizesSubviews="NO" title="Contact Information (Optional)" borderType="line" id="21">
<rect key="frame" x="17" y="56" width="345" height="116"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<view key="contentView" id="tQf-lo-L4t">
<rect key="frame" x="1" y="1" width="343" height="100"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<comboBox verticalHuggingPriority="750" id="22" userLabel="Name Box">
<rect key="frame" x="112" y="66" width="223" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="23">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</comboBoxCell>
<connections>
<outlet property="delegate" destination="-2" id="89"/>
</connections>
</comboBox>
<comboBox verticalHuggingPriority="750" id="26" userLabel="Phone Number Box">
<rect key="frame" x="112" y="10" width="223" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="27">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</comboBoxCell>
<connections>
<outlet property="delegate" destination="-2" id="91"/>
</connections>
</comboBox>
<textField verticalHuggingPriority="750" id="28">
<rect key="frame" x="10" y="71" width="99" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Name:" id="29">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" id="30">
<rect key="frame" x="10" y="44" width="99" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Email:" id="31">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" id="32">
<rect key="frame" x="10" y="16" width="99" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Phone Number:" id="33">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<comboBox verticalHuggingPriority="750" id="24" userLabel="Email Box">
<rect key="frame" x="112" y="36" width="223" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="25">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</comboBoxCell>
<connections>
<outlet property="delegate" destination="-2" id="90"/>
</connections>
</comboBox>
</subviews>
</view>
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</box>
<button verticalHuggingPriority="750" id="38">
<rect key="frame" x="231" y="12" width="134" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Send Feedback" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="39">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="sendFeedbackPressed:" target="-2" id="65"/>
</connections>
</button>
<progressIndicator hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" style="bar" id="57">
<rect key="frame" x="20" y="19" width="128" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
</progressIndicator>
<textField verticalHuggingPriority="750" id="105">
<rect key="frame" x="118" y="450" width="242" height="25"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="We'd love to hear your feedback!" id="106">
<font key="font" size="13" name="HelveticaNeue-Light"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" id="w67-Zy-sbN">
<rect key="frame" x="118" y="429" width="242" height="25"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Entering your contact information will help" id="acW-hX-N0a">
<font key="font" size="12" name="HelveticaNeue-Thin"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" id="Zyi-mo-cyd">
<rect key="frame" x="118" y="414" width="242" height="25"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="us get back to you!" id="dmd-4c-7qG">
<font key="font" size="12" name="HelveticaNeue-Thin"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" id="40">
<rect key="frame" x="154" y="12" width="82" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="41">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
Gw
</string>
</buttonCell>
<connections>
<action selector="cancelPressed:" target="-2" id="64"/>
</connections>
</button>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="yby-ks-U3D">
<rect key="frame" x="22" y="423" width="91" height="81"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="ClockerIcon-256" id="GY7-Dm-Gic"/>
</imageView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="Xda-0B-qgr">
<rect key="frame" x="118" y="473" width="158" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Clocker v1.2" id="TOY-gt-W6r">
<font key="font" size="29" name="HelveticaNeue-Thin"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
</view>
<point key="canvasLocation" x="59.5" y="54"/>
</window>
</objects>
<resources>
<image name="ClockerIcon-256" width="256" height="256"/>
</resources>
</document>

34
Clocker/ApptentiveConnect/CHANGELOG.md

@ -1,34 +0,0 @@
2015-02-28 pkamb v0.4.12
--------------------------
This release removes a request to access the OS X Contacts list to pre-fill the Feedback Dialog form.
The Contacts permission request was unexpected to some developers and users. This will be re-added as an option in the future.
2014-12-05 wooster v0.4.11
--------------------------
Fixes problem where prompting on launch would never work.
This was a regression due to a bad merge.
2012-10-08 wooster v0.4.8
-------------------------
Fixing APPTENTIVE-571, in which custom app data wasn't being sent with feedback.
2012-09-19 wooster v0.4.7
-------------------------
The big change here is a switch to git subtrees from a submodule for the copy of apptentive-ios in the project. This makes checking out the project and getting started much easier.
Changes:
* Fix for ratings dialog not showing up due to reachability failing.
* OSX-6 Switch to git subtrees for apptentive-ios
2012-08-29 wooster v0.4.6
-------------------------
Changes:
* Pulled in v0.4.5 of apptentive-ios.
* Went from JSONKit to PrefixedJSONKit.
* Removed methods for displaying different feedback window types on OS X.
* Added placeholder text in feedback window.

9
Clocker/ApptentiveConnect/CONTRIBUTING.md

@ -1,9 +0,0 @@
Contributing
------------
We love contributions!
Any contributions to the master apptentive-osx project must sign the [Individual Contributor License Agreement (CLA)](https://docs.google.com/a/apptentive.com/spreadsheet/viewform?formkey=dDhMaXJKQnRoX0dRMzZNYnp5bk1Sbmc6MQ#gid=0). It's a doc that makes our lawyers happy and ensures we can provide a solid open source project.
When you want to submit a change, send us a [pull request](https://github.com/apptentive/apptentive-osx/pulls). Before we merge, we'll check to make sure you're on the list of people who've signed our CLA.
Thanks!

2
Clocker/ApptentiveConnect/FeedbackDemo/English.lproj/InfoPlist.strings

@ -1,2 +0,0 @@
/* Localized versions of Info.plist keys */

3857
Clocker/ApptentiveConnect/FeedbackDemo/English.lproj/MainMenu.xib

File diff suppressed because it is too large Load Diff

32
Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo-Info.plist

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string>ApptentiveLogo</string>
<key>CFBundleIdentifier</key>
<string>com.apptentive.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

416
Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo.xcodeproj/project.pbxproj

@ -1,416 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
256AC3DA0F4B6AC300CF3369 /* FeedbackDemoAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* FeedbackDemoAppDelegate.m */; };
491CA3B915F065DF0003BC38 /* ApptentiveLogo.icns in Resources */ = {isa = PBXBuildFile; fileRef = 491CA3A515F026E10003BC38 /* ApptentiveLogo.icns */; };
49626DDA13970DC30093534C /* ApptentiveConnect.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49626DD713970DB80093534C /* ApptentiveConnect.framework */; };
49626DDF13970DD60093534C /* ApptentiveConnect.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 49626DD713970DB80093534C /* ApptentiveConnect.framework */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
49626DD613970DB80093534C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 8DC2EF5B0486A6940098B216;
remoteInfo = ApptentiveConnect;
};
49626DD813970DB80093534C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 49626B6D13942A2B0093534C;
remoteInfo = ApptentiveUnitTests;
};
49626DDB13970DCE0093534C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
remoteInfo = ApptentiveConnect;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
49626D9613970A080093534C /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
49626DDF13970DD60093534C /* ApptentiveConnect.framework in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
49626E0013970FE60093534C /* Copy Products */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 16;
files = (
);
name = "Copy Products";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; };
256AC3D80F4B6AC300CF3369 /* FeedbackDemoAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeedbackDemoAppDelegate.h; sourceTree = "<group>"; };
256AC3D90F4B6AC300CF3369 /* FeedbackDemoAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FeedbackDemoAppDelegate.m; sourceTree = "<group>"; };
256AC3F00F4B6AF500CF3369 /* FeedbackDemo_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeedbackDemo_Prefix.pch; sourceTree = "<group>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
491CA3A515F026E10003BC38 /* ApptentiveLogo.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = ApptentiveLogo.icns; sourceTree = "<group>"; };
49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ApptentiveConnect.xcodeproj; path = ../ApptentiveConnect/ApptentiveConnect.xcodeproj; sourceTree = SOURCE_ROOT; };
4971B31513BB955100774B70 /* defines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = defines.h; sourceTree = "<group>"; };
4972847913CA6273002AD591 /* ATAppRatingFlow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ATAppRatingFlow.h; path = "../apptentive-ios/ApptentiveConnect/source/Rating Flow/ATAppRatingFlow.h"; sourceTree = SOURCE_ROOT; };
49891FE813B3BCA1007967BA /* ATConnect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ATConnect.h; path = "../apptentive-ios/ApptentiveConnect/source/ATConnect.h"; sourceTree = SOURCE_ROOT; };
8D1107310486CEB800E47090 /* FeedbackDemo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "FeedbackDemo-Info.plist"; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* FeedbackDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FeedbackDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
49626DDA13970DC30093534C /* ApptentiveConnect.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
256AC3D80F4B6AC300CF3369 /* FeedbackDemoAppDelegate.h */,
256AC3D90F4B6AC300CF3369 /* FeedbackDemoAppDelegate.m */,
4971B31513BB955100774B70 /* defines.h */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D1107320486CEB800E47090 /* FeedbackDemo.app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* FeedbackDemo */ = {
isa = PBXGroup;
children = (
49891FE813B3BCA1007967BA /* ATConnect.h */,
4972847913CA6273002AD591 /* ATAppRatingFlow.h */,
49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */,
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = FeedbackDemo;
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
256AC3F00F4B6AF500CF3369 /* FeedbackDemo_Prefix.pch */,
29B97316FDCFA39411CA2CEA /* main.m */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
491CA3A415F026E10003BC38 /* art */,
8D1107310486CEB800E47090 /* FeedbackDemo-Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
1DDD58140DA1D0A300B32029 /* MainMenu.xib */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
491CA3A415F026E10003BC38 /* art */ = {
isa = PBXGroup;
children = (
491CA3A515F026E10003BC38 /* ApptentiveLogo.icns */,
);
path = art;
sourceTree = "<group>";
};
49626DD213970DB80093534C /* Products */ = {
isa = PBXGroup;
children = (
49626DD713970DB80093534C /* ApptentiveConnect.framework */,
49626DD913970DB80093534C /* ApptentiveUnitTests.octest */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* FeedbackDemo */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "FeedbackDemo" */;
buildPhases = (
49626E0013970FE60093534C /* Copy Products */,
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
49626D9613970A080093534C /* CopyFiles */,
);
buildRules = (
);
dependencies = (
49626DDC13970DCE0093534C /* PBXTargetDependency */,
);
name = FeedbackDemo;
productInstallPath = "$(HOME)/Applications";
productName = FeedbackDemo;
productReference = 8D1107320486CEB800E47090 /* FeedbackDemo.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0460;
};
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "FeedbackDemo" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 29B97314FDCFA39411CA2CEA /* FeedbackDemo */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 49626DD213970DB80093534C /* Products */;
ProjectRef = 49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */;
},
);
projectRoot = "";
targets = (
8D1107260486CEB800E47090 /* FeedbackDemo */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
49626DD713970DB80093534C /* ApptentiveConnect.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = ApptentiveConnect.framework;
remoteRef = 49626DD613970DB80093534C /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
49626DD913970DB80093534C /* ApptentiveUnitTests.octest */ = {
isa = PBXReferenceProxy;
fileType = wrapper.cfbundle;
path = ApptentiveUnitTests.octest;
remoteRef = 49626DD813970DB80093534C /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */,
491CA3B915F065DF0003BC38 /* ApptentiveLogo.icns in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
256AC3DA0F4B6AC300CF3369 /* FeedbackDemoAppDelegate.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
49626DDC13970DCE0093534C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = ApptentiveConnect;
targetProxy = 49626DDB13970DCE0093534C /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
1DDD58150DA1D0A300B32029 /* English */,
);
name = MainMenu.xib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
FRAMEWORK_SEARCH_PATHS = "";
GCC_DYNAMIC_NO_PIC = NO;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = FeedbackDemo_Prefix.pch;
INFOPLIST_FILE = "FeedbackDemo-Info.plist";
INSTALL_PATH = "$(HOME)/Applications";
MACOSX_DEPLOYMENT_TARGET = 10.7;
OTHER_LDFLAGS = (
"-ObjC",
"-all_load",
);
PRODUCT_NAME = FeedbackDemo;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
FRAMEWORK_SEARCH_PATHS = "";
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = FeedbackDemo_Prefix.pch;
INFOPLIST_FILE = "FeedbackDemo-Info.plist";
INSTALL_PATH = "$(HOME)/Applications";
MACOSX_DEPLOYMENT_TARGET = 10.7;
OTHER_LDFLAGS = (
"-ObjC",
"-all_load",
);
PRODUCT_NAME = FeedbackDemo;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
SDKROOT = macosx;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "FeedbackDemo" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "FeedbackDemo" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}

7
Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata generated

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

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

Binary file not shown.

91
Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcschemes/FeedbackDemo.xcscheme

@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0720"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8D1107260486CEB800E47090"
BuildableName = "FeedbackDemo.app"
BlueprintName = "FeedbackDemo"
ReferencedContainer = "container:FeedbackDemo.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8D1107260486CEB800E47090"
BuildableName = "FeedbackDemo.app"
BlueprintName = "FeedbackDemo"
ReferencedContainer = "container:FeedbackDemo.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8D1107260486CEB800E47090"
BuildableName = "FeedbackDemo.app"
BlueprintName = "FeedbackDemo"
ReferencedContainer = "container:FeedbackDemo.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8D1107260486CEB800E47090"
BuildableName = "FeedbackDemo.app"
BlueprintName = "FeedbackDemo"
ReferencedContainer = "container:FeedbackDemo.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

22
Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo.xcodeproj/xcuserdata/abhishekbanthia.xcuserdatad/xcschemes/xcschememanagement.plist

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>FeedbackDemo.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>8D1107260486CEB800E47090</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

22
Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemoAppDelegate.h

@ -1,22 +0,0 @@
//
// FeedbackDemoAppDelegate.h
// FeedbackDemo
//
// Created by Andrew Wooster on 5/30/11.
// Copyright 2011 Planetary Scale LLC. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import <ApptentiveConnect/ATConnect.h>
@interface FeedbackDemoAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
NSTextField *versionTextField;
}
@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSTextField *versionTextField;
- (IBAction)showFeedbackWindow:(id)sender;
- (IBAction)showRatingFlow:(id)sender;
@end

39
Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemoAppDelegate.m

@ -1,39 +0,0 @@
//
// FeedbackDemoAppDelegate.m
// FeedbackDemo
//
// Created by Andrew Wooster on 5/30/11.
// Copyright 2011 Planetary Scale LLC. All rights reserved.
//
#import "FeedbackDemoAppDelegate.h"
#import <ApptentiveConnect/ATConnect.h>
#import <ApptentiveConnect/ATAppRatingFlow.h>
#import "defines.h"
@implementation FeedbackDemoAppDelegate
@synthesize window;
@synthesize versionTextField;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
[[ATConnect sharedConnection] setApiKey:kApptentiveAPIKey];
self.versionTextField.stringValue = [NSString stringWithFormat:@"ApptentiveConnect v%@", kATConnectVersionString];
ATAppRatingFlow *ratingFlow = [ATAppRatingFlow sharedRatingFlowWithAppID:kApptentiveAppID];
[ratingFlow appDidLaunch:YES];
}
- (IBAction)showFeedbackWindow:(id)sender {
[[ATConnect sharedConnection] showFeedbackWindow:sender];
}
- (IBAction)showFeedbackWindowForFeedback:(id)sender {
[[ATConnect sharedConnection] showFeedbackWindow:self];
}
- (IBAction)showRatingFlow:(id)sender {
ATAppRatingFlow *ratingFlow = [ATAppRatingFlow sharedRatingFlowWithAppID:kApptentiveAppID];
[ratingFlow showEnjoymentDialog:sender];
}
@end

7
Clocker/ApptentiveConnect/FeedbackDemo/FeedbackDemo_Prefix.pch

@ -1,7 +0,0 @@
//
// Prefix header for all source files of the 'FeedbackDemo' target in the 'FeedbackDemo' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

BIN
Clocker/ApptentiveConnect/FeedbackDemo/art/ApptentiveLogo.icns

Binary file not shown.

11
Clocker/ApptentiveConnect/FeedbackDemo/defines.h

@ -1,11 +0,0 @@
/*
* defines.h
* FeedbackDemo
*
* Created by Andrew Wooster on 6/29/11.
* Copyright 2011 Apptentive. All rights reserved.
*
*/
#define kApptentiveAPIKey @"<your API key>"
#define kApptentiveAppID @"<your App Store ID>"

14
Clocker/ApptentiveConnect/FeedbackDemo/main.m

@ -1,14 +0,0 @@
//
// main.m
// FeedbackDemo
//
// Created by Andrew Wooster on 5/30/11.
// Copyright 2011 Planetary Scale LLC. All rights reserved.
//
#import <Cocoa/Cocoa.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **) argv);
}

24
Clocker/ApptentiveConnect/LICENSE.txt

@ -1,24 +0,0 @@
Copyright (c) 2011, Apptentive, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Apptentive, Inc. nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL Apptentive, Inc. BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

125
Clocker/ApptentiveConnect/README.md

@ -1,125 +0,0 @@
Apptentive Mac SDK
==================
This Cocoa library for OS X allows you to add a quick and easy in-app-feedback
mechanism to your Mac applications. Feedback is sent to the Apptentive web
service.
Quickstart
==========
Sample Application
------------------
The sample application FeedbackDemo demonstrates how to integrate the SDK
with your application.
Required Frameworks
-------------------
In order to use `ApptentiveConnect`, your project must link against the
following frameworks:
* AppKit
* CoreGraphics
* Foundation
* QuartzCore
* SystemConfiguration
Project Settings for Xcode 4
----------------------------
Check out the `apptentive-osx` project from GitHub. You'll either want to put it in a
sub-folder of your project or, if you use `git`, add it as a [git submodule](http://help.github.com/submodules/).
In your target's `Build Settings` section, add the following to your Other Linker Flags settings:
`-ObjC -all_load`
Then, open your project in Xcode and drag the `ApptentiveConnect.xcodeproj` project file
to your project:
![Step 1](https://raw.github.com/apptentive/apptentive-osx/master/etc/screenshots/integration_step1.png)
In your apps' target settings, add `ApptentiveConnect` to the "Target Dependencies" build phase:
![Step 2](https://raw.github.com/apptentive/apptentive-osx/master/etc/screenshots/integration_step2.png)
Next, add `ApptentiveConnect.framework` to the "Link Binary With Libraries" build phase:
![Step 3](https://raw.github.com/apptentive/apptentive-osx/master/etc/screenshots/integration_step3.png)
Finally, drag the `ApptentiveConnect.framework` from the `ApptentiveConnect` project to the
"Copy Bundle Resources" build phase:
![Step 4](https://raw.github.com/apptentive/apptentive-osx/master/etc/screenshots/integration_step4.png)
Using the Library
-----------------
`ApptentiveConnect` queues feedback and attempts to upload in the background. This
is intended to provide as quick a mechanism for submitting feedback as possible.
In order for queued/interrupted feedback uploads to continue uploading, we
recommending instantiating `ATConnect` and setting the API key at application
startup, like:
``` objective-c
#import <ApptentiveConnect/ATConnect.h>
// ...
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
ATConnect *connection = [ATConnect sharedConnection];
connection.apiKey = kApptentiveAPIKey;
// ...
}
```
Where `kApptentiveAPIKey` is an `NSString` containing your API key. As soon
as you set the API key on the shared connection object, any queued feedback
will start to upload, pending network availability. You also should not have
to set the API key again on the shared connection object.
Now, you can show the Apptentive feedback UI with:
``` objective-c
#import <ApptentiveConnect/ATConnect.h>
// ...
ATConnect *connection = [ATConnect sharedConnection];
[connection showFeedbackWindow:sender];
```
Easy!
App Rating Flow
---------------
`ApptentiveConnect` now provides an app rating flow similar to other projects
such as [appirator](https://github.com/arashpayan/appirater). To use it, add
the `ATAppRatingFlow.h` header file to your project.
Then, at startup, instantiate a shared `ATAppRatingFlow` object with your
iTunes app ID (see "Finding Your iTunes App ID" below):
``` objective-c
#import <ApptentiveConnect/ATAppRatingFlow.h>
// ...
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[[ATConnect sharedConnection] setApiKey:kApptentiveAPIKey];
ATAppRatingFlow *ratingFlow = [ATAppRatingFlow sharedRatingFlowWithAppID:kApptentiveAppID];
[ratingFlow appDidLaunch:YES];
}
```
You can also choose to show the dialog manually:
``` objective-c
ATAppRatingFlow *ratingFlow = [ATAppRatingFlow sharedRatingFlowWithAppID:kApptentiveAppID];
[ratingFlow showEnjoymentDialog:sender];
```
This is helpful if you want to implement custom triggers for the ratings
flow.
**Finding Your iTunes App ID**
In [iTunesConnect](https://itunesconnect.apple.com/), go to "Manage Your
Applications" and click on your application. In the "App Information"
section of the page, look for the "Apple ID". It will be a number. This is
your iTunes application ID.

28
Clocker/ApptentiveConnect/apptentive-osx.podspec

@ -1,28 +0,0 @@
Pod::Spec.new do |s|
s.name = "apptentive-osx"
s.version = "0.4.12"
s.license = "BSD"
s.summary = "Apptentive Customer Communications SDK."
s.homepage = "https://www.apptentive.com/"
s.authors = { "Andrew Wooster" => "andrew@apptentive.com",
"Peter Kamb" => "peter@apptentive.com" }
s.source = { :git => "https://github.com/apptentive/apptentive-osx.git", :tag => "v#{s.version}" }
s.platform = :osx, '10.7'
s.osx.deployment_target = '10.7'
s.description = <<-DESC
This Cocoa library for OS X allows you to add a quick and easy in-app-feedback
mechanism to your Mac applications. Feedback is sent to the Apptentive web service.
DESC
s.public_header_files = "apptentive-ios/ApptentiveConnect/source/ATConnect.h",
"apptentive-ios/ApptentiveConnect/source/Rating Flow/ATAppRatingFlow.h"
s.source_files = "ApptentiveConnect/source/**/*.{h,m}",
"apptentive-ios/ApptentiveConnect/ext/**/*.{h,m}",
"apptentive-ios/ApptentiveConnect/source/**/*.{h,m}"
s.exclude_files = "apptentive-ios/ApptentiveConnect/source/Controllers/**/*",
"apptentive-ios/ApptentiveConnect/source/Custom Views/**/*",
"apptentive-ios/ApptentiveConnect/source/Surveys/**/*"
s.requires_arc = false
s.frameworks = "Cocoa", "SystemConfiguration", "AddressBook"
s.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => "JSONKIT_PREFIX=AT AT_LOGGING_LEVEL_INFO=1 AT_LOGGING_LEVEL_ERROR=1 AT_RESOURCE_BUNDLE=1" }
s.resource_bundle = {"ApptentiveResources" => ["ApptentiveConnect/xibs/**/*.xib", "apptentive-ios/ApptentiveConnect/art/generated/at_logo_info*.png"] }
end

BIN
Clocker/ApptentiveConnect/etc/screenshots/integration_step1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

BIN
Clocker/ApptentiveConnect/etc/screenshots/integration_step2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

BIN
Clocker/ApptentiveConnect/etc/screenshots/integration_step3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

BIN
Clocker/ApptentiveConnect/etc/screenshots/integration_step4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

14
Clocker/CLOneWindow/CLOneWindow.xib

@ -13,7 +13,6 @@
<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" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="240" width="480" height="275"/>
<rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
<view key="contentView" id="se5-gp-TjO">
@ -22,12 +21,17 @@
</view>
<toolbar key="toolbar" implicitIdentifier="15DCF3D0-4463-497F-B0C3-14E5359E9266" autosavesConfiguration="NO" displayMode="iconAndLabel" sizeMode="small" id="eut-Zr-nON">
<allowedToolbarItems>
<toolbarItem implicitItemIdentifier="716E502A-B9AE-4776-9A41-E42176C403F7" label="General" paletteLabel="General" tag="-1" image="NSHomeTemplate" id="Khj-zc-D5t">
<toolbarItem implicitItemIdentifier="716E502A-B9AE-4776-9A41-E42176C403F7" label="General" paletteLabel="General" tag="-1" image="NSPreferencesGeneral" id="Khj-zc-D5t">
<connections>
<action selector="openPreferences:" target="-2" id="rJI-gB-Gcb"/>
</connections>
</toolbarItem>
<toolbarItem implicitItemIdentifier="B5E58161-D319-4490-AD3C-CED0C67FD50E" label="Appearance" paletteLabel="About Us" tag="-1" image="NSInfo" autovalidates="NO" id="ti4-MJ-8Xu">
<toolbarItem implicitItemIdentifier="E5C7052B-66F5-4E01-B453-642B034EB433" label="Appearance" paletteLabel="Appearance" tag="-1" image="NSFontPanel" id="Y9Q-gx-taO">
<connections>
<action selector="openAppearanceView:" target="-2" id="y38-Hb-icv"/>
</connections>
</toolbarItem>
<toolbarItem implicitItemIdentifier="A66E9082-B4AF-4B6F-B2E8-CC3D70124C0B" label="Appearance" paletteLabel="About Us" tag="-1" image="NSInfo" autovalidates="NO" id="ti4-MJ-8Xu">
<connections>
<action selector="openAboutUsView:" target="-2" id="Aec-lN-CqR"/>
</connections>
@ -35,6 +39,7 @@
</allowedToolbarItems>
<defaultToolbarItems>
<toolbarItem reference="Khj-zc-D5t"/>
<toolbarItem reference="Y9Q-gx-taO"/>
<toolbarItem reference="ti4-MJ-8Xu"/>
</defaultToolbarItems>
</toolbar>
@ -45,7 +50,8 @@
</window>
</objects>
<resources>
<image name="NSHomeTemplate" width="14" height="14"/>
<image name="NSFontPanel" width="32" height="32"/>
<image name="NSInfo" width="32" height="32"/>
<image name="NSPreferencesGeneral" width="32" height="32"/>
</resources>
</document>

2
Clocker/CLOneWindow/CLOneWindowController.h

@ -9,11 +9,13 @@
#import <Cocoa/Cocoa.h>
#import "CLPreferencesViewController.h"
#import "CLAboutUsViewController.h"
#import "CLAppearanceViewController.h"
@interface CLOneWindowController : NSWindowController
@property (strong, nonatomic) CLPreferencesViewController *preferencesView;
@property (strong, nonatomic) CLAboutUsViewController *aboutUsView;
@property (strong, nonatomic) CLAppearanceViewController *appearanceView;
+ (instancetype)sharedWindow;

13
Clocker/CLOneWindow/CLOneWindowController.m

@ -49,6 +49,8 @@ static CLOneWindowController *sharedWindow = nil;
[self setWindowWithContentView:self.preferencesView.view];
[self.aboutUsView.view removeFromSuperview];
self.aboutUsView = nil;
[self.appearanceView.view removeFromSuperview];
self.appearanceView = nil;
}
- (void)setWindowWithContentView:(NSView *)contentView
@ -63,7 +65,18 @@ static CLOneWindowController *sharedWindow = nil;
[self setWindowWithContentView:self.aboutUsView.view];
[self.preferencesView.view removeFromSuperview];
self.preferencesView = nil;
[self.appearanceView.view removeFromSuperview];
self.appearanceView = nil;
}
- (IBAction)openAppearanceView:(id)sender
{
self.appearanceView = [[CLAppearanceViewController alloc] initWithNibName:@"CLAppearanceView" bundle:nil];
[self setWindowWithContentView:self.appearanceView.view];
[self.preferencesView.view removeFromSuperview];
self.preferencesView = nil;
[self.aboutUsView.view removeFromSuperview];
self.aboutUsView = nil;
}
@end

4
Clocker/Panel.xib

@ -59,7 +59,7 @@
<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="8" y="29" width="134" height="23"/>
<rect key="frame" x="7" y="29" width="134" height="23"/>
<constraints>
<constraint firstAttribute="width" constant="130" id="32b-h6-joo"/>
<constraint firstAttribute="height" constant="23" id="vod-YN-iNX"/>
@ -103,7 +103,7 @@
<constraint firstItem="etF-33-bCB" firstAttribute="top" secondItem="qbN-ba-fho" secondAttribute="top" constant="8" id="Lct-kG-usb"/>
<constraint firstItem="vnv-J2-7r1" firstAttribute="centerY" secondItem="qbN-ba-fho" secondAttribute="centerY" constant="-2" id="TuQ-gE-ZUh"/>
<constraint firstItem="QUd-7D-q14" firstAttribute="top" secondItem="etF-33-bCB" secondAttribute="bottom" constant="-5" id="VO6-Zn-eA3"/>
<constraint firstItem="etF-33-bCB" firstAttribute="leading" secondItem="qbN-ba-fho" secondAttribute="leading" constant="10" id="ueW-ow-ZRq"/>
<constraint firstItem="etF-33-bCB" firstAttribute="leading" secondItem="qbN-ba-fho" secondAttribute="leading" constant="9" id="ueW-ow-ZRq"/>
<constraint firstAttribute="trailing" secondItem="vnv-J2-7r1" secondAttribute="trailing" constant="8" id="zXo-eA-0bQ"/>
</constraints>
<connections>

2
Clocker/PanelController.m

@ -84,7 +84,7 @@ NSString *const CLTimezoneCellViewIdentifier = @"timeZoneCell";
}
[self updateDefaultPreferences];
if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"defaultTheme"] isEqualToString:@"Black"]) {
self.shutdownButton.image = [NSImage imageNamed:@"PowerIcon-White"];
self.preferencesButton.image = [NSImage imageNamed:@"Settings-White"];

112
Clocker/Preferences/CLPreferencesView.xib

@ -7,12 +7,9 @@
<customObject id="-2" userLabel="File's Owner" customClass="CLPreferencesViewController">
<connections>
<outlet property="availableTimezoneTableView" destination="Q0t-hQ-orw" id="vQv-rd-Wkv"/>
<outlet property="fontPopUp" destination="adA-dB-5Ok" id="FK1-Pq-eXW"/>
<outlet property="messageLabel" destination="KFC-NV-5A3" id="NKB-JY-Udb"/>
<outlet property="placeholderLabel" destination="Wb6-yr-Pw4" id="ilx-y4-XEw"/>
<outlet property="searchField" destination="biT-6m-ElR" id="Di3-QU-LGY"/>
<outlet property="theme" destination="ri6-fd-h3Z" id="9Sm-u7-G9o"/>
<outlet property="timeFormat" destination="qCn-Gz-vsB" id="0ZW-hJ-wgI"/>
<outlet property="timezonePanel" destination="6FL-fp-Ke1" id="SDq-Q4-hMb"/>
<outlet property="timezoneTableView" destination="LbJ-dW-ITm" id="tRO-Ch-Was"/>
<outlet property="view" destination="Uu9-io-frR" id="bYk-D1-SUF"/>
@ -21,11 +18,11 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<view id="Uu9-io-frR">
<rect key="frame" x="0.0" y="0.0" width="439" height="479"/>
<rect key="frame" x="0.0" y="0.0" width="439" height="335"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button toolTip="Add a timezone" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4yB-vZ-tNX">
<rect key="frame" x="11" y="163" width="21" height="22"/>
<rect key="frame" x="11" y="19" width="21" height="22"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="GNz-C9-Ay8"/>
<constraint firstAttribute="width" constant="21" id="OkY-Uq-PwX"/>
@ -39,7 +36,7 @@
</connections>
</button>
<button toolTip="Remove a timezone" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iOG-Ey-lmD">
<rect key="frame" x="32" y="163" width="21" height="22"/>
<rect key="frame" x="32" y="19" width="21" height="22"/>
<buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="gLH-wy-bCE">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@ -52,7 +49,7 @@ CA
</connections>
</button>
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="22" horizontalPageScroll="10" verticalLineScroll="22" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zBR-OH-6QQ">
<rect key="frame" x="10" y="190" width="419" height="281"/>
<rect key="frame" x="10" y="46" width="419" height="281"/>
<clipView key="contentView" id="UZ2-JA-TZe">
<rect key="frame" x="0.0" y="0.0" width="419" height="281"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
@ -112,115 +109,20 @@ CA
<autoresizingMask key="autoresizingMask"/>
</tableHeaderView>
</scrollView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wtb-He-7BA">
<rect key="frame" x="186" y="45" width="67" height="19"/>
<constraints>
<constraint firstAttribute="width" constant="63" id="Whm-eI-Qun"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Font Family" id="fIc-YC-zol">
<font key="font" size="12" name="HelveticaNeue-Light"/>
<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="RVw-E8-jnc">
<rect key="frame" x="200" y="93" width="40" height="19"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Theme" id="Fxt-Z4-w4Z">
<font key="font" size="12" name="HelveticaNeue-Light"/>
<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="EdZ-8X-JQg">
<rect key="frame" x="184" y="141" width="70" height="19"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Time Format" id="KxG-3S-ZCz">
<font key="font" size="12" name="HelveticaNeue-Light"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ri6-fd-h3Z">
<rect key="frame" x="157" y="66" width="124" height="24"/>
<constraints>
<constraint firstAttribute="width" constant="120" id="uei-YD-v1R"/>
</constraints>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="Z4q-lw-PxF">
<font key="font" size="12" name="HelveticaNeue-Light"/>
<segments>
<segment label="Default"/>
<segment label="Black" toolTip="Customize the timezone panel by selecting a theme!" selected="YES" tag="1"/>
</segments>
</segmentedCell>
<connections>
<action selector="changeTheme:" target="-2" id="IeG-lF-AYU"/>
<binding destination="1Gq-ZQ-IML" name="selectedLabel" keyPath="values.defaultTheme" id="ODp-CX-fqY"/>
</connections>
</segmentedControl>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qCn-Gz-vsB">
<rect key="frame" x="101" y="114" width="236" height="24"/>
<constraints>
<constraint firstAttribute="width" constant="232" id="Gma-Mm-ceK"/>
</constraints>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="rc6-Qv-gWj">
<font key="font" size="13" name="HelveticaNeue-Light"/>
<segments>
<segment label="12-hour clock" width="115"/>
<segment label="24-hour clock" toolTip="Set the time format you want to see in the timezone panel!" width="114" tag="1"/>
</segments>
</segmentedCell>
<connections>
<action selector="timeFormatSelectionChanged:" target="-2" id="tdk-w1-ZdT"/>
<binding destination="1Gq-ZQ-IML" name="selectedIndex" keyPath="values.is24HourFormatSelected" id="f6L-5I-EVP"/>
</connections>
</segmentedControl>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="adA-dB-5Ok">
<rect key="frame" x="131" y="17" width="179" height="26"/>
<constraints>
<constraint firstAttribute="width" constant="174" id="Iav-7m-gZ5"/>
</constraints>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" arrowPosition="noArrow" selectedItem="fI5-8y-GjM" id="3QE-QI-x3u">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" size="12" name="HelveticaNeue-Thin"/>
<menu key="menu" id="cF5-QZ-Ydw">
<items>
<menuItem state="on" id="fI5-8y-GjM"/>
<menuItem title="Item 2" id="0wt-P7-TFr"/>
<menuItem title="Item 3" id="i2R-uY-UOg"/>
</items>
</menu>
</popUpButtonCell>
<connections>
<action selector="changeFont:" target="-2" id="n9a-vp-3p1"/>
<binding destination="-2" name="content" keyPath="self.fontFamilies" id="JZm-hy-Yzo"/>
<binding destination="1Gq-ZQ-IML" name="selectedValue" keyPath="values.defaultFontFamily" previousBinding="JZm-hy-Yzo" id="olU-xe-W4j"/>
</connections>
</popUpButton>
</subviews>
<constraints>
<constraint firstItem="adA-dB-5Ok" firstAttribute="centerX" secondItem="Uu9-io-frR" secondAttribute="centerX" id="1cp-Qu-tUG"/>
<constraint firstItem="EdZ-8X-JQg" firstAttribute="top" secondItem="4yB-vZ-tNX" secondAttribute="bottom" constant="4" id="7j3-qP-hQS"/>
<constraint firstItem="qCn-Gz-vsB" firstAttribute="centerX" secondItem="Uu9-io-frR" secondAttribute="centerX" id="Ddq-aH-J08"/>
<constraint firstItem="wtb-He-7BA" firstAttribute="centerX" secondItem="Uu9-io-frR" secondAttribute="centerX" id="FYU-zT-Kh2"/>
<constraint firstItem="iOG-Ey-lmD" firstAttribute="height" secondItem="4yB-vZ-tNX" secondAttribute="height" id="HKt-is-5y3"/>
<constraint firstItem="zBR-OH-6QQ" firstAttribute="top" secondItem="Uu9-io-frR" secondAttribute="top" constant="8" id="JKn-gF-8oI"/>
<constraint firstItem="ri6-fd-h3Z" firstAttribute="top" secondItem="RVw-E8-jnc" secondAttribute="bottom" constant="4" id="K6f-Vr-qVl"/>
<constraint firstItem="RVw-E8-jnc" firstAttribute="centerX" secondItem="Uu9-io-frR" secondAttribute="centerX" id="Lbm-Wb-QhA"/>
<constraint firstItem="EdZ-8X-JQg" firstAttribute="top" secondItem="iOG-Ey-lmD" secondAttribute="bottom" constant="4" id="VH4-rQ-sQ3"/>
<constraint firstAttribute="bottom" secondItem="iOG-Ey-lmD" secondAttribute="bottom" constant="20" id="LkE-TY-4pP"/>
<constraint firstItem="4yB-vZ-tNX" firstAttribute="top" secondItem="zBR-OH-6QQ" secondAttribute="bottom" constant="6" id="Zsk-85-aI8"/>
<constraint firstItem="adA-dB-5Ok" firstAttribute="top" secondItem="wtb-He-7BA" secondAttribute="bottom" constant="4" id="alc-Vc-hTT"/>
<constraint firstItem="qCn-Gz-vsB" firstAttribute="top" secondItem="EdZ-8X-JQg" secondAttribute="bottom" constant="4" id="btm-if-1Jq"/>
<constraint firstAttribute="bottom" secondItem="adA-dB-5Ok" secondAttribute="bottom" constant="20" id="fZs-aV-AJw"/>
<constraint firstItem="wtb-He-7BA" firstAttribute="top" secondItem="ri6-fd-h3Z" secondAttribute="bottom" constant="4" id="kOu-TZ-9f8"/>
<constraint firstAttribute="trailing" secondItem="zBR-OH-6QQ" secondAttribute="trailing" constant="10" id="p1P-Ev-oBI"/>
<constraint firstItem="RVw-E8-jnc" firstAttribute="top" secondItem="qCn-Gz-vsB" secondAttribute="bottom" constant="4" id="pkQ-fr-Y1p"/>
<constraint firstItem="ri6-fd-h3Z" firstAttribute="centerX" secondItem="Uu9-io-frR" secondAttribute="centerX" id="slW-cb-BAu"/>
<constraint firstItem="iOG-Ey-lmD" firstAttribute="width" secondItem="4yB-vZ-tNX" secondAttribute="width" id="wLJ-lQ-GhP"/>
<constraint firstItem="EdZ-8X-JQg" firstAttribute="centerX" secondItem="Uu9-io-frR" secondAttribute="centerX" id="xh9-kQ-AAh"/>
<constraint firstItem="iOG-Ey-lmD" firstAttribute="leading" secondItem="4yB-vZ-tNX" secondAttribute="trailing" id="xu0-0C-2pe"/>
<constraint firstItem="4yB-vZ-tNX" firstAttribute="leading" secondItem="Uu9-io-frR" secondAttribute="leading" constant="11" id="zgB-PO-97r"/>
<constraint firstItem="zBR-OH-6QQ" firstAttribute="leading" secondItem="Uu9-io-frR" secondAttribute="leading" constant="10" id="zoH-62-nam"/>
<constraint firstAttribute="bottom" secondItem="4yB-vZ-tNX" secondAttribute="bottom" constant="20" id="zvP-zK-Hxe"/>
</constraints>
<point key="canvasLocation" x="295.5" y="245.5"/>
<point key="canvasLocation" x="295.5" y="173.5"/>
</view>
<userDefaultsController representsSharedInstance="YES" id="1Gq-ZQ-IML"/>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hasShadow="NO" hidesOnDeactivate="YES" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="alertPanel" appearanceType="aqua" frameAutosaveName="" id="6FL-fp-Ke1" customClass="Panel">

2
Clocker/Preferences/CLPreferencesViewController.h

@ -18,7 +18,7 @@ typedef enum : NSUInteger {
@property (strong, nonatomic) NSMutableArray *selectedTimeZones;
@property (strong, nonatomic) NSMutableArray *filteredArray;
@property (atomic, assign) BOOL launchOnLogin;
@property (atomic, strong) NSArray *fontFamilies;
@property (atomic, strong) NSArray *themes;
@property (nonatomic, strong) NSURLSessionDataTask *dataTask;

65
Clocker/Preferences/CLPreferencesViewController.m

@ -67,34 +67,7 @@ NSString *const CLPreferencesAvailableTimezoneIdentifier = @"availableTimezones"
NSMutableArray *availableFonts = [[NSMutableArray alloc] init];
NSFontCollection *fontCollection = [NSFontCollection fontCollectionWithName:@"com.apple.UserFonts"];
for (NSFontDescriptor *descriptor in fontCollection.matchingDescriptors) {
if ([descriptor objectForKey:@"NSFontFamilyAttribute"]) {
if (![availableFonts containsObject:[descriptor objectForKey:@"NSFontFamilyAttribute"]]) {
[availableFonts addObject:[descriptor objectForKey:@"NSFontFamilyAttribute"]];
}
}
}
//Certain fonts don't look good with constraints set
NSArray *fontsToRemove = [NSArray arrayWithObjects:@"Apple Chancery", @"Zapfino",
@"Trattatello", @"Noteworthy", @"Arial Black", @"Chalkduster",@"Monoid", @"Andale Mono", @"Courier" ,@"Courier New",@"Geneva",@"Menlo", @"Monaco",@"PT Mono", @"Verdana", nil];
for (NSString *font in fontsToRemove) {
if([availableFonts containsObject:font])
{
[availableFonts removeObject:font];
}
}
[availableFonts insertObject:@"Default" atIndex:0];
self.themes = [NSArray arrayWithObjects:@"Default", @"Black", nil];
self.fontFamilies = [[NSArray alloc] initWithArray:availableFonts];
// Do view setup here.
// Do view setup here.
}
@ -299,15 +272,6 @@ NSString *const CLPreferencesAvailableTimezoneIdentifier = @"availableTimezones"
[self.availableTimezoneTableView reloadData];
}
- (IBAction)timeFormatSelectionChanged:(id)sender {
NSSegmentedControl *timeFormat = (NSSegmentedControl *)sender;
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:timeFormat.selectedSegment] forKey:CL24hourFormatSelectedKey];
[self refreshMainTableview];
}
- (void)refereshTimezoneTableView
{
dispatch_async(dispatch_get_main_queue(), ^{
@ -377,33 +341,6 @@ NSString *const CLPreferencesAvailableTimezoneIdentifier = @"availableTimezones"
return NSDragOperationEvery;
}
- (IBAction)changeFont:(id)sender
{
ApplicationDelegate *appDelegate = [[NSApplication sharedApplication] delegate];
PanelController *panelController = appDelegate.panelController;
[panelController.mainTableview reloadData];
}
- (IBAction)changeTheme:(id)sender
{
NSSegmentedControl *themeSegment = (NSSegmentedControl *)sender;
ApplicationDelegate *appDelegate = [[NSApplication sharedApplication] delegate];
PanelController *panelController = appDelegate.panelController;
[panelController.backgroundView setNeedsDisplay:YES];
if (themeSegment.selectedSegment == CLBlackTheme) {
panelController.shutdownButton.image = [NSImage imageNamed:@"PowerIcon-White"];
panelController.preferencesButton.image = [NSImage imageNamed:@"Settings-White"];
}
else
{
panelController.shutdownButton.image = [NSImage imageNamed:@"PowerIcon"];
panelController.preferencesButton.image = [NSImage imageNamed:NSImageNameActionTemplate];
}
[panelController.mainTableview reloadData];
}
- (void)callGoogleAPiWithSearchString:(NSString *)searchString
{
if (self.dataTask.state == NSURLSessionTaskStateRunning) {

Loading…
Cancel
Save