mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-02-23 18:50:17 +00:00
dynamically generate the menu so that networks are listed
can join/leave networks directly from the menu
This commit is contained in:
parent
c8f85ffec9
commit
6d114b7480
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user