From b4847f6789f8ad1be6c5aae858d45bdb4557be68 Mon Sep 17 00:00:00 2001 From: nihalsharma Date: Mon, 12 Mar 2018 14:13:27 +0530 Subject: [PATCH] First commit --- .gitignore | 5 + Clock Bar App/AppDelegate.h | 20 + Clock Bar App/AppDelegate.m | 239 +++++ .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/clock-128.png | Bin 0 -> 2159 bytes .../AppIcon.appiconset/clock-16.png | Bin 0 -> 524 bytes .../AppIcon.appiconset/clock-256.png | Bin 0 -> 5159 bytes .../AppIcon.appiconset/clock-257.png | Bin 0 -> 5159 bytes .../AppIcon.appiconset/clock-32.png | Bin 0 -> 758 bytes .../AppIcon.appiconset/clock-33.png | Bin 0 -> 758 bytes .../AppIcon.appiconset/clock-512.png | Bin 0 -> 12068 bytes .../AppIcon.appiconset/clock-513.png | Bin 0 -> 12068 bytes .../AppIcon.appiconset/clock-514.png | Bin 0 -> 12068 bytes .../AppIcon.appiconset/clock-64.png | Bin 0 -> 1138 bytes Clock Bar App/Assets.xcassets/Contents.json | 6 + .../logo.imageset/Contents.json | 23 + .../logo.imageset/clock-64.png | Bin 0 -> 1138 bytes .../logo.imageset/clock-65.png | Bin 0 -> 1138 bytes .../logo.imageset/clock-66.png | Bin 0 -> 1138 bytes Clock Bar App/Base.lproj/Main.storyboard | 878 ++++++++++++++++++ Clock Bar App/ClickableTextField.h | 12 + Clock Bar App/ClickableTextField.m | 22 + Clock Bar App/Clock Bar App.entitlements | 5 + .../Clock Launcher.xcodeproj/project.pbxproj | 326 +++++++ .../contents.xcworkspacedata | 7 + .../Clock Launcher/AppDelegate.h | 7 + .../Clock Launcher/AppDelegate.m | 32 + .../AppIcon.appiconset/Contents.json | 58 ++ .../Clock Launcher/Base.lproj/Main.storyboard | 656 +++++++++++++ .../Clock Launcher.entitlements | 8 + .../Clock Launcher/Clock Launcher/Info.plist | 38 + .../Clock Launcher/ViewController.h | 7 + .../Clock Launcher/ViewController.m | 22 + .../Clock Launcher/Clock Launcher/main.m | 12 + Clock Bar App/Info.plist | 38 + Clock Bar App/TouchBar.h | 16 + Clock Bar App/TouchButton.h | 8 + Clock Bar App/TouchButton.m | 90 ++ Clock Bar App/TouchDelegate.h | 9 + Clock Bar App/ViewController.h | 21 + Clock Bar App/ViewController.m | 138 +++ Clock Bar App/clock-64.png | Bin 0 -> 1138 bytes Clock Bar App/main.m | 5 + Clock Bar.entitlements | 8 + Clock Bar.xcodeproj/project.pbxproj | 452 +++++++++ .../contents.xcworkspacedata | 7 + .../contents.xcworkspacedata | 7 + LICENSE | 21 + README.md | 40 + clock-64.png | Bin 0 -> 1138 bytes 50 files changed, 3311 insertions(+) create mode 100644 .gitignore create mode 100644 Clock Bar App/AppDelegate.h create mode 100644 Clock Bar App/AppDelegate.m create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-128.png create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-16.png create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-256.png create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-257.png create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-32.png create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-33.png create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-512.png create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-513.png create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-514.png create mode 100644 Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-64.png create mode 100644 Clock Bar App/Assets.xcassets/Contents.json create mode 100644 Clock Bar App/Assets.xcassets/logo.imageset/Contents.json create mode 100644 Clock Bar App/Assets.xcassets/logo.imageset/clock-64.png create mode 100644 Clock Bar App/Assets.xcassets/logo.imageset/clock-65.png create mode 100644 Clock Bar App/Assets.xcassets/logo.imageset/clock-66.png create mode 100644 Clock Bar App/Base.lproj/Main.storyboard create mode 100644 Clock Bar App/ClickableTextField.h create mode 100644 Clock Bar App/ClickableTextField.m create mode 100644 Clock Bar App/Clock Bar App.entitlements create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher.xcodeproj/project.pbxproj create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher/AppDelegate.h create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher/AppDelegate.m create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher/Base.lproj/Main.storyboard create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher/Clock Launcher.entitlements create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher/Info.plist create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher/ViewController.h create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher/ViewController.m create mode 100644 Clock Bar App/Clock Launcher/Clock Launcher/main.m create mode 100644 Clock Bar App/Info.plist create mode 100644 Clock Bar App/TouchBar.h create mode 100644 Clock Bar App/TouchButton.h create mode 100644 Clock Bar App/TouchButton.m create mode 100644 Clock Bar App/TouchDelegate.h create mode 100644 Clock Bar App/ViewController.h create mode 100644 Clock Bar App/ViewController.m create mode 100644 Clock Bar App/clock-64.png create mode 100644 Clock Bar App/main.m create mode 100644 Clock Bar.entitlements create mode 100644 Clock Bar.xcodeproj/project.pbxproj create mode 100644 Clock Bar.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Clock Bar.xcworkspace/contents.xcworkspacedata create mode 100644 LICENSE create mode 100644 README.md create mode 100644 clock-64.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b4de200 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +.Trashes +*.swp +*~.nib +xcuserdata diff --git a/Clock Bar App/AppDelegate.h b/Clock Bar App/AppDelegate.h new file mode 100644 index 0000000..565fa9e --- /dev/null +++ b/Clock Bar App/AppDelegate.h @@ -0,0 +1,20 @@ +#import + +@interface AppDelegate : NSObject + +@property (weak) IBOutlet NSMenu *statusMenu; +@property (strong, nonatomic) NSStatusItem *statusBar; + +- (IBAction)prefsMenuItemAction:(id)sender; + +- (IBAction)quitMenuItemAction:(id)sender; + +@property (weak) IBOutlet NSMenuItem *muteMenuItem; + +- (void) hideMenuBar:(BOOL)enableState; +- (void) changeColor:(id)sender; +- (NSColor*)colorWithHexColorString:(NSString*)inColorString; + + +@end + diff --git a/Clock Bar App/AppDelegate.m b/Clock Bar App/AppDelegate.m new file mode 100644 index 0000000..2910a5a --- /dev/null +++ b/Clock Bar App/AppDelegate.m @@ -0,0 +1,239 @@ +#import "AppDelegate.h" +#import "TouchBar.h" +#import +#import "TouchButton.h" +#import "TouchDelegate.h" +#import + +static const NSTouchBarItemIdentifier muteIdentifier = @"ns.clock"; +static NSString *const MASCustomShortcutKey = @"customShortcut"; + +@interface AppDelegate () + +@end + +@implementation AppDelegate + +NSButton *touchBarButton; + +@synthesize statusBar; + +TouchButton *button; + +NSString *STATUS_ICON_BLACK = @"clock-64"; + +NSDateFormatter *timeformatter; +NSString *format = @"hh:mm"; +NSMutableAttributedString *colorTitle; + + +- (void) awakeFromNib { + + BOOL hideStatusBar = NO; + BOOL statusBarButtonToggle = NO; + BOOL useAlternateStatusBarIcons = NO; + + if ([[NSUserDefaults standardUserDefaults] objectForKey:@"hide_status_bar"] != nil) { + hideStatusBar = [[NSUserDefaults standardUserDefaults] boolForKey:@"hide_status_bar"]; + } + + if ([[NSUserDefaults standardUserDefaults] objectForKey:@"status_bar_button_toggle"] != nil) { + statusBarButtonToggle = [[NSUserDefaults standardUserDefaults] boolForKey:@"status_bar_button_toggle"]; + } + + if ([[NSUserDefaults standardUserDefaults] objectForKey:@"status_bar_alternate_icons"] != nil) { + useAlternateStatusBarIcons = [[NSUserDefaults standardUserDefaults] boolForKey:@"status_bar_alternate_icons"]; + } + + [[NSUserDefaults standardUserDefaults] setBool:hideStatusBar forKey:@"hide_status_bar"]; + [[NSUserDefaults standardUserDefaults] setBool:statusBarButtonToggle forKey:@"status_bar_button_toggle"]; + [[NSUserDefaults standardUserDefaults] setBool:useAlternateStatusBarIcons forKey:@"status_bar_alternate_icons"]; + + if (!hideStatusBar) { + [self setupStatusBarItem]; + } + +} + +- (void) setupStatusBarItem { + + self.statusBar = [[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength]; + self.statusBar.menu = self.statusMenu; + + NSImage* statusImage = [self getStatusBarImage]; + + statusImage.size = NSMakeSize(18, 18); + + [statusImage setTemplate:YES]; + + self.statusBar.image = statusImage; + self.statusBar.highlightMode = YES; + self.statusBar.enabled = YES; +} + + +- (void) hideMenuBar: (BOOL) enableState { + + if (!enableState) { + [self setupStatusBarItem]; + } else { + self.statusBar = nil; + } +} + + +-(void)changeColor:(id)sender +{ + + [colorTitle addAttribute:NSForegroundColorAttributeName value:sender range:NSMakeRange(0, button.title.length)]; + [button setAttributedTitle:colorTitle]; +} + +-(void)UpdateTime:(id)sender +{ + NSString *time = [timeformatter stringFromDate:[NSDate date]]; + [colorTitle.mutableString setString:time]; + [button setAttributedTitle:colorTitle]; +} + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { + [[[[NSApplication sharedApplication] windows] lastObject] close]; + + DFRSystemModalShowsCloseBoxWhenFrontMost(YES); + + timeformatter = [[NSDateFormatter alloc] init]; + [timeformatter setTimeStyle: NSDateFormatterShortStyle]; + [timeformatter setDateFormat:format]; + + NSDate *now = [NSDate date]; + NSString *newDateString = [timeformatter stringFromDate:now]; + + + button = [TouchButton buttonWithTitle:newDateString target:nil action:nil]; + [button setDelegate: self]; + + NSFont *systemFont = [NSFont systemFontOfSize:14.0f]; + NSDictionary * fontAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:systemFont, NSFontAttributeName, nil]; + + colorTitle = [[NSMutableAttributedString alloc] initWithString:[button title] attributes:fontAttributes]; + + NSString *colorString = [[NSUserDefaults standardUserDefaults] objectForKey:@"clock_color"]; + NSColor *color = nil; + if (colorString == nil){ + color = [NSColor whiteColor]; + } else{ + color = [self getColorForString:colorString]; + } + + [colorTitle addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, button.title.length)]; + [button setAttributedTitle:colorTitle]; + + + NSCustomTouchBarItem *time = [[NSCustomTouchBarItem alloc] initWithIdentifier:muteIdentifier]; + time.view = button; + [NSTouchBarItem addSystemTrayItem:time]; + [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(UpdateTime:) userInfo:nil repeats:YES]; + + touchBarButton = button; + + [NSTouchBarItem addSystemTrayItem:time]; + DFRElementSetControlStripPresenceForIdentifier(muteIdentifier, YES); + + [self enableLoginAutostart]; + +} + +-(NSColor*)getColorForString:(id)sender{ + return [self colorWithHexColorString:sender]; +} + + +- (NSImage*) getStatusBarImage { + + return [NSImage imageNamed:STATUS_ICON_BLACK]; +} + + +-(void) enableLoginAutostart { + if ([[NSUserDefaults standardUserDefaults] objectForKey:@"auto_login"] == nil) { + return; + } + + BOOL state = [[NSUserDefaults standardUserDefaults] boolForKey:@"auto_login"]; + if(!SMLoginItemSetEnabled((__bridge CFStringRef)@"Nihalsharma.Clock-Launcher", !state)) { + NSLog(@"The login was not succesfull"); + } +} + +- (void)applicationWillTerminate:(NSNotification *)aNotification { +} + +-(double) changeState { + return 0; +} + +-(double) changeStateFixed { + return 0; +} + +-(NSColor *)colorState:(double)volume { + + if(!volume) { + return NSColor.redColor; + } else { + return NSColor.clearColor; + } +} + +- (void)onPressed:(TouchButton*)sender +{ + NSLog(@"On Press clicked"); + if ([format isEqual:@"hh:mm"]){ + format = @"HH:mm"; + } else { + format = @"hh:mm"; + } + [timeformatter setDateFormat:format]; +} + +- (void)onLongPressed:(TouchButton*)sender +{ + [[[[NSApplication sharedApplication] windows] lastObject] makeKeyAndOrderFront:nil]; + [[NSApplication sharedApplication] activateIgnoringOtherApps:true]; +} + +- (IBAction)prefsMenuItemAction:(id)sender { + + [self onLongPressed:sender]; +} + +- (IBAction)quitMenuItemAction:(id)sender { + [NSApp terminate:nil]; +} + +- (NSColor*)colorWithHexColorString:(NSString*)inColorString +{ + NSColor* result = nil; + unsigned colorCode = 0; + unsigned char redByte, greenByte, blueByte; + + if (nil != inColorString) + { + NSScanner* scanner = [NSScanner scannerWithString:inColorString]; + (void) [scanner scanHexInt:&colorCode]; // ignore error + } + redByte = (unsigned char)(colorCode >> 16); + greenByte = (unsigned char)(colorCode >> 8); + blueByte = (unsigned char)(colorCode); // masks off high bits + + result = [NSColor + colorWithCalibratedRed:(CGFloat)redByte / 0xff + green:(CGFloat)greenByte / 0xff + blue:(CGFloat)blueByte / 0xff + alpha:1.0]; + return result; +} + + + +@end diff --git a/Clock Bar App/Assets.xcassets/AppIcon.appiconset/Contents.json b/Clock Bar App/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..893ff63 --- /dev/null +++ b/Clock Bar App/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "clock-16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "clock-32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "clock-33.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "clock-64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "clock-128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "clock-257.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "clock-256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "clock-514.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "clock-512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "clock-513.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-128.png b/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-128.png new file mode 100644 index 0000000000000000000000000000000000000000..d65bbd194747373b2bde7e404d92632528f4549d GIT binary patch literal 2159 zcmZ`)X*kr27ygaim_gPoV~H3HW~|eMh8Z#$+fYo4C_9Z1BTJTu$(E(aO!g^62yrLG zwH1aTw?#E>2)C|?vPO6M`2X<#aL#+qd(Qiu=Q-!Yp}9C6hk_Ns002M<_IMHxlYX0s z0M7@R*J61f5Mb?S4FJu#Vn2NZdAZs}dy*pn#A@;SQUPFxMFydvRm+i@syh*Qr8^{JukKvKRR|t-_!n6EhfC^+y-4>Lju#d)05?*+Yj|unCV4_Ygd-Tr~v`~+3!}? z48o$Xt?%wfNBeKKukSh@*tk`BC-!qqMM?ze%P~*y@ICW!nS$!8W0m^Mn_2BHCyX1E zD{|^2+xETlhq6|aZZ`xcEt^DUol<;zz=DZYeK7JmCDbCF9j2oRumKNUADjjsy< zw9hUb{D_S)`ly=rZcBZw$9M?hfM|X$Bos6p zOH5i+7TrnCmOo6^@*?!kPqIr$=g!N#Y@9OnP?%M|T`^rZuZ*kLZF}w9EV^@40o*Vw z_J}iP@X3riF(&JkN}*=lWBs$@Z!&*!g_(Bg^fcE_tV=zv5B@Z2a%McHMyGbX=ja*J zgo^vz@Qp9Qu~hg@pYoIwcfk4v?k?8B@Qp&{`mxy>)S5xg8oWPS@+tx@Zt|*WboznG?2LgX%2U zC)D-~>L$a)Og=kBqFd)>o^`1+JqUe$L}3mRN58qsKPn)(uUXhWV|#6rtvd!gX(3wv ziMaJzQ=6kSV|t=+s{0J~mHdhP^3)KJ2~2dCGO?^@s}zz2jI&Rgjx6h zyZ+<5m8DDWWR;QM@C^DX!8Y677^sAtoZuvL$NpCX1tnw6Mho5x4i$~^{fR-4bd zHxpWflH9E3l7@CtK+V${+29g0z{;yC+2&+jf=Xf(=IN-?-!;zGmCLz46B| zlSPQy2Y~9CL&s?%GBfX=jub*4VnkR{g!0r;=zL@By+u(nrN1H3_r2N|@+o0)o!%GQ zoJi|;uX+&@mLqlcN2b8Hhh|@SiD}BUiT|(($51}BVK2C@h-hG?ATEn81%doiX!jVo zu`Yg`S`Q+!)K6CYQ)!xUc*r9tmpBX~m8Lm_e`(;wB$9-E3TQYpO~qS3MJZ`~o7lWy zH1~7VPo4FKP5^twVX_}7Y8*A}sB_N^=Wd3s)CDxWZWdrD^a{s6AhCUVTj~)MC-ra5 z4?@Q2FH$sSRL?-X3^)En%R5VWW*AheamCp9e?bcnB*p$~3y0XRQm#L*DbY7!E7PO< zEY<(<-^dkmhqiCcnalAbmi#2c)wteYdTB|cSJQQ@tLODHQcS0}y&m@ajYX1^2i#Ew zl^|k*Y{{HkcO?x2t%w@QTGvYiBRWxJ#I6HmV*KOX#d4;+l~rTmYRn%|&%l(ygk&GE z$O7oB>UyJHFRt15!ZPQUldkbGt3xByx8thr`H+0(#XXd3HuJgZWrvb$&I zUDQGJw=Ai5UlpyNP~jafP`j zix!o+6dFvUryKFDKkg!q$?+iyB7LY8)v#1gcu-tzJ?uM;u{LWLYH;UC@~uo}g2a}VcxZ2iHEw`7#7hg>E_+l*2AxoSjh+6JbpgB=l_Wh|WAqO2( z=`wd&sj^e@Qe~bBQe~%=q{`01q{_Thxf4)1sb>Rrv*u*i-lJ{o97U<_36eOC8$7Zs zOyh>?r{lxg7Y|J+8L;fX-=P~wb^TM9i4S}FG+Dp(Tf}TTcRz7GYEI}4_U7r&wN*F3 z!-R%k-pK<$W-Q!@`3rw^%|n0jwd|KqV*iq+@qX*!E4H3je0{F?VJ=4a@c=MFqR{$C zV|^6L9f`ykBQYo=JtPW)L>j+n3-}+wr7+(h|EvFBU{eTv#}g?0p5PYde}(E3;RjHu hRD&Q&NaRJI%YFu75drkC7K*$kfMDx{e`MpG@*mCS#0dZZ literal 0 HcmV?d00001 diff --git a/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-16.png b/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-16.png new file mode 100644 index 0000000000000000000000000000000000000000..e7383b2ec6791ec6eaab919e47d2da29d7d42b2e GIT binary patch literal 524 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+uenMVO6iP5s=4O z;1O92wCOqsGdgL^t^f+Mmw5WRvOi+xW{@>A*B7Y;3f=N_aSYKoUwhHo?{I)f%R_xO zZLXq&Oe;1sZf3ZY!k@ybd3Ph1$`PdnUZP9=vbs$)HDi{!h)jISad7E@!k)@Mmt*Ei zzI=7&rKN$%M6Zq8zCDQSp68>v;z`le1yf$izHMD#AZ9Jx*(=&~RB;k#n$U+AY$|C@ zZ(hF-3cS7M&eioU3r%`_czoWL+?*-3qi@N#X?4k&?>~iPJzi_NuYlDoE@w&3Q{CTj zD@wcXOxx*ohehf6R=*=!pHD>HU%^>ZvG!};lJ_fjKbu%}HZRb9x8|$rt3M*Y?mwPo zR6qB(@X^QN7ec??0)`)hYKdz^NlIc#s#S7PDv)9@GBC8zH89pSGz>8?urji=GBwdQ zFtjo-czL2~EsBQR{FKbJO57S|Og$tB)F276Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8F VD1G)j8!4b722WQ%mvv4FO#qHizNY{H literal 0 HcmV?d00001 diff --git a/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-256.png b/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-256.png new file mode 100644 index 0000000000000000000000000000000000000000..39b06f3ca6fbbc6b4ddb6e8f7398ecdfb171e096 GIT binary patch literal 5159 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 b_O_mmLLMmR{C(MLt$_MN9hLV=HWB{|_Vu^I literal 0 HcmV?d00001 diff --git a/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-513.png b/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-513.png new file mode 100644 index 0000000000000000000000000000000000000000..38255fa7ff5036a6d78ae608e97095fd7a7e38df GIT binary patch literal 12068 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 b_O_mmLLMmR{C(MLt$_MN9hLV=HWB{|_Vu^I literal 0 HcmV?d00001 diff --git a/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-514.png b/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-514.png new file mode 100644 index 0000000000000000000000000000000000000000..38255fa7ff5036a6d78ae608e97095fd7a7e38df GIT binary patch literal 12068 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 b_O_mmLLMmR{C(MLt$_MN9hLV=HWB{|_Vu^I literal 0 HcmV?d00001 diff --git a/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-64.png b/Clock Bar App/Assets.xcassets/AppIcon.appiconset/clock-64.png new file mode 100644 index 0000000000000000000000000000000000000000..0584faf3f6fc335f62057aec0666a7dd9fd3eb94 GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VW5Skg^zjLY3M^pY!(`xNLnH&o5!<6dnWxcM~d4m`wxWD8*f4^s2<(4_uYj!qxHf!?B1sn^NApFcOP{^!-dwr3U;Enmpp zpw7f7zlO1rzrNylDU0*tK!*bpH#gkh^T@J4c}?DrbG}cs*;w{Gn7x4iLHmhY=@(ck zWU}jZI%K^T8q3^Iwf1Y8@OH<^ZAlLd=dWt0)ctj9*~`Sd3Hd>y3#!+*m3CJLXt{d? zyi$&g&~tZ*m}g=*@zA6hD&A*PHY`g!IVo6j&B@G7Ut*eWe6jItJS5A<$~9qnM$E&A zMH9tW#@xTR(?eDF@=k}4Wz3NajrcgZrcS6_`HfLzwXy#7-zUBtIOKlJ-E6|og;V=| z`rp>1)D*l_zP$LhT#)6SY2_DfD^kZu0d`4KRDDmbgZgq$HN4S|t~y0x1R~ z149d417lr7!w>@lDnC}Q!>*kacki4{1F4xAPKS|I6tkV oJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD<-Pgg&ebxsLQ0FZsz%K!iX literal 0 HcmV?d00001 diff --git a/Clock Bar App/Assets.xcassets/Contents.json b/Clock Bar App/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Clock Bar App/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Clock Bar App/Assets.xcassets/logo.imageset/Contents.json b/Clock Bar App/Assets.xcassets/logo.imageset/Contents.json new file mode 100644 index 0000000..9aece15 --- /dev/null +++ b/Clock Bar App/Assets.xcassets/logo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "clock-64.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "clock-65.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "clock-66.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Clock Bar App/Assets.xcassets/logo.imageset/clock-64.png b/Clock Bar App/Assets.xcassets/logo.imageset/clock-64.png new file mode 100644 index 0000000000000000000000000000000000000000..0584faf3f6fc335f62057aec0666a7dd9fd3eb94 GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VW5Skg^zjLY3M^pY!(`xNLnH&o5!<6dnWxcM~d4m`wxWD8*f4^s2<(4_uYj!qxHf!?B1sn^NApFcOP{^!-dwr3U;Enmpp zpw7f7zlO1rzrNylDU0*tK!*bpH#gkh^T@J4c}?DrbG}cs*;w{Gn7x4iLHmhY=@(ck zWU}jZI%K^T8q3^Iwf1Y8@OH<^ZAlLd=dWt0)ctj9*~`Sd3Hd>y3#!+*m3CJLXt{d? zyi$&g&~tZ*m}g=*@zA6hD&A*PHY`g!IVo6j&B@G7Ut*eWe6jItJS5A<$~9qnM$E&A zMH9tW#@xTR(?eDF@=k}4Wz3NajrcgZrcS6_`HfLzwXy#7-zUBtIOKlJ-E6|og;V=| z`rp>1)D*l_zP$LhT#)6SY2_DfD^kZu0d`4KRDDmbgZgq$HN4S|t~y0x1R~ z149d417lr7!w>@lDnC}Q!>*kacki4{1F4xAPKS|I6tkV oJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD<-Pgg&ebxsLQ0FZsz%K!iX literal 0 HcmV?d00001 diff --git a/Clock Bar App/Assets.xcassets/logo.imageset/clock-65.png b/Clock Bar App/Assets.xcassets/logo.imageset/clock-65.png new file mode 100644 index 0000000000000000000000000000000000000000..0584faf3f6fc335f62057aec0666a7dd9fd3eb94 GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VW5Skg^zjLY3M^pY!(`xNLnH&o5!<6dnWxcM~d4m`wxWD8*f4^s2<(4_uYj!qxHf!?B1sn^NApFcOP{^!-dwr3U;Enmpp zpw7f7zlO1rzrNylDU0*tK!*bpH#gkh^T@J4c}?DrbG}cs*;w{Gn7x4iLHmhY=@(ck zWU}jZI%K^T8q3^Iwf1Y8@OH<^ZAlLd=dWt0)ctj9*~`Sd3Hd>y3#!+*m3CJLXt{d? zyi$&g&~tZ*m}g=*@zA6hD&A*PHY`g!IVo6j&B@G7Ut*eWe6jItJS5A<$~9qnM$E&A zMH9tW#@xTR(?eDF@=k}4Wz3NajrcgZrcS6_`HfLzwXy#7-zUBtIOKlJ-E6|og;V=| z`rp>1)D*l_zP$LhT#)6SY2_DfD^kZu0d`4KRDDmbgZgq$HN4S|t~y0x1R~ z149d417lr7!w>@lDnC}Q!>*kacki4{1F4xAPKS|I6tkV oJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD<-Pgg&ebxsLQ0FZsz%K!iX literal 0 HcmV?d00001 diff --git a/Clock Bar App/Assets.xcassets/logo.imageset/clock-66.png b/Clock Bar App/Assets.xcassets/logo.imageset/clock-66.png new file mode 100644 index 0000000000000000000000000000000000000000..0584faf3f6fc335f62057aec0666a7dd9fd3eb94 GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VW5Skg^zjLY3M^pY!(`xNLnH&o5!<6dnWxcM~d4m`wxWD8*f4^s2<(4_uYj!qxHf!?B1sn^NApFcOP{^!-dwr3U;Enmpp zpw7f7zlO1rzrNylDU0*tK!*bpH#gkh^T@J4c}?DrbG}cs*;w{Gn7x4iLHmhY=@(ck zWU}jZI%K^T8q3^Iwf1Y8@OH<^ZAlLd=dWt0)ctj9*~`Sd3Hd>y3#!+*m3CJLXt{d? zyi$&g&~tZ*m}g=*@zA6hD&A*PHY`g!IVo6j&B@G7Ut*eWe6jItJS5A<$~9qnM$E&A zMH9tW#@xTR(?eDF@=k}4Wz3NajrcgZrcS6_`HfLzwXy#7-zUBtIOKlJ-E6|og;V=| z`rp>1)D*l_zP$LhT#)6SY2_DfD^kZu0d`4KRDDmbgZgq$HN4S|t~y0x1R~ z149d417lr7!w>@lDnC}Q!>*kacki4{1F4xAPKS|I6tkV oJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD<-Pgg&ebxsLQ0FZsz%K!iX literal 0 HcmV?d00001 diff --git a/Clock Bar App/Base.lproj/Main.storyboard b/Clock Bar App/Base.lproj/Main.storyboard new file mode 100644 index 0000000..c13a75a --- /dev/null +++ b/Clock Bar App/Base.lproj/Main.storyboard @@ -0,0 +1,878 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Clock Bar App/ClickableTextField.h b/Clock Bar App/ClickableTextField.h new file mode 100644 index 0000000..1156a23 --- /dev/null +++ b/Clock Bar App/ClickableTextField.h @@ -0,0 +1,12 @@ +// +// ClickableTextField.h +// Clock Bar +// +// Created by nihalsharma on 11/03/18. +// Copyright © 2018 Nihalsharma. All rights reserved. +// + +#import + +@interface ClickableTextField : NSTextField +@end diff --git a/Clock Bar App/ClickableTextField.m b/Clock Bar App/ClickableTextField.m new file mode 100644 index 0000000..f5577c7 --- /dev/null +++ b/Clock Bar App/ClickableTextField.m @@ -0,0 +1,22 @@ +// +// ClickableTextField.m +// Clock Bar +// +// Created by nihalsharma on 11/03/18. +// Copyright © 2018 Nihalsharma. All rights reserved. +// + +#import "ClickableTextField.h" + +@interface ClickableTextField() + +@end + +@implementation ClickableTextField + +- (void)mouseDown:(NSEvent *)theEvent +{ + [self sendAction:[self action] to:[self target]]; +} + +@end diff --git a/Clock Bar App/Clock Bar App.entitlements b/Clock Bar App/Clock Bar App.entitlements new file mode 100644 index 0000000..0c67376 --- /dev/null +++ b/Clock Bar App/Clock Bar App.entitlements @@ -0,0 +1,5 @@ + + + + + diff --git a/Clock Bar App/Clock Launcher/Clock Launcher.xcodeproj/project.pbxproj b/Clock Bar App/Clock Launcher/Clock Launcher.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d6c5a5a --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher.xcodeproj/project.pbxproj @@ -0,0 +1,326 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 11B86E851EDEAC980069D254 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 11B86E831EDEAC980069D254 /* Main.storyboard */; }; + D5A4626C2054B0B300E8B47E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D5A462662054B0B200E8B47E /* Assets.xcassets */; }; + D5A4626D2054B0B300E8B47E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D5A462672054B0B200E8B47E /* AppDelegate.m */; }; + D5A4626E2054B0B300E8B47E /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = D5A462692054B0B200E8B47E /* Info.plist */; }; + D5A4626F2054B0B300E8B47E /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D5A4626B2054B0B200E8B47E /* ViewController.m */; }; + D5A462712054B0C700E8B47E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D5A462702054B0C700E8B47E /* main.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 11B86E751EDEAC970069D254 /* Clock Launcher.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Clock Launcher.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 11B86E841EDEAC980069D254 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + D5A462662054B0B200E8B47E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = "Clock Launcher/Assets.xcassets"; sourceTree = SOURCE_ROOT; }; + D5A462672054B0B200E8B47E /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = "Clock Launcher/AppDelegate.m"; sourceTree = SOURCE_ROOT; }; + D5A462682054B0B200E8B47E /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ViewController.h; path = "Clock Launcher/ViewController.h"; sourceTree = SOURCE_ROOT; }; + D5A462692054B0B200E8B47E /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Clock Launcher/Info.plist"; sourceTree = SOURCE_ROOT; }; + D5A4626A2054B0B200E8B47E /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = "Clock Launcher/AppDelegate.h"; sourceTree = SOURCE_ROOT; }; + D5A4626B2054B0B200E8B47E /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ViewController.m; path = "Clock Launcher/ViewController.m"; sourceTree = SOURCE_ROOT; }; + D5A462702054B0C700E8B47E /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "Clock Launcher/main.m"; sourceTree = SOURCE_ROOT; }; + D5A462722054B0D600E8B47E /* Clock Launcher.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = "Clock Launcher.entitlements"; path = "Clock Launcher/Clock Launcher.entitlements"; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 11B86E721EDEAC970069D254 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 11B86E6C1EDEAC970069D254 = { + isa = PBXGroup; + children = ( + 11B86E771EDEAC970069D254 /* Clock Launcher */, + 11B86E761EDEAC970069D254 /* Products */, + ); + sourceTree = ""; + }; + 11B86E761EDEAC970069D254 /* Products */ = { + isa = PBXGroup; + children = ( + 11B86E751EDEAC970069D254 /* Clock Launcher.app */, + ); + name = Products; + sourceTree = ""; + }; + 11B86E771EDEAC970069D254 /* Clock Launcher */ = { + isa = PBXGroup; + children = ( + D5A462722054B0D600E8B47E /* Clock Launcher.entitlements */, + D5A4626A2054B0B200E8B47E /* AppDelegate.h */, + D5A462672054B0B200E8B47E /* AppDelegate.m */, + D5A462662054B0B200E8B47E /* Assets.xcassets */, + D5A462692054B0B200E8B47E /* Info.plist */, + D5A462682054B0B200E8B47E /* ViewController.h */, + D5A4626B2054B0B200E8B47E /* ViewController.m */, + 11B86E831EDEAC980069D254 /* Main.storyboard */, + 11B86E7B1EDEAC970069D254 /* Supporting Files */, + ); + path = "Clock Launcher"; + sourceTree = ""; + }; + 11B86E7B1EDEAC970069D254 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + D5A462702054B0C700E8B47E /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 11B86E741EDEAC970069D254 /* Clock Launcher */ = { + isa = PBXNativeTarget; + buildConfigurationList = 11B86E891EDEAC980069D254 /* Build configuration list for PBXNativeTarget "Clock Launcher" */; + buildPhases = ( + 11B86E711EDEAC970069D254 /* Sources */, + 11B86E721EDEAC970069D254 /* Frameworks */, + 11B86E731EDEAC970069D254 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Clock Launcher"; + productName = "Mute Me Now Launcher"; + productReference = 11B86E751EDEAC970069D254 /* Clock Launcher.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 11B86E6D1EDEAC970069D254 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = Nihalsharma; + TargetAttributes = { + 11B86E741EDEAC970069D254 = { + CreatedOnToolsVersion = 8.3.1; + DevelopmentTeam = 3K68XHVR7W; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + }; + }; + buildConfigurationList = 11B86E701EDEAC970069D254 /* Build configuration list for PBXProject "Clock Launcher" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 11B86E6C1EDEAC970069D254; + productRefGroup = 11B86E761EDEAC970069D254 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 11B86E741EDEAC970069D254 /* Clock Launcher */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 11B86E731EDEAC970069D254 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D5A4626E2054B0B300E8B47E /* Info.plist in Resources */, + D5A4626C2054B0B300E8B47E /* Assets.xcassets in Resources */, + 11B86E851EDEAC980069D254 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 11B86E711EDEAC970069D254 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D5A4626D2054B0B300E8B47E /* AppDelegate.m in Sources */, + D5A462712054B0C700E8B47E /* main.m in Sources */, + D5A4626F2054B0B300E8B47E /* ViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 11B86E831EDEAC980069D254 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 11B86E841EDEAC980069D254 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 11B86E871EDEAC980069D254 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.12; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 11B86E881EDEAC980069D254 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.12; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 11B86E8A1EDEAC980069D254 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "Clock Launcher/Clock Launcher.entitlements"; + CODE_SIGN_IDENTITY = "Mac Developer"; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 3K68XHVR7W; + INFOPLIST_FILE = "Clock Launcher/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "Nihalsharma.Clock-Launcher"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 11B86E8B1EDEAC980069D254 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "Clock Launcher/Clock Launcher.entitlements"; + CODE_SIGN_IDENTITY = "Mac Developer"; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 3K68XHVR7W; + INFOPLIST_FILE = "Clock Launcher/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "Nihalsharma.Clock-Launcher"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 11B86E701EDEAC970069D254 /* Build configuration list for PBXProject "Clock Launcher" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 11B86E871EDEAC980069D254 /* Debug */, + 11B86E881EDEAC980069D254 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 11B86E891EDEAC980069D254 /* Build configuration list for PBXNativeTarget "Clock Launcher" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 11B86E8A1EDEAC980069D254 /* Debug */, + 11B86E8B1EDEAC980069D254 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 11B86E6D1EDEAC970069D254 /* Project object */; +} diff --git a/Clock Bar App/Clock Launcher/Clock Launcher.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Clock Bar App/Clock Launcher/Clock Launcher.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Clock Bar App/Clock Launcher/Clock Launcher/AppDelegate.h b/Clock Bar App/Clock Launcher/Clock Launcher/AppDelegate.h new file mode 100644 index 0000000..f6c4eaf --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher/AppDelegate.h @@ -0,0 +1,7 @@ +// +#import + +@interface AppDelegate : NSObject + +@end + diff --git a/Clock Bar App/Clock Launcher/Clock Launcher/AppDelegate.m b/Clock Bar App/Clock Launcher/Clock Launcher/AppDelegate.m new file mode 100644 index 0000000..b892ee9 --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher/AppDelegate.m @@ -0,0 +1,32 @@ +#import "AppDelegate.h" + + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { + NSString *path = [[[[[[NSBundle mainBundle] bundlePath] + stringByDeletingLastPathComponent] + stringByDeletingLastPathComponent] + stringByDeletingLastPathComponent] + stringByDeletingLastPathComponent]; + [[NSWorkspace sharedWorkspace] launchApplication:path]; + [NSApp terminate:nil]; +} + + +- (void)applicationWillTerminate:(NSNotification *)aNotification { + // Insert code here to tear down your application +} + + +- (IBAction)prefsMenuItemAction:(id)sender { +} +- (IBAction)menuMenuItemAction:(id)sender { +} +@end diff --git a/Clock Bar App/Clock Launcher/Clock Launcher/Assets.xcassets/AppIcon.appiconset/Contents.json b/Clock Bar App/Clock Launcher/Clock Launcher/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2db2b1c --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Clock Bar App/Clock Launcher/Clock Launcher/Base.lproj/Main.storyboard b/Clock Bar App/Clock Launcher/Clock Launcher/Base.lproj/Main.storyboard new file mode 100644 index 0000000..66829af --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher/Base.lproj/Main.storyboard @@ -0,0 +1,656 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Clock Bar App/Clock Launcher/Clock Launcher/Clock Launcher.entitlements b/Clock Bar App/Clock Launcher/Clock Launcher/Clock Launcher.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher/Clock Launcher.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/Clock Bar App/Clock Launcher/Clock Launcher/Info.plist b/Clock Bar App/Clock Launcher/Clock Launcher/Info.plist new file mode 100644 index 0000000..14128d9 --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher/Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSApplicationCategoryType + public.app-category.utilities + LSBackgroundOnly + + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + LSUIElement + + NSHumanReadableCopyright + Copyright © 2018 Nihalsharma. All rights reserved. + NSMainStoryboardFile + Main + NSPrincipalClass + NSApplication + + diff --git a/Clock Bar App/Clock Launcher/Clock Launcher/ViewController.h b/Clock Bar App/Clock Launcher/Clock Launcher/ViewController.h new file mode 100644 index 0000000..91281dd --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher/ViewController.h @@ -0,0 +1,7 @@ +#import + +@interface ViewController : NSViewController + + +@end + diff --git a/Clock Bar App/Clock Launcher/Clock Launcher/ViewController.m b/Clock Bar App/Clock Launcher/Clock Launcher/ViewController.m new file mode 100644 index 0000000..96af35d --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher/ViewController.m @@ -0,0 +1,22 @@ +#import "ViewController.h" + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + + +- (void)setRepresentedObject:(id)representedObject { + [super setRepresentedObject:representedObject]; +} + +- (IBAction)showMenuBarChanged:(id)sender { +} + +- (IBAction)statusBarToggleChanged:(id)sender { +} + + + +@end diff --git a/Clock Bar App/Clock Launcher/Clock Launcher/main.m b/Clock Bar App/Clock Launcher/Clock Launcher/main.m new file mode 100644 index 0000000..ee09a55 --- /dev/null +++ b/Clock Bar App/Clock Launcher/Clock Launcher/main.m @@ -0,0 +1,12 @@ +// +// main.m +// +// Created by nihalsharma on 09/03/18. +// Copyright © 2018 nihalsharma. All rights reserved. +// + +#import + +int main(int argc, const char * argv[]) { + return NSApplicationMain(argc, argv); +} diff --git a/Clock Bar App/Info.plist b/Clock Bar App/Info.plist new file mode 100644 index 0000000..e4a72a6 --- /dev/null +++ b/Clock Bar App/Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.01 + CFBundleVersion + 2 + LSApplicationCategoryType + public.app-category.utilities + LSBackgroundOnly + + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + LSUIElement + + NSHumanReadableCopyright + Copyright © 2018 Nihalsharma. All rights reserved. + NSMainStoryboardFile + Main + NSPrincipalClass + NSApplication + + diff --git a/Clock Bar App/TouchBar.h b/Clock Bar App/TouchBar.h new file mode 100644 index 0000000..327e4d0 --- /dev/null +++ b/Clock Bar App/TouchBar.h @@ -0,0 +1,16 @@ +#import + +extern void DFRElementSetControlStripPresenceForIdentifier(NSString *, BOOL); +extern void DFRSystemModalShowsCloseBoxWhenFrontMost(BOOL); + +@interface NSTouchBarItem () + ++ (void)addSystemTrayItem:(NSTouchBarItem *)item; + +@end + +@interface NSTouchBar () + ++ (void)presentSystemModalFunctionBar:(NSTouchBar *)touchBar systemTrayItemIdentifier:(NSString *)identifier; + +@end diff --git a/Clock Bar App/TouchButton.h b/Clock Bar App/TouchButton.h new file mode 100644 index 0000000..fb39299 --- /dev/null +++ b/Clock Bar App/TouchButton.h @@ -0,0 +1,8 @@ +#import +#import "TouchDelegate.h" + +@interface TouchButton : NSButton + +@property (nonatomic, weak) id delegate; + +@end diff --git a/Clock Bar App/TouchButton.m b/Clock Bar App/TouchButton.m new file mode 100644 index 0000000..5d22691 --- /dev/null +++ b/Clock Bar App/TouchButton.m @@ -0,0 +1,90 @@ +#import +#import "TouchButton.h" + +static double LONG_PRESS_TIME = 0.5; + +@interface TouchButton () + +@property double touchBeganTime; + +@end + + +@implementation TouchButton + +- (BOOL)acceptsFirstResponder +{ + return YES; +} + +- (void)touchesBeganWithEvent:(NSEvent *)event +{ + + NSSet *touches = [event touchesMatchingPhase:NSTouchPhaseBegan inView:self]; + + NSTouch *touch = touches.anyObject; + if (touch != nil) + { + if (touch.type == NSTouchTypeDirect) + { + self.touchBeganTime = [[NSDate date] timeIntervalSince1970]; + } + } + + [super touchesBeganWithEvent:event]; +} + +- (void)touchesMovedWithEvent:(NSEvent *)event +{ + + for (NSTouch *touch in [event touchesMatchingPhase:NSTouchPhaseMoved inView:self]) + { + if (touch.type == NSTouchTypeDirect) + { + break; + } + } + + [super touchesMovedWithEvent:event]; +} + +- (void)touchesEndedWithEvent:(NSEvent *)event +{ + + for (NSTouch *touch in [event touchesMatchingPhase:NSTouchPhaseEnded inView:self]) + { + if (touch.type == NSTouchTypeDirect) + { + if(self.delegate != nil) + { + double touchTime = [[NSDate date] timeIntervalSince1970] - self.touchBeganTime; + if(touchTime >= LONG_PRESS_TIME) { + [self.delegate onLongPressed: self]; + } + else + { + [self.delegate onPressed: self]; + } + } + break; + } + } + + [super touchesEndedWithEvent:event]; +} + +- (void)touchesCancelledWithEvent:(NSEvent *)event +{ + + for (NSTouch *touch in [event touchesMatchingPhase:NSTouchPhaseMoved inView:self]) + { + if (touch.type == NSTouchTypeDirect) + { + break; + } + } + + [super touchesCancelledWithEvent:event]; +} + +@end diff --git a/Clock Bar App/TouchDelegate.h b/Clock Bar App/TouchDelegate.h new file mode 100644 index 0000000..51edede --- /dev/null +++ b/Clock Bar App/TouchDelegate.h @@ -0,0 +1,9 @@ +#import + +@protocol TouchDelegate + +- (void)onPressed:(NSButton *)sender; + +- (void)onLongPressed:(NSButton *)sender; + +@end diff --git a/Clock Bar App/ViewController.h b/Clock Bar App/ViewController.h new file mode 100644 index 0000000..d303168 --- /dev/null +++ b/Clock Bar App/ViewController.h @@ -0,0 +1,21 @@ +#import + +@interface ViewController : NSViewController + +@property (weak) IBOutlet NSButton *autoLoginState; +@property (weak) IBOutlet NSButton *showInMenuBarState; + + + +- (IBAction)showMenuBarChanged:(id)sender; + +- (IBAction)whiteButtonClicked:(id)sender; +- (IBAction)redButtonClicked:(id)sender; +- (IBAction)yellowButtonClicked:(id)sender; +- (IBAction)blueButtonClicked:(id)sender; +- (IBAction)greenButtonClicked:(id)sender; +- (IBAction)pinkButtonClicked:(id)sender; + + +@end + diff --git a/Clock Bar App/ViewController.m b/Clock Bar App/ViewController.m new file mode 100644 index 0000000..9e9b320 --- /dev/null +++ b/Clock Bar App/ViewController.m @@ -0,0 +1,138 @@ +#import "ViewController.h" +#import "AppDelegate.h" +#include + + +static NSString *const MASCustomShortcutKey = @"customShortcut"; + +static void *MASObservingContext = &MASObservingContext; + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + if ([[NSUserDefaults standardUserDefaults] objectForKey:@"auto_login"] == nil) { + + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"auto_login"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } + + BOOL state = [[NSUserDefaults standardUserDefaults] boolForKey:@"auto_login"]; + [self.autoLoginState setState: !state]; + + BOOL hideStatusBarState = [[NSUserDefaults standardUserDefaults] boolForKey:@"hide_status_bar"]; + [self.showInMenuBarState setState: hideStatusBarState]; + + NSLog(@"View Load"); +} + +-(void)viewDidAppear { + [super viewDidAppear]; + [[self.view window] setTitle:@"Clock Bar"]; + [[self.view window] center]; + +} + + +- (void)setRepresentedObject:(id)representedObject { + [super setRepresentedObject:representedObject]; + + [[[[NSApplication sharedApplication] windows] lastObject] setTitle:@"Clock Bar"]; +} + +- (IBAction)quitPressed:(id)sender { + [NSApp terminate:nil]; //TODO or quit about window +} + +- (IBAction)onLoginStartChanged:(id)sender { + NSLog(@"Login start changed"); + NSInteger state = [self.autoLoginState state]; + BOOL enableState = NO; + if(state == NSOnState) { + enableState = YES; + } + if(SMLoginItemSetEnabled((__bridge CFStringRef)@"Nihalsharma.Clock-Launcher", enableState)) { + [[NSUserDefaults standardUserDefaults] setBool:!enableState forKey:@"auto_login"]; + } +} + +- (IBAction)showMenuBarChanged:(id)sender { + + NSInteger state = [self.showInMenuBarState state]; + + BOOL enableState = NO; + if(state == NSOnState) { + enableState = YES; + } + + [[NSUserDefaults standardUserDefaults] setBool:enableState forKey:@"hide_status_bar"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + AppDelegate *appDelegate = (AppDelegate *) [[NSApplication sharedApplication] delegate]; + [appDelegate hideMenuBar:enableState]; + + + if (enableState == YES) { + + NSString *msgText = @"Long press on the Touch Bar Clock Button to show Preferences when the Menu Item is disabled."; + + NSAlert* msgBox = [[NSAlert alloc] init] ; + [msgBox setMessageText:msgText]; + [msgBox addButtonWithTitle: @"OK"]; + [msgBox runModal]; + } + +} + + +- (IBAction)whiteButtonClicked:(id)sender { + AppDelegate *appDelegate = (AppDelegate *) [[NSApplication sharedApplication] delegate]; + NSColor *color = [appDelegate colorWithHexColorString:@"FFFFFF"]; + [[NSUserDefaults standardUserDefaults] setObject:@"FFFFFF" forKey:@"clock_color"]; + [appDelegate changeColor:color]; +} + +- (IBAction)greenButtonClicked:(id)sender { + AppDelegate *appDelegate = (AppDelegate *) [[NSApplication sharedApplication] delegate]; + NSColor *color = [appDelegate colorWithHexColorString:@"00FF00"]; + [[NSUserDefaults standardUserDefaults] setObject:@"00FF00" forKey:@"clock_color"]; + [appDelegate changeColor:color]; +} + +- (IBAction)pinkButtonClicked:(id)sender { + AppDelegate *appDelegate = (AppDelegate *) [[NSApplication sharedApplication] delegate]; + NSColor *color = [appDelegate colorWithHexColorString:@"FE69F3"]; + [[NSUserDefaults standardUserDefaults] setObject:@"FE69F3" forKey:@"clock_color"]; + [appDelegate changeColor:color]; +} + +- (IBAction)redButtonClicked:(id)sender { + AppDelegate *appDelegate = (AppDelegate *) [[NSApplication sharedApplication] delegate]; + NSColor *color = [appDelegate colorWithHexColorString:@"FF0000"]; + [[NSUserDefaults standardUserDefaults] setObject:@"FF00000" forKey:@"clock_color"]; + [appDelegate changeColor:color]; +} + +- (IBAction)yellowButtonClicked:(id)sender { + AppDelegate *appDelegate = (AppDelegate *) [[NSApplication sharedApplication] delegate]; + NSColor *color = [appDelegate colorWithHexColorString:@"FFFF00"]; + [[NSUserDefaults standardUserDefaults] setObject:@"FFFF00" forKey:@"clock_color"]; + + + [appDelegate changeColor:color]; +} + +- (IBAction)blueButtonClicked:(id)sender { + AppDelegate *appDelegate = (AppDelegate *) [[NSApplication sharedApplication] delegate]; + NSColor *color = [appDelegate colorWithHexColorString:@"30E6FF"]; + [[NSUserDefaults standardUserDefaults] setObject:@"30E6FF" forKey:@"clock_color"]; + + + [appDelegate changeColor:color]; +} + + + + +@end diff --git a/Clock Bar App/clock-64.png b/Clock Bar App/clock-64.png new file mode 100644 index 0000000000000000000000000000000000000000..0584faf3f6fc335f62057aec0666a7dd9fd3eb94 GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VW5Skg^zjLY3M^pY!(`xNLnH&o5!<6dnWxcM~d4m`wxWD8*f4^s2<(4_uYj!qxHf!?B1sn^NApFcOP{^!-dwr3U;Enmpp zpw7f7zlO1rzrNylDU0*tK!*bpH#gkh^T@J4c}?DrbG}cs*;w{Gn7x4iLHmhY=@(ck zWU}jZI%K^T8q3^Iwf1Y8@OH<^ZAlLd=dWt0)ctj9*~`Sd3Hd>y3#!+*m3CJLXt{d? zyi$&g&~tZ*m}g=*@zA6hD&A*PHY`g!IVo6j&B@G7Ut*eWe6jItJS5A<$~9qnM$E&A zMH9tW#@xTR(?eDF@=k}4Wz3NajrcgZrcS6_`HfLzwXy#7-zUBtIOKlJ-E6|og;V=| z`rp>1)D*l_zP$LhT#)6SY2_DfD^kZu0d`4KRDDmbgZgq$HN4S|t~y0x1R~ z149d417lr7!w>@lDnC}Q!>*kacki4{1F4xAPKS|I6tkV oJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD<-Pgg&ebxsLQ0FZsz%K!iX literal 0 HcmV?d00001 diff --git a/Clock Bar App/main.m b/Clock Bar App/main.m new file mode 100644 index 0000000..8a6799b --- /dev/null +++ b/Clock Bar App/main.m @@ -0,0 +1,5 @@ +#import + +int main(int argc, const char * argv[]) { + return NSApplicationMain(argc, argv); +} diff --git a/Clock Bar.entitlements b/Clock Bar.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/Clock Bar.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/Clock Bar.xcodeproj/project.pbxproj b/Clock Bar.xcodeproj/project.pbxproj new file mode 100644 index 0000000..cca0d9f --- /dev/null +++ b/Clock Bar.xcodeproj/project.pbxproj @@ -0,0 +1,452 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 1141FDF21EEFF6DD00CA5B30 /* TouchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 1141FDF11EEFF6DD00CA5B30 /* TouchButton.m */; }; + 11B86E521EDE9B4D0069D254 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 11B86E511EDE9B4D0069D254 /* AppDelegate.m */; }; + 11B86E551EDE9B4D0069D254 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 11B86E541EDE9B4D0069D254 /* main.m */; }; + 11B86E581EDE9B4D0069D254 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11B86E571EDE9B4D0069D254 /* ViewController.m */; }; + 11B86E5A1EDE9B4D0069D254 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 11B86E591EDE9B4D0069D254 /* Assets.xcassets */; }; + 11B86E5D1EDE9B4D0069D254 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 11B86E5B1EDE9B4D0069D254 /* Main.storyboard */; }; + 11B86E661EDE9BD00069D254 /* DFRFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11B86E651EDE9BD00069D254 /* DFRFoundation.framework */; }; + 11B86E981EDEC6720069D254 /* ServiceManagement.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11B86E921EDEAD1D0069D254 /* ServiceManagement.framework */; }; + D53AAC71205497DB00767C9A /* ClickableTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D53AAC70205497DB00767C9A /* ClickableTextField.m */; }; + D53E002C2054A19A001625A6 /* clock-64.png in Resources */ = {isa = PBXBuildFile; fileRef = D53E002B2054A19A001625A6 /* clock-64.png */; }; + D53E002E2054A1AB001625A6 /* clock-64.png in Resources */ = {isa = PBXBuildFile; fileRef = D53E002D2054A1AA001625A6 /* clock-64.png */; }; + D53E00302054A1B1001625A6 /* clock-64.png in Resources */ = {isa = PBXBuildFile; fileRef = D53E002F2054A1B1001625A6 /* clock-64.png */; }; + D5A462752054B17B00E8B47E /* Clock Launcher.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = D5A462652054B06B00E8B47E /* Clock Launcher.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + D5A462642054B06B00E8B47E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D5A462602054B06B00E8B47E /* Clock Launcher.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 11B86E751EDEAC970069D254; + remoteInfo = "Clock Launcher"; + }; + D5A462732054B17500E8B47E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D5A462602054B06B00E8B47E /* Clock Launcher.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 11B86E741EDEAC970069D254; + remoteInfo = "Clock Launcher"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 11B86E941EDEAD980069D254 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = Contents/Library/LoginItems; + dstSubfolderSpec = 1; + files = ( + D5A462752054B17B00E8B47E /* Clock Launcher.app in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1141FDF01EEFF6DD00CA5B30 /* TouchButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TouchButton.h; sourceTree = ""; }; + 1141FDF11EEFF6DD00CA5B30 /* TouchButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TouchButton.m; sourceTree = ""; }; + 1141FDF51EEFFA0000CA5B30 /* TouchDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TouchDelegate.h; sourceTree = ""; }; + 11B86E4D1EDE9B4D0069D254 /* Clock Bar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Clock Bar.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 11B86E501EDE9B4D0069D254 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 11B86E511EDE9B4D0069D254 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 11B86E541EDE9B4D0069D254 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 11B86E561EDE9B4D0069D254 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 11B86E571EDE9B4D0069D254 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 11B86E591EDE9B4D0069D254 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 11B86E5C1EDE9B4D0069D254 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 11B86E5E1EDE9B4D0069D254 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 11B86E651EDE9BD00069D254 /* DFRFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DFRFoundation.framework; path = ../../../../../../System/Library/PrivateFrameworks/DFRFoundation.framework; sourceTree = ""; }; + 11B86E671EDE9CDC0069D254 /* TouchBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TouchBar.h; sourceTree = ""; }; + 11B86E921EDEAD1D0069D254 /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; }; + 11B86E9A1EDECB3F0069D254 /* Clock Bar App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Clock Bar App.entitlements"; sourceTree = ""; }; + D53AAC6F205497C200767C9A /* ClickableTextField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClickableTextField.h; sourceTree = ""; }; + D53AAC70205497DB00767C9A /* ClickableTextField.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ClickableTextField.m; sourceTree = ""; }; + D53C8A03205510EF00EAAA3D /* Clock Bar.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Clock Bar.entitlements"; sourceTree = ""; }; + D53E002B2054A19A001625A6 /* clock-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "clock-64.png"; sourceTree = ""; }; + D53E002D2054A1AA001625A6 /* clock-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "clock-64.png"; path = "../../.Trash/clock-64.png"; sourceTree = ""; }; + D53E002F2054A1B1001625A6 /* clock-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "clock-64.png"; sourceTree = ""; }; + D5A462602054B06B00E8B47E /* Clock Launcher.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "Clock Launcher.xcodeproj"; path = "Clock Bar App/Clock Launcher/Clock Launcher.xcodeproj"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 11B86E4A1EDE9B4D0069D254 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 11B86E981EDEC6720069D254 /* ServiceManagement.framework in Frameworks */, + 11B86E661EDE9BD00069D254 /* DFRFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 11B86E441EDE9B4C0069D254 = { + isa = PBXGroup; + children = ( + D53C8A03205510EF00EAAA3D /* Clock Bar.entitlements */, + D5A462602054B06B00E8B47E /* Clock Launcher.xcodeproj */, + D53E002B2054A19A001625A6 /* clock-64.png */, + 5D4763251F0562F2005E8DB0 /* Graphics */, + 11B86E4F1EDE9B4D0069D254 /* Clock Bar App */, + 11B86E4E1EDE9B4D0069D254 /* Products */, + 11B86E641EDE9BD00069D254 /* Frameworks */, + ); + sourceTree = ""; + }; + 11B86E4E1EDE9B4D0069D254 /* Products */ = { + isa = PBXGroup; + children = ( + 11B86E4D1EDE9B4D0069D254 /* Clock Bar.app */, + ); + name = Products; + sourceTree = ""; + }; + 11B86E4F1EDE9B4D0069D254 /* Clock Bar App */ = { + isa = PBXGroup; + children = ( + D53E002F2054A1B1001625A6 /* clock-64.png */, + 11B86E9A1EDECB3F0069D254 /* Clock Bar App.entitlements */, + 11B86E501EDE9B4D0069D254 /* AppDelegate.h */, + 11B86E511EDE9B4D0069D254 /* AppDelegate.m */, + 11B86E561EDE9B4D0069D254 /* ViewController.h */, + 11B86E571EDE9B4D0069D254 /* ViewController.m */, + 11B86E591EDE9B4D0069D254 /* Assets.xcassets */, + 11B86E5B1EDE9B4D0069D254 /* Main.storyboard */, + 11B86E5E1EDE9B4D0069D254 /* Info.plist */, + 11B86E531EDE9B4D0069D254 /* Supporting Files */, + 11B86E671EDE9CDC0069D254 /* TouchBar.h */, + 1141FDF01EEFF6DD00CA5B30 /* TouchButton.h */, + 1141FDF11EEFF6DD00CA5B30 /* TouchButton.m */, + 1141FDF51EEFFA0000CA5B30 /* TouchDelegate.h */, + D53AAC6F205497C200767C9A /* ClickableTextField.h */, + D53AAC70205497DB00767C9A /* ClickableTextField.m */, + ); + path = "Clock Bar App"; + sourceTree = ""; + }; + 11B86E531EDE9B4D0069D254 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 11B86E541EDE9B4D0069D254 /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 11B86E641EDE9BD00069D254 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 11B86E921EDEAD1D0069D254 /* ServiceManagement.framework */, + 11B86E651EDE9BD00069D254 /* DFRFoundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 5D4763251F0562F2005E8DB0 /* Graphics */ = { + isa = PBXGroup; + children = ( + D53E002D2054A1AA001625A6 /* clock-64.png */, + ); + name = Graphics; + sourceTree = ""; + }; + D5A462612054B06B00E8B47E /* Products */ = { + isa = PBXGroup; + children = ( + D5A462652054B06B00E8B47E /* Clock Launcher.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 11B86E4C1EDE9B4D0069D254 /* Clock Bar */ = { + isa = PBXNativeTarget; + buildConfigurationList = 11B86E611EDE9B4D0069D254 /* Build configuration list for PBXNativeTarget "Clock Bar" */; + buildPhases = ( + 11B86E491EDE9B4D0069D254 /* Sources */, + 11B86E4A1EDE9B4D0069D254 /* Frameworks */, + 11B86E4B1EDE9B4D0069D254 /* Resources */, + 11B86E941EDEAD980069D254 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + D5A462742054B17500E8B47E /* PBXTargetDependency */, + ); + name = "Clock Bar"; + productName = "Mute Me Now"; + productReference = 11B86E4D1EDE9B4D0069D254 /* Clock Bar.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 11B86E451EDE9B4C0069D254 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = Nihalsharma; + TargetAttributes = { + 11B86E4C1EDE9B4D0069D254 = { + CreatedOnToolsVersion = 8.3.1; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + }; + }; + buildConfigurationList = 11B86E481EDE9B4C0069D254 /* Build configuration list for PBXProject "Clock Bar" */; + compatibilityVersion = "Xcode 3.1"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 11B86E441EDE9B4C0069D254; + productRefGroup = 11B86E4E1EDE9B4D0069D254 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = D5A462612054B06B00E8B47E /* Products */; + ProjectRef = D5A462602054B06B00E8B47E /* Clock Launcher.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 11B86E4C1EDE9B4D0069D254 /* Clock Bar */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + D5A462652054B06B00E8B47E /* Clock Launcher.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = "Clock Launcher.app"; + remoteRef = D5A462642054B06B00E8B47E /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 11B86E4B1EDE9B4D0069D254 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D53E00302054A1B1001625A6 /* clock-64.png in Resources */, + D53E002C2054A19A001625A6 /* clock-64.png in Resources */, + 11B86E5A1EDE9B4D0069D254 /* Assets.xcassets in Resources */, + D53E002E2054A1AB001625A6 /* clock-64.png in Resources */, + 11B86E5D1EDE9B4D0069D254 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 11B86E491EDE9B4D0069D254 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1141FDF21EEFF6DD00CA5B30 /* TouchButton.m in Sources */, + 11B86E581EDE9B4D0069D254 /* ViewController.m in Sources */, + D53AAC71205497DB00767C9A /* ClickableTextField.m in Sources */, + 11B86E551EDE9B4D0069D254 /* main.m in Sources */, + 11B86E521EDE9B4D0069D254 /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + D5A462742054B17500E8B47E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Clock Launcher"; + targetProxy = D5A462732054B17500E8B47E /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 11B86E5B1EDE9B4D0069D254 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 11B86E5C1EDE9B4D0069D254 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 11B86E5F1EDE9B4D0069D254 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.12; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 11B86E601EDE9B4D0069D254 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.12; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 11B86E621EDE9B4D0069D254 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "Clock Bar.entitlements"; + CODE_SIGN_IDENTITY = "Mac Developer"; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 3K68XHVR7W; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks", + ); + INFOPLIST_FILE = "Clock Bar App/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.12; + PRODUCT_BUNDLE_IDENTIFIER = "nihalsharma.clock-bar"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 11B86E631EDE9B4D0069D254 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "Clock Bar.entitlements"; + CODE_SIGN_IDENTITY = "Mac Developer"; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 3K68XHVR7W; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks", + ); + INFOPLIST_FILE = "Clock Bar App/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.12; + PRODUCT_BUNDLE_IDENTIFIER = "nihalsharma.clock-bar"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 11B86E481EDE9B4C0069D254 /* Build configuration list for PBXProject "Clock Bar" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 11B86E5F1EDE9B4D0069D254 /* Debug */, + 11B86E601EDE9B4D0069D254 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 11B86E611EDE9B4D0069D254 /* Build configuration list for PBXNativeTarget "Clock Bar" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 11B86E621EDE9B4D0069D254 /* Debug */, + 11B86E631EDE9B4D0069D254 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 11B86E451EDE9B4C0069D254 /* Project object */; +} diff --git a/Clock Bar.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Clock Bar.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..2fddef3 --- /dev/null +++ b/Clock Bar.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Clock Bar.xcworkspace/contents.xcworkspacedata b/Clock Bar.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..6096db9 --- /dev/null +++ b/Clock Bar.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cde8338 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Pixel Point + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..6b2ea90 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Clock Bar +Get clock right on the sweetest spot of the macbook, on the touch bar. + + +### Why +The upper right corner seems the farthest place on the planet to look at. Full of menu items, but an area you really find it incovenient. Touch bar has been so convenient for so many things that you want to have everything right there. Having the clock right on the touch bar save you from visiting the darkest corner and saves so much effort. Seriously!!! You will realise. + +### Options +- use long tap on the Touch Bar icon to open Preferences +- find the Open at Login option in Preferences +- tap on the touch bar to toggle between HH:mm and hh:mm format +- choose from different colors + + +### Ideas for development +If you have any ideas that can help us improve this application, please create a new issue. + +You can find approved ideas for future implementation [here](https://github.com/nihalsharma/clock-bar/projects/1) + +### How to contribute + +- Download Xcode +- Fork this repository +- Open repository via Xcode +- Make changes +- Provide Pull Request + +### Thanks for passing by + + +--- +Made by [Nihal Sharma] + +### Screens + +preference + +clock1 + +clock2 diff --git a/clock-64.png b/clock-64.png new file mode 100644 index 0000000000000000000000000000000000000000..0584faf3f6fc335f62057aec0666a7dd9fd3eb94 GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VW5Skg^zjLY3M^pY!(`xNLnH&o5!<6dnWxcM~d4m`wxWD8*f4^s2<(4_uYj!qxHf!?B1sn^NApFcOP{^!-dwr3U;Enmpp zpw7f7zlO1rzrNylDU0*tK!*bpH#gkh^T@J4c}?DrbG}cs*;w{Gn7x4iLHmhY=@(ck zWU}jZI%K^T8q3^Iwf1Y8@OH<^ZAlLd=dWt0)ctj9*~`Sd3Hd>y3#!+*m3CJLXt{d? zyi$&g&~tZ*m}g=*@zA6hD&A*PHY`g!IVo6j&B@G7Ut*eWe6jItJS5A<$~9qnM$E&A zMH9tW#@xTR(?eDF@=k}4Wz3NajrcgZrcS6_`HfLzwXy#7-zUBtIOKlJ-E6|og;V=| z`rp>1)D*l_zP$LhT#)6SY2_DfD^kZu0d`4KRDDmbgZgq$HN4S|t~y0x1R~ z149d417lr7!w>@lDnC}Q!>*kacki4{1F4xAPKS|I6tkV oJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD<-Pgg&ebxsLQ0FZsz%K!iX literal 0 HcmV?d00001