2019-05-06 13:38:57 +00:00
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
// Copyright © 2018 WireGuard LLC. All Rights Reserved.
|
|
|
|
|
|
|
|
import Cocoa
|
|
|
|
|
2019-05-07 11:27:31 +00:00
|
|
|
// swiftlint:disable colon
|
|
|
|
|
2019-05-06 13:38:57 +00:00
|
|
|
class MainMenu: NSMenu {
|
|
|
|
init() {
|
|
|
|
super.init(title: "")
|
|
|
|
addSubmenu(createApplicationMenu())
|
|
|
|
addSubmenu(createFileMenu())
|
|
|
|
addSubmenu(createEditMenu())
|
|
|
|
addSubmenu(createTunnelMenu())
|
|
|
|
addSubmenu(createWindowMenu())
|
|
|
|
}
|
|
|
|
|
|
|
|
required init(coder decoder: NSCoder) {
|
|
|
|
fatalError("init(coder:) has not been implemented")
|
|
|
|
}
|
|
|
|
|
|
|
|
private func addSubmenu(_ menu: NSMenu) {
|
|
|
|
let menuItem = self.addItem(withTitle: "", action: nil, keyEquivalent: "")
|
|
|
|
self.setSubmenu(menu, for: menuItem)
|
|
|
|
}
|
|
|
|
|
|
|
|
private func createApplicationMenu() -> NSMenu {
|
|
|
|
let menu = NSMenu()
|
|
|
|
|
|
|
|
let aboutMenuItem = menu.addItem(withTitle: tr("macMenuAbout"),
|
|
|
|
action: #selector(AppDelegate.aboutClicked), keyEquivalent: "")
|
|
|
|
aboutMenuItem.target = NSApp.delegate
|
|
|
|
|
|
|
|
menu.addItem(NSMenuItem.separator())
|
|
|
|
|
|
|
|
menu.addItem(withTitle: tr("macMenuViewLog"),
|
|
|
|
action: #selector(TunnelsListTableViewController.handleViewLogAction), keyEquivalent: "")
|
|
|
|
|
|
|
|
menu.addItem(NSMenuItem.separator())
|
|
|
|
|
|
|
|
let hideMenuItem = menu.addItem(withTitle: tr("macMenuHideApp"),
|
|
|
|
action: #selector(NSApplication.hide), keyEquivalent: "h")
|
|
|
|
hideMenuItem.target = NSApp
|
|
|
|
let hideOthersMenuItem = menu.addItem(withTitle: tr("macMenuHideOtherApps"),
|
|
|
|
action: #selector(NSApplication.hideOtherApplications), keyEquivalent: "h")
|
|
|
|
hideOthersMenuItem.keyEquivalentModifierMask = [.command, .option]
|
|
|
|
hideOthersMenuItem.target = NSApp
|
|
|
|
let showAllMenuItem = menu.addItem(withTitle: tr("macMenuShowAllApps"),
|
|
|
|
action: #selector(NSApplication.unhideAllApplications), keyEquivalent: "")
|
|
|
|
showAllMenuItem.target = NSApp
|
|
|
|
|
|
|
|
menu.addItem(NSMenuItem.separator())
|
|
|
|
|
2019-06-04 20:47:49 +00:00
|
|
|
menu.addItem(withTitle: tr("macMenuQuit"),
|
|
|
|
action: #selector(AppDelegate.confirmAndQuit), keyEquivalent: "q")
|
2019-05-06 13:38:57 +00:00
|
|
|
|
|
|
|
return menu
|
|
|
|
}
|
|
|
|
|
|
|
|
private func createFileMenu() -> NSMenu {
|
|
|
|
let menu = NSMenu(title: tr("macMenuFile"))
|
|
|
|
|
|
|
|
menu.addItem(withTitle: tr("macMenuAddEmptyTunnel"),
|
|
|
|
action: #selector(TunnelsListTableViewController.handleAddEmptyTunnelAction), keyEquivalent: "n")
|
|
|
|
menu.addItem(withTitle: tr("macMenuImportTunnels"),
|
|
|
|
action: #selector(TunnelsListTableViewController.handleImportTunnelAction), keyEquivalent: "o")
|
|
|
|
|
|
|
|
menu.addItem(NSMenuItem.separator())
|
|
|
|
|
|
|
|
menu.addItem(withTitle: tr("macMenuExportTunnels"),
|
|
|
|
action: #selector(TunnelsListTableViewController.handleExportTunnelsAction), keyEquivalent: "")
|
|
|
|
|
|
|
|
menu.addItem(NSMenuItem.separator())
|
|
|
|
|
|
|
|
menu.addItem(withTitle: tr("macMenuCloseWindow"), action: #selector(NSWindow.performClose(_:)), keyEquivalent:"w")
|
|
|
|
|
|
|
|
return menu
|
|
|
|
}
|
|
|
|
|
|
|
|
private func createEditMenu() -> NSMenu {
|
|
|
|
let menu = NSMenu(title: tr("macMenuEdit"))
|
|
|
|
|
2019-05-09 19:30:10 +00:00
|
|
|
menu.addItem(withTitle: "", action: #selector(UndoActionRespondable.undo(_:)), keyEquivalent:"z")
|
|
|
|
menu.addItem(withTitle: "", action: #selector(UndoActionRespondable.redo(_:)), keyEquivalent:"Z")
|
2019-05-06 13:38:57 +00:00
|
|
|
|
|
|
|
menu.addItem(NSMenuItem.separator())
|
|
|
|
|
|
|
|
menu.addItem(withTitle: tr("macMenuCut"), action: #selector(NSText.cut(_:)), keyEquivalent:"x")
|
|
|
|
menu.addItem(withTitle: tr("macMenuCopy"), action: #selector(NSText.copy(_:)), keyEquivalent:"c")
|
|
|
|
menu.addItem(withTitle: tr("macMenuPaste"), action: #selector(NSText.paste(_:)), keyEquivalent:"v")
|
|
|
|
|
|
|
|
menu.addItem(NSMenuItem.separator())
|
|
|
|
|
|
|
|
menu.addItem(withTitle: tr("macMenuSelectAll"), action: #selector(NSText.selectAll(_:)), keyEquivalent:"a")
|
|
|
|
|
|
|
|
return menu
|
|
|
|
}
|
|
|
|
|
|
|
|
private func createTunnelMenu() -> NSMenu {
|
|
|
|
let menu = NSMenu(title: tr("macMenuTunnel"))
|
|
|
|
|
|
|
|
menu.addItem(withTitle: tr("macMenuToggleStatus"), action: #selector(TunnelDetailTableViewController.handleToggleActiveStatusAction), keyEquivalent:"t")
|
|
|
|
|
|
|
|
menu.addItem(NSMenuItem.separator())
|
|
|
|
|
|
|
|
menu.addItem(withTitle: tr("macMenuEditTunnel"), action: #selector(TunnelDetailTableViewController.handleEditTunnelAction), keyEquivalent:"e")
|
|
|
|
menu.addItem(withTitle: tr("macMenuDeleteSelected"), action: #selector(TunnelsListTableViewController.handleRemoveTunnelAction), keyEquivalent: "")
|
|
|
|
|
|
|
|
return menu
|
|
|
|
}
|
|
|
|
|
|
|
|
private func createWindowMenu() -> NSMenu {
|
|
|
|
let menu = NSMenu(title: tr("macMenuWindow"))
|
|
|
|
|
|
|
|
menu.addItem(withTitle: tr("macMenuMinimize"), action: #selector(NSWindow.performMiniaturize(_:)), keyEquivalent:"m")
|
|
|
|
menu.addItem(withTitle: tr("macMenuZoom"), action: #selector(NSWindow.performZoom(_:)), keyEquivalent:"")
|
|
|
|
|
|
|
|
menu.addItem(NSMenuItem.separator())
|
|
|
|
|
2019-05-09 19:30:10 +00:00
|
|
|
let fullScreenMenuItem = menu.addItem(withTitle: "", action: #selector(NSWindow.toggleFullScreen(_:)), keyEquivalent:"f")
|
2019-05-06 13:38:57 +00:00
|
|
|
fullScreenMenuItem.keyEquivalentModifierMask = [.command, .control]
|
|
|
|
|
|
|
|
return menu
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@objc protocol UndoActionRespondable {
|
|
|
|
func undo(_ sender: AnyObject)
|
|
|
|
func redo(_ sender: AnyObject)
|
|
|
|
}
|