summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ZeroTier One.xcodeproj/project.pbxproj8
-rw-r--r--ZeroTier One/AppDelegate.swift27
-rw-r--r--ZeroTier One/JoinNetworkViewController.xib1
-rw-r--r--ZeroTier One/PreferencesViewController.swift18
-rw-r--r--ZeroTier One/PreferencesViewController.xib19
-rw-r--r--ZeroTier One/ShowNetworksViewController.xib1
6 files changed, 72 insertions, 2 deletions
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 = "<group>"; };
932D472E1D1CD499004BCFE2 /* ZeroTierIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = ZeroTierIcon.icns; sourceTree = "<group>"; };
+ 932D47301D1CD861004BCFE2 /* PreferencesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesViewController.swift; sourceTree = "<group>"; };
+ 932D47311D1CD861004BCFE2 /* PreferencesViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PreferencesViewController.xib; sourceTree = "<group>"; };
9330F1341CEAB4C400687EC8 /* ServiceCom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceCom.swift; sourceTree = "<group>"; };
9330F1361CEBF87200687EC8 /* Network.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Network.swift; sourceTree = "<group>"; };
9330F13A1CF534E500687EC8 /* NetworkInfoCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkInfoCell.swift; sourceTree = "<group>"; };
@@ -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 = "<group>";
@@ -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 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10116" systemVersion="15F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
- <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10116"/>
</dependencies>
<objects>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10101" systemVersion="15E32" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10101"/>
+ </dependencies>
+ <objects>
+ <customObject id="-2" userLabel="File's Owner" customClass="PreferencesViewController" customModuleProvider="target">
+ <connections>
+ <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+ </connections>
+ </customObject>
+ <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+ <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+ <customView id="Hz6-mo-xeY">
+ <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ </customView>
+ </objects>
+</document>
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 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10116" systemVersion="15F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
- <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10116"/>
</dependencies>
<objects>