From 225c2b095b03e4b0383a99863349fc28b6a3f893 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Sat, 14 May 2016 15:42:45 -0700 Subject: [PATCH] Initial start of the menu bar app. Has menu items to join/leave networks which currently displays an empty popover from the icon (icon needs to be made still) --- ZeroTier One.xcodeproj/project.pbxproj | 16 +++++ .../xcdebugger/Breakpoints_v2.xcbkptlist | 5 ++ ZeroTier One/AppDelegate.swift | 64 +++++++++++++++++- ZeroTier One/Assets.xcassets/Contents.json | 6 ++ .../MenuBarIconMac.imageset/Contents.json | 21 ++++++ .../MenuBarIconMac.png | Bin 0 -> 3810 bytes .../MenuBarIconMac@2x.png | Bin 0 -> 5444 bytes ZeroTier One/Base.lproj/MainMenu.xib | 11 +-- ZeroTier One/Info.plist | 2 + ZeroTier One/JoinNetworkViewController.swift | 18 +++++ ZeroTier One/JoinNetworkViewController.xib | 20 ++++++ ZeroTier One/ShowNetworksViewController.swift | 18 +++++ ZeroTier One/ShowNetworksViewController.xib | 20 ++++++ 13 files changed, 195 insertions(+), 6 deletions(-) create mode 100644 ZeroTier One.xcodeproj/xcuserdata/grant.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 ZeroTier One/Assets.xcassets/Contents.json create mode 100644 ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/Contents.json create mode 100644 ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/MenuBarIconMac.png create mode 100644 ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/MenuBarIconMac@2x.png create mode 100644 ZeroTier One/JoinNetworkViewController.swift create mode 100644 ZeroTier One/JoinNetworkViewController.xib create mode 100644 ZeroTier One/ShowNetworksViewController.swift create mode 100644 ZeroTier One/ShowNetworksViewController.xib diff --git a/ZeroTier One.xcodeproj/project.pbxproj b/ZeroTier One.xcodeproj/project.pbxproj index 107870671..2730b9873 100644 --- a/ZeroTier One.xcodeproj/project.pbxproj +++ b/ZeroTier One.xcodeproj/project.pbxproj @@ -10,6 +10,10 @@ 93326BDC1CE7C816005CA2AC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93326BDB1CE7C816005CA2AC /* AppDelegate.swift */; }; 93326BDE1CE7C816005CA2AC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 93326BDD1CE7C816005CA2AC /* Assets.xcassets */; }; 93326BE11CE7C816005CA2AC /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 93326BDF1CE7C816005CA2AC /* MainMenu.xib */; }; + 93326BEA1CE7D9B9005CA2AC /* JoinNetworkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93326BE81CE7D9B9005CA2AC /* JoinNetworkViewController.swift */; }; + 93326BEB1CE7D9B9005CA2AC /* JoinNetworkViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 93326BE91CE7D9B9005CA2AC /* JoinNetworkViewController.xib */; }; + 93326BEE1CE7DA30005CA2AC /* ShowNetworksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93326BEC1CE7DA30005CA2AC /* ShowNetworksViewController.swift */; }; + 93326BEF1CE7DA30005CA2AC /* ShowNetworksViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 93326BED1CE7DA30005CA2AC /* ShowNetworksViewController.xib */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -18,6 +22,10 @@ 93326BDD1CE7C816005CA2AC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 93326BE01CE7C816005CA2AC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; 93326BE21CE7C816005CA2AC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 93326BE81CE7D9B9005CA2AC /* JoinNetworkViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JoinNetworkViewController.swift; sourceTree = ""; }; + 93326BE91CE7D9B9005CA2AC /* JoinNetworkViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = JoinNetworkViewController.xib; sourceTree = ""; }; + 93326BEC1CE7DA30005CA2AC /* ShowNetworksViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShowNetworksViewController.swift; sourceTree = ""; }; + 93326BED1CE7DA30005CA2AC /* ShowNetworksViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ShowNetworksViewController.xib; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -51,9 +59,13 @@ isa = PBXGroup; children = ( 93326BDB1CE7C816005CA2AC /* AppDelegate.swift */, + 93326BE81CE7D9B9005CA2AC /* JoinNetworkViewController.swift */, + 93326BEC1CE7DA30005CA2AC /* ShowNetworksViewController.swift */, 93326BDD1CE7C816005CA2AC /* Assets.xcassets */, 93326BDF1CE7C816005CA2AC /* MainMenu.xib */, 93326BE21CE7C816005CA2AC /* Info.plist */, + 93326BE91CE7D9B9005CA2AC /* JoinNetworkViewController.xib */, + 93326BED1CE7DA30005CA2AC /* ShowNetworksViewController.xib */, ); path = "ZeroTier One"; sourceTree = ""; @@ -116,6 +128,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 93326BEF1CE7DA30005CA2AC /* ShowNetworksViewController.xib in Resources */, + 93326BEB1CE7D9B9005CA2AC /* JoinNetworkViewController.xib in Resources */, 93326BDE1CE7C816005CA2AC /* Assets.xcassets in Resources */, 93326BE11CE7C816005CA2AC /* MainMenu.xib in Resources */, ); @@ -129,6 +143,8 @@ buildActionMask = 2147483647; files = ( 93326BDC1CE7C816005CA2AC /* AppDelegate.swift in Sources */, + 93326BEA1CE7D9B9005CA2AC /* JoinNetworkViewController.swift in Sources */, + 93326BEE1CE7DA30005CA2AC /* ShowNetworksViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ZeroTier One.xcodeproj/xcuserdata/grant.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/ZeroTier One.xcodeproj/xcuserdata/grant.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 000000000..fe2b45415 --- /dev/null +++ b/ZeroTier One.xcodeproj/xcuserdata/grant.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/ZeroTier One/AppDelegate.swift b/ZeroTier One/AppDelegate.swift index 6ac5a5c14..e5932f5f5 100644 --- a/ZeroTier One/AppDelegate.swift +++ b/ZeroTier One/AppDelegate.swift @@ -14,8 +14,34 @@ class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow! + let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2.0) + + let networkListPopover = NSPopover() + let joinNetworkPopover = NSPopover() + + var transientMonitor: AnyObject? = nil + func applicationDidFinishLaunching(aNotification: NSNotification) { - // Insert code here to initialize your application + + + statusItem.image = NSImage(named: "MenuBarIconMac") + + let menu = NSMenu() + + menu.addItem(NSMenuItem(title: "Show Networks", action: #selector(AppDelegate.showNetworks), keyEquivalent: "n")) + menu.addItem(NSMenuItem(title: "Join Network", action: #selector(AppDelegate.joinNetwork), keyEquivalent: "j")) + menu.addItem(NSMenuItem.separatorItem()) + menu.addItem(NSMenuItem(title: "Quit ZeroTier One", action: #selector(AppDelegate.quit), keyEquivalent: "q")) + + statusItem.menu = menu + + joinNetworkPopover.contentViewController = JoinNetworkViewController( + nibName: "JoinNetworkViewController", bundle: nil) + joinNetworkPopover.behavior = .Transient + + networkListPopover.contentViewController = ShowNetworksViewController( + nibName: "ShowNetworksViewController", bundle: nil) + networkListPopover.behavior = .Transient } func applicationWillTerminate(aNotification: NSNotification) { @@ -23,5 +49,41 @@ class AppDelegate: NSObject, NSApplicationDelegate { } + func showNetworks() { + if let button = statusItem.button { + networkListPopover.showRelativeToRect(button.bounds, ofView: button, preferredEdge: .MinY) + + if transientMonitor == nil { + transientMonitor = NSEvent.addGlobalMonitorForEventsMatchingMask( + [.LeftMouseDownMask, .RightMouseDownMask, .OtherMouseDownMask]) { (event: NSEvent) -> Void in + + NSEvent.removeMonitor(self.transientMonitor!) + self.transientMonitor = nil + self.networkListPopover.close() + } + } + } + } + + func joinNetwork() { + if let button = statusItem.button { + joinNetworkPopover.showRelativeToRect(button.bounds, ofView: button, preferredEdge: .MinY) + + if transientMonitor == nil { + transientMonitor = NSEvent.addGlobalMonitorForEventsMatchingMask( + [.LeftMouseDownMask, .RightMouseDownMask, .OtherMouseDownMask]) { (event: NSEvent) -> Void in + + NSEvent.removeMonitor(self.transientMonitor!) + self.transientMonitor = nil + self.joinNetworkPopover.close() + + } + } + } + } + + func quit() { + NSApp.performSelector(#selector(NSApp.terminate(_:)), withObject: nil, afterDelay: 0.0) + } } diff --git a/ZeroTier One/Assets.xcassets/Contents.json b/ZeroTier One/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/ZeroTier One/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/Contents.json b/ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/Contents.json new file mode 100644 index 000000000..ab75ef9a7 --- /dev/null +++ b/ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "MenuBarIconMac.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "MenuBarIconMac@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/MenuBarIconMac.png b/ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/MenuBarIconMac.png new file mode 100644 index 0000000000000000000000000000000000000000..74e59fe79bd676b378d66de2d12d05dfa26e3746 GIT binary patch literal 3810 zcmdT{dsGu=79ZQHm6z4@NUANyhzhHd#}LTF5QQL+9)diAh*e-RnS|IR6Egz|DlGMZ zRiL!sT3AuEs8vw#fi4w`h=^~owmwie)<@C0nu3dOk)26+M1&r9&)GjV=Oi<8zx(^$ z`+dLf-ubdRB0R*^X{-|f0IssopeXV>hWfrgjQp*y)J-QZ?`Z<$0RXTk*ZCzplze6& zp;2-GSUed3GFAY{VI`JK_%oSQpx%!?PeQBii)6sN zr$tVXO^vX*EDn1hm@x?>Fgyt}_GbASws&|?0@R`%BrY{FC`^U)1~ev{bhbrNA#7BK z>QMuMlQ`~x`I6%F0$KZoh{1BSziSt;a#cMCXRKwOb(MA=a&jwPEA zbXE$PexHh@NMdUJMbx-1nG!O_pd}=b*d|MVbDyqu)NGTMq=PA#gxd{qv^n_qDkYLh zr4c4ft<|9tJSrrRA)6)j;|l%!K!`g&>v`{j5fjuO3l&+aWM7wwuOlsER4f|15kyC)R;*R6B4Z+)}U;o zK_h1O867;yy&{s6b*_R5I0z*^k4? z;fZieO_*U58lWM|;B8VL2-cT=Z-j1oa}sL!GkxuBHm|`+v<94j4G1a=l92m>rPZoL zLLaqK3GsYD9t0^tC5MNAN`$8deUy9%LY2Nk#Mf8MwzE6H2af?GwibZc_LHgy+HLI* z6SM6L{(mF{k^~zxs7k`_nOcvb|J?ev#{Wt?2=x&NxdH^_356;U7VsdDdImW#qVnUQ z0-gZk^vTW@@OhyiHc2;~sMeh5=x2pOjD9i~Pgu9{1ppp;5AALMdTUr?yzp`ZX! zp(>@C%U24Kp0#oy>kedJS%*WG{RC&LAMyw%aU!8T$3cnHV&li|QMaqUeoK8);;nEqYre91H;~dcrC_@=Er&Z{ z2#s&}rK;V1zw`Q}nY{Y&Z{}?~T8XuGRxP~~eto_6r)%eyJZUkXGuOP>fH%^NE;Utc zU!A<|zb8)0C|v2we6GH;`}tkgp{%NpDlTt-ku+%u4O`ypBu9%13N@l~__-o-#cC*VU6&D!uRp?=QV&m6fWJb0&Yf zf_5XYXkMXy-K{x3E*HEyqtB*&dE{vP{gxlP=#TQIcyA~g*?EB{_3miv{4tqlDV{F) zBE6{YNw#zOQ;(eDj_9?ye>l&hO~~FaU&fRc-8h3M7YUo2x7}O{l)7dH@5_ESOCL5z zd}e&{JATh+<_!rxij8b($XI(bd!h4EmQOzxrwtv;u;@Gwa4<{<5 z%V%8mFWR`FcJoOmUG9$WFt>^f7X4ymB407ZJ!5tlTX*dE@vNyy6(NGZmaYV?rI8Pf zTVjre%;?O?A3oO7S)U%d_CC<~Q)b}r`HwA68loFMEoh2vsK{MBvniwwtQIw=od2ve!29B8npt=w;&G+pEV}>HTySxp-nfYsPo!vKl z(WA2Jx$)OLtAPnk-#(4rmi2&TSeiB-J8YrHJpKrbK4_&Yv4kt0%tnpJS2Bilv**YX zI{%N#BR}UJuG0HoSdzN7?3WJTOHVzDADv#4=-ayd$Bc%;2VTb9+L+iI2)x?0#MO&) zH!^SiefP6_SK&Kb)=bXII9Sb%7~1&7_|Gd6@7zvyQGhP{^l_i0e7&i`>Njh_lc-E5 zbDqJ4u1Hz_7hNQtuAap8to_$Hm)dbLmm~1Yej{osJT?VC7GHKF+;b;v4|PdcHZAyg z$FX?n^1>&sOMD(h<}{?AIl$QSuuc~pUinmZyLs2|>l*G0Vw>LKw7;AFWd5&Tj{mv# z=7NVi%3MA!vfkvKdT^e3cwzqe8Eyxjh3n2-JXNO|FCLme+Z;dY$cY!!KS|lF@SyU* H#AW{m`BNzA literal 0 HcmV?d00001 diff --git a/ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/MenuBarIconMac@2x.png b/ZeroTier One/Assets.xcassets/MenuBarIconMac.imageset/MenuBarIconMac@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1c99f851f4019b99d756e617bb59e1f973f16850 GIT binary patch literal 5444 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 - + - + + @@ -11,7 +12,7 @@ - + @@ -666,11 +667,11 @@ - + - + diff --git a/ZeroTier One/Info.plist b/ZeroTier One/Info.plist index d5b744c6a..f5d0dc948 100644 --- a/ZeroTier One/Info.plist +++ b/ZeroTier One/Info.plist @@ -2,6 +2,8 @@ + LSUIElement + CFBundleDevelopmentRegion en CFBundleExecutable diff --git a/ZeroTier One/JoinNetworkViewController.swift b/ZeroTier One/JoinNetworkViewController.swift new file mode 100644 index 000000000..d071ce912 --- /dev/null +++ b/ZeroTier One/JoinNetworkViewController.swift @@ -0,0 +1,18 @@ +// +// JoinNetworkViewController.swift +// ZeroTier One +// +// Created by Grant Limberg on 5/14/16. +// Copyright © 2016 ZeroTier, Inc. All rights reserved. +// + +import Cocoa + +class JoinNetworkViewController: NSViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do view setup here. + } + +} diff --git a/ZeroTier One/JoinNetworkViewController.xib b/ZeroTier One/JoinNetworkViewController.xib new file mode 100644 index 000000000..7f3f13297 --- /dev/null +++ b/ZeroTier One/JoinNetworkViewController.xib @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ZeroTier One/ShowNetworksViewController.swift b/ZeroTier One/ShowNetworksViewController.swift new file mode 100644 index 000000000..0ecb38f53 --- /dev/null +++ b/ZeroTier One/ShowNetworksViewController.swift @@ -0,0 +1,18 @@ +// +// ShowNetworksViewController.swift +// ZeroTier One +// +// Created by Grant Limberg on 5/14/16. +// Copyright © 2016 ZeroTier, Inc. All rights reserved. +// + +import Cocoa + +class ShowNetworksViewController: NSViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do view setup here. + } + +} diff --git a/ZeroTier One/ShowNetworksViewController.xib b/ZeroTier One/ShowNetworksViewController.xib new file mode 100644 index 000000000..2fe5f22f3 --- /dev/null +++ b/ZeroTier One/ShowNetworksViewController.xib @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + +