From 35d1736c9726d3be8ab2cbc63b445d14b32c4d14 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 23 Jun 2016 20:04:57 -0700 Subject: add preferences view not populated yet --- ZeroTier One.xcodeproj/project.pbxproj | 8 ++++++++ ZeroTier One/AppDelegate.swift | 27 +++++++++++++++++++++++++++ ZeroTier One/JoinNetworkViewController.xib | 1 - ZeroTier One/PreferencesViewController.swift | 18 ++++++++++++++++++ ZeroTier One/PreferencesViewController.xib | 19 +++++++++++++++++++ ZeroTier One/ShowNetworksViewController.xib | 1 - 6 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 ZeroTier One/PreferencesViewController.swift create mode 100644 ZeroTier One/PreferencesViewController.xib diff --git a/ZeroTier One.xcodeproj/project.pbxproj b/ZeroTier One.xcodeproj/project.pbxproj index 5aa71456..d6b38dd8 100644 --- a/ZeroTier One.xcodeproj/project.pbxproj +++ b/ZeroTier One.xcodeproj/project.pbxproj @@ -9,6 +9,8 @@ /* Begin PBXBuildFile section */ 932D472D1D138B0C004BCFE2 /* NetworkMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 932D472C1D138B0C004BCFE2 /* NetworkMonitor.swift */; }; 932D472F1D1CD499004BCFE2 /* ZeroTierIcon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 932D472E1D1CD499004BCFE2 /* ZeroTierIcon.icns */; }; + 932D47321D1CD861004BCFE2 /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 932D47301D1CD861004BCFE2 /* PreferencesViewController.swift */; }; + 932D47331D1CD861004BCFE2 /* PreferencesViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 932D47311D1CD861004BCFE2 /* PreferencesViewController.xib */; }; 9330F1351CEAB4C400687EC8 /* ServiceCom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9330F1341CEAB4C400687EC8 /* ServiceCom.swift */; }; 9330F1371CEBF87200687EC8 /* Network.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9330F1361CEBF87200687EC8 /* Network.swift */; }; 9330F13B1CF534E500687EC8 /* NetworkInfoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9330F13A1CF534E500687EC8 /* NetworkInfoCell.swift */; }; @@ -25,6 +27,8 @@ /* Begin PBXFileReference section */ 932D472C1D138B0C004BCFE2 /* NetworkMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkMonitor.swift; sourceTree = ""; }; 932D472E1D1CD499004BCFE2 /* ZeroTierIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = ZeroTierIcon.icns; sourceTree = ""; }; + 932D47301D1CD861004BCFE2 /* PreferencesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesViewController.swift; sourceTree = ""; }; + 932D47311D1CD861004BCFE2 /* PreferencesViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PreferencesViewController.xib; sourceTree = ""; }; 9330F1341CEAB4C400687EC8 /* ServiceCom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceCom.swift; sourceTree = ""; }; 9330F1361CEBF87200687EC8 /* Network.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Network.swift; sourceTree = ""; }; 9330F13A1CF534E500687EC8 /* NetworkInfoCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkInfoCell.swift; sourceTree = ""; }; @@ -88,6 +92,8 @@ 93DAFE4C1CFE53DA00547CC4 /* AuthtokenCopy.h */, 93DAFE491CFE53C900547CC4 /* ZeroTier One-Bridging-Header.h */, 932D472C1D138B0C004BCFE2 /* NetworkMonitor.swift */, + 932D47301D1CD861004BCFE2 /* PreferencesViewController.swift */, + 932D47311D1CD861004BCFE2 /* PreferencesViewController.xib */, ); path = "ZeroTier One"; sourceTree = ""; @@ -155,6 +161,7 @@ 93326BDE1CE7C816005CA2AC /* Assets.xcassets in Resources */, 93326BE11CE7C816005CA2AC /* MainMenu.xib in Resources */, 932D472F1D1CD499004BCFE2 /* ZeroTierIcon.icns in Resources */, + 932D47331D1CD861004BCFE2 /* PreferencesViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -167,6 +174,7 @@ files = ( 9330F1371CEBF87200687EC8 /* Network.swift in Sources */, 932D472D1D138B0C004BCFE2 /* NetworkMonitor.swift in Sources */, + 932D47321D1CD861004BCFE2 /* PreferencesViewController.swift in Sources */, 93326BDC1CE7C816005CA2AC /* AppDelegate.swift in Sources */, 93DAFE4B1CFE53CA00547CC4 /* AuthtokenCopy.m in Sources */, 9330F13B1CF534E500687EC8 /* NetworkInfoCell.swift in Sources */, diff --git a/ZeroTier One/AppDelegate.swift b/ZeroTier One/AppDelegate.swift index 0179780f..f37eba73 100644 --- a/ZeroTier One/AppDelegate.swift +++ b/ZeroTier One/AppDelegate.swift @@ -18,6 +18,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { let networkListPopover = NSPopover() let joinNetworkPopover = NSPopover() + let preferencesPopover = NSPopover() var transientMonitor: AnyObject? = nil @@ -44,6 +45,12 @@ class AppDelegate: NSObject, NSApplicationDelegate { networkListPopover.behavior = .Transient networkListPopover.appearance = NSAppearance(named: NSAppearanceNameAqua) + + preferencesPopover.contentViewController = PreferencesViewController( + nibName: "PreferencesViewController", bundle: nil) + preferencesPopover.behavior = .Transient + + preferencesPopover.appearance = NSAppearance(named: NSAppearanceNameAqua) } func applicationWillTerminate(aNotification: NSNotification) { @@ -86,6 +93,22 @@ class AppDelegate: NSObject, NSApplicationDelegate { } } + func showPreferences() { + if let button = statusItem.button { + preferencesPopover.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.preferencesPopover.close() + } + } + } + } + func quit() { NSApp.performSelector(#selector(NSApp.terminate(_:)), withObject: nil, afterDelay: 0.0) } @@ -134,6 +157,10 @@ class AppDelegate: NSObject, NSApplicationDelegate { menu.addItem(NSMenuItem.separatorItem()) } + menu.addItem(NSMenuItem(title: "Preferences...", action: #selector(AppDelegate.showPreferences), keyEquivalent: ",")) + + menu.addItem(NSMenuItem.separatorItem()) + menu.addItem(NSMenuItem(title: "Quit ZeroTier One", action: #selector(AppDelegate.quit), keyEquivalent: "q")) statusItem.menu = menu diff --git a/ZeroTier One/JoinNetworkViewController.xib b/ZeroTier One/JoinNetworkViewController.xib index 7a2ffe70..625f1a3e 100644 --- a/ZeroTier One/JoinNetworkViewController.xib +++ b/ZeroTier One/JoinNetworkViewController.xib @@ -1,7 +1,6 @@ - diff --git a/ZeroTier One/PreferencesViewController.swift b/ZeroTier One/PreferencesViewController.swift new file mode 100644 index 00000000..95d2d882 --- /dev/null +++ b/ZeroTier One/PreferencesViewController.swift @@ -0,0 +1,18 @@ +// +// PreferencesViewController.swift +// ZeroTier One +// +// Created by Grant Limberg on 6/23/16. +// Copyright © 2016 ZeroTier, Inc. All rights reserved. +// + +import Cocoa + +class PreferencesViewController: NSViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do view setup here. + } + +} diff --git a/ZeroTier One/PreferencesViewController.xib b/ZeroTier One/PreferencesViewController.xib new file mode 100644 index 00000000..2a80a43a --- /dev/null +++ b/ZeroTier One/PreferencesViewController.xib @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ZeroTier One/ShowNetworksViewController.xib b/ZeroTier One/ShowNetworksViewController.xib index 12f1ea3c..69120fc9 100644 --- a/ZeroTier One/ShowNetworksViewController.xib +++ b/ZeroTier One/ShowNetworksViewController.xib @@ -1,7 +1,6 @@ - -- cgit v1.2.3