mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-11-08 05:30:05 +01:00
♻️ Cleanup menu item generation (#168)
This commit is contained in:
@@ -61,13 +61,11 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
|||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
// Add services
|
// Add services
|
||||||
menu.addPhpConfigurationMenuItems()
|
menu.addRemainingMenuItems()
|
||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
// Add about & quit menu items
|
// Add about & quit menu items
|
||||||
menu.addItem(NSMenuItem(title: "mi_preferences".localized, action: #selector(openPrefs), keyEquivalent: ","))
|
menu.addCoreMenuItems()
|
||||||
menu.addItem(NSMenuItem(title: "mi_about".localized, action: #selector(openAbout), keyEquivalent: ""))
|
|
||||||
menu.addItem(NSMenuItem(title: "mi_quit".localized, action: #selector(terminateApp), keyEquivalent: "q"))
|
|
||||||
|
|
||||||
// Make sure every item can be interacted with
|
// Make sure every item can be interacted with
|
||||||
menu.items.forEach({ (item) in
|
menu.items.forEach({ (item) in
|
||||||
@@ -244,6 +242,10 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc func toggleXdebugMode(sender: XdebugMenuItem) {
|
||||||
|
Log.info("Switching Xdebug to mode: \(sender.mode)")
|
||||||
|
}
|
||||||
|
|
||||||
@objc func toggleExtension(sender: ExtensionMenuItem) {
|
@objc func toggleExtension(sender: ExtensionMenuItem) {
|
||||||
asyncExecution {
|
asyncExecution {
|
||||||
sender.phpExtension?.toggle()
|
sender.phpExtension?.toggle()
|
||||||
|
|||||||
@@ -45,14 +45,47 @@ class StatusMenu : NSMenu {
|
|||||||
self.addItem(NSMenuItem.separator())
|
self.addItem(NSMenuItem.separator())
|
||||||
}
|
}
|
||||||
|
|
||||||
func addPhpConfigurationMenuItems() {
|
func addRemainingMenuItems() {
|
||||||
// Configuration
|
self.addConfigurationMenuItems()
|
||||||
|
|
||||||
|
self.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
|
self.addComposerMenuItems()
|
||||||
|
|
||||||
|
if (PhpEnv.shared.isBusy) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
self.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
|
self.addStatsMenuItem()
|
||||||
|
|
||||||
|
self.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
|
self.addExtensionsMenuItems()
|
||||||
|
|
||||||
|
self.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
|
self.addXdebugMenuItem()
|
||||||
|
|
||||||
|
self.addFirstAidAndServicesMenuItems()
|
||||||
|
}
|
||||||
|
|
||||||
|
func addCoreMenuItems() {
|
||||||
|
self.addItem(NSMenuItem(title: "mi_preferences".localized, action: #selector(MainMenu.openPrefs), keyEquivalent: ","))
|
||||||
|
self.addItem(NSMenuItem(title: "mi_about".localized, action: #selector(MainMenu.openAbout), keyEquivalent: ""))
|
||||||
|
self.addItem(NSMenuItem(title: "mi_quit".localized, action: #selector(MainMenu.terminateApp), keyEquivalent: "q"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Remaining Menu Items
|
||||||
|
|
||||||
|
func addConfigurationMenuItems() {
|
||||||
self.addItem(HeaderView.asMenuItem(text: "mi_configuration".localized))
|
self.addItem(HeaderView.asMenuItem(text: "mi_configuration".localized))
|
||||||
self.addItem(NSMenuItem(title: "mi_php_config".localized, action: #selector(MainMenu.openActiveConfigFolder), keyEquivalent: "c"))
|
self.addItem(NSMenuItem(title: "mi_php_config".localized, action: #selector(MainMenu.openActiveConfigFolder), keyEquivalent: "c"))
|
||||||
self.addItem(NSMenuItem(title: "mi_phpinfo".localized, action: #selector(MainMenu.openPhpInfo), keyEquivalent: "i"))
|
self.addItem(NSMenuItem(title: "mi_phpinfo".localized, action: #selector(MainMenu.openPhpInfo), keyEquivalent: "i"))
|
||||||
|
}
|
||||||
// Composer
|
|
||||||
self.addItem(NSMenuItem.separator())
|
func addComposerMenuItems() {
|
||||||
self.addItem(HeaderView.asMenuItem(text: "mi_composer".localized))
|
self.addItem(HeaderView.asMenuItem(text: "mi_composer".localized))
|
||||||
self.addItem(NSMenuItem(title: "mi_global_composer".localized, action: #selector(MainMenu.openGlobalComposerFolder), keyEquivalent: "g"))
|
self.addItem(NSMenuItem(title: "mi_global_composer".localized, action: #selector(MainMenu.openGlobalComposerFolder), keyEquivalent: "g"))
|
||||||
|
|
||||||
@@ -60,23 +93,19 @@ class StatusMenu : NSMenu {
|
|||||||
composerMenuItem.keyEquivalentModifierMask = .shift
|
composerMenuItem.keyEquivalentModifierMask = .shift
|
||||||
|
|
||||||
self.addItem(composerMenuItem)
|
self.addItem(composerMenuItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
func addStatsMenuItem() {
|
||||||
|
guard let stats = PhpEnv.phpInstall.limits else { return }
|
||||||
|
|
||||||
if (PhpEnv.shared.isBusy) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
let stats = PhpEnv.phpInstall.limits
|
|
||||||
|
|
||||||
// Stats
|
|
||||||
self.addItem(NSMenuItem.separator())
|
|
||||||
self.addItem(StatsView.asMenuItem(
|
self.addItem(StatsView.asMenuItem(
|
||||||
memory: stats!.memory_limit,
|
memory: stats.memory_limit,
|
||||||
post: stats!.post_max_size,
|
post: stats.post_max_size,
|
||||||
upload: stats!.upload_max_filesize)
|
upload: stats.upload_max_filesize)
|
||||||
)
|
)
|
||||||
|
}
|
||||||
// Extensions
|
|
||||||
self.addItem(NSMenuItem.separator())
|
func addExtensionsMenuItems() {
|
||||||
self.addItem(HeaderView.asMenuItem(text: "mi_detected_extensions".localized))
|
self.addItem(HeaderView.asMenuItem(text: "mi_detected_extensions".localized))
|
||||||
|
|
||||||
if (PhpEnv.phpInstall.extensions.count == 0) {
|
if (PhpEnv.phpInstall.extensions.count == 0) {
|
||||||
@@ -88,27 +117,29 @@ class StatusMenu : NSMenu {
|
|||||||
self.addExtensionItem(phpExtension, shortcutKey)
|
self.addExtensionItem(phpExtension, shortcutKey)
|
||||||
shortcutKey += 1
|
shortcutKey += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
self.addItem(NSMenuItem.separator())
|
|
||||||
|
|
||||||
// Xdebug
|
|
||||||
if Xdebug.enabled {
|
|
||||||
// TODO: Ensure that the Xdebug mode switcher works
|
|
||||||
// self.addXdebugMenuItem()
|
|
||||||
}
|
|
||||||
|
|
||||||
// First Aid & Services
|
|
||||||
self.addFirstAidAndServicesMenuItems()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func addXdebugMenuItem() {
|
func addXdebugMenuItem() {
|
||||||
let xdebugSwitch = NSMenuItem(title: "mi_xdebug_mode".localized, action: nil, keyEquivalent: "")
|
if !Xdebug.enabled {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let xdebugSwitch = NSMenuItem(
|
||||||
|
title: "mi_xdebug_mode".localized,
|
||||||
|
action: nil,
|
||||||
|
keyEquivalent: ""
|
||||||
|
)
|
||||||
let xdebugModesMenu = NSMenu()
|
let xdebugModesMenu = NSMenu()
|
||||||
let xdebugMode = Xdebug.mode
|
let xdebugMode = Xdebug.mode
|
||||||
|
|
||||||
for mode in Xdebug.modes {
|
for mode in Xdebug.modes {
|
||||||
let item = NSMenuItem(title: mode, action: nil, keyEquivalent: "")
|
let item = XdebugMenuItem(
|
||||||
|
title: mode,
|
||||||
|
action: #selector(MainMenu.toggleXdebugMode(sender:)),
|
||||||
|
keyEquivalent: ""
|
||||||
|
)
|
||||||
item.state = xdebugMode == mode ? .on : .off
|
item.state = xdebugMode == mode ? .on : .off
|
||||||
|
item.mode = mode
|
||||||
xdebugModesMenu.addItem(item)
|
xdebugModesMenu.addItem(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,7 +193,7 @@ class StatusMenu : NSMenu {
|
|||||||
self.addItem(services)
|
self.addItem(services)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PRIVATE HELPERS
|
// MARK: Private Helpers
|
||||||
|
|
||||||
private func addSwitchToPhpMenuItems() {
|
private func addSwitchToPhpMenuItems() {
|
||||||
var shortcutKey = 1
|
var shortcutKey = 1
|
||||||
@@ -209,12 +240,16 @@ class StatusMenu : NSMenu {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - In order to store extra data in each item, NSMenuItem is subclassed
|
// MARK: - NSMenuItem subclasses
|
||||||
|
|
||||||
class PhpMenuItem: NSMenuItem {
|
class PhpMenuItem: NSMenuItem {
|
||||||
var version: String = ""
|
var version: String = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class XdebugMenuItem: NSMenuItem {
|
||||||
|
var mode: String = ""
|
||||||
|
}
|
||||||
|
|
||||||
class ExtensionMenuItem: NSMenuItem {
|
class ExtensionMenuItem: NSMenuItem {
|
||||||
var phpExtension: PhpExtension? = nil
|
var phpExtension: PhpExtension? = nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user