summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrant Limberg <glimberg@gmail.com>2016-06-21 19:44:59 -0700
committerGrant Limberg <glimberg@gmail.com>2016-06-21 19:44:59 -0700
commit6d114b7480ed5a6356b8938a4ebf11a9d19adeec (patch)
treec8611eaea8c0f655f0044ca8ac3b5b60b1222d2f
parentc8f85ffec97206174dbffbf6290ebcdcf84355ac (diff)
downloadinfinitytier-6d114b7480ed5a6356b8938a4ebf11a9d19adeec.tar.gz
infinitytier-6d114b7480ed5a6356b8938a4ebf11a9d19adeec.zip
dynamically generate the menu so that networks are listed
can join/leave networks directly from the menu
-rw-r--r--ZeroTier One/AppDelegate.swift65
1 files changed, 57 insertions, 8 deletions
diff --git a/ZeroTier One/AppDelegate.swift b/ZeroTier One/AppDelegate.swift
index f0bd0437..dc7a3b9a 100644
--- a/ZeroTier One/AppDelegate.swift
+++ b/ZeroTier One/AppDelegate.swift
@@ -23,20 +23,15 @@ class AppDelegate: NSObject, NSApplicationDelegate {
let monitor = NetworkMonitor()
+ var networks = [Network]()
+
func applicationDidFinishLaunching(aNotification: NSNotification) {
let nc = NSNotificationCenter.defaultCenter()
nc.addObserver(self, selector: #selector(onNetworkListUpdated(_:)), name: networkUpdateKey, object: nil)
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
+ buildMenu()
joinNetworkPopover.contentViewController = JoinNetworkViewController(
nibName: "JoinNetworkViewController", bundle: nil)
@@ -98,6 +93,60 @@ class AppDelegate: NSObject, NSApplicationDelegate {
func onNetworkListUpdated(note: NSNotification) {
let netList = note.userInfo!["networks"] as! [Network]
(networkListPopover.contentViewController as! ShowNetworksViewController).setNetworks(netList)
+
+ self.networks = netList
+
+ buildMenu()
+ }
+
+ func buildMenu() {
+ 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())
+
+ if networks.count > 0 {
+ for net in networks {
+ let id = String(net.nwid, radix: 16)
+ let networkName = "\(id) (\(net.name))"
+
+ let item = NSMenuItem(title: networkName, action: #selector(AppDelegate.toggleNetwork(_:)), keyEquivalent: "")
+
+ if net.connected {
+ item.state = NSOnState
+ }
+ else {
+ item.state = NSOffState
+ }
+
+ item.representedObject = net
+
+ menu.addItem(item)
+ }
+
+ menu.addItem(NSMenuItem.separatorItem())
+ }
+
+ menu.addItem(NSMenuItem(title: "Quit ZeroTier One", action: #selector(AppDelegate.quit), keyEquivalent: "q"))
+
+ statusItem.menu = menu
+
+ }
+
+ func toggleNetwork(sender: NSMenuItem) {
+ NSLog("\(sender.title)")
+
+ let network = sender.representedObject as! Network
+
+ let id = String(network.nwid, radix: 16)
+
+ if network.connected {
+ ServiceCom.leaveNetwork(id)
+ }
+ else {
+ ServiceCom.joinNetwork(id)
+ }
}
}