aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/UI/macOS/MainMenu.swift
diff options
context:
space:
mode:
Diffstat (limited to 'WireGuard/WireGuard/UI/macOS/MainMenu.swift')
-rw-r--r--WireGuard/WireGuard/UI/macOS/MainMenu.swift129
1 files changed, 129 insertions, 0 deletions
diff --git a/WireGuard/WireGuard/UI/macOS/MainMenu.swift b/WireGuard/WireGuard/UI/macOS/MainMenu.swift
new file mode 100644
index 0000000..72bba71
--- /dev/null
+++ b/WireGuard/WireGuard/UI/macOS/MainMenu.swift
@@ -0,0 +1,129 @@
+// SPDX-License-Identifier: MIT
+// Copyright © 2018 WireGuard LLC. All Rights Reserved.
+
+import Cocoa
+
+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())
+
+ let quitMenuItem = menu.addItem(withTitle: tr("macMenuQuit"),
+ action: #selector(AppDelegate.quit), keyEquivalent: "q")
+ quitMenuItem.target = NSApp.delegate
+
+ 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"))
+
+ menu.addItem(withTitle: tr("macMenuUndo"), action: #selector(UndoActionRespondable.undo(_:)), keyEquivalent:"z")
+ menu.addItem(withTitle: tr("macMenuRedo"), action: #selector(UndoActionRespondable.redo(_:)), keyEquivalent:"Z")
+
+ 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())
+
+ let fullScreenMenuItem = menu.addItem(withTitle: tr("macMenuFullScreen"), action: #selector(NSWindow.toggleFullScreen(_:)), keyEquivalent:"f")
+ fullScreenMenuItem.keyEquivalentModifierMask = [.command, .control]
+
+ return menu
+ }
+}
+
+@objc protocol UndoActionRespondable {
+ func undo(_ sender: AnyObject)
+ func redo(_ sender: AnyObject)
+}