1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-08-07 12:00:09 +02:00

♻️ Cleanup menu item generation (#168)

This commit is contained in:
2022-05-02 18:24:44 +02:00
parent ef9e0fd916
commit 86b49812c3
2 changed files with 75 additions and 38 deletions

View File

@ -61,13 +61,11 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
menu.addItem(NSMenuItem.separator())
// Add services
menu.addPhpConfigurationMenuItems()
menu.addRemainingMenuItems()
menu.addItem(NSMenuItem.separator())
// Add about & quit menu items
menu.addItem(NSMenuItem(title: "mi_preferences".localized, action: #selector(openPrefs), keyEquivalent: ","))
menu.addItem(NSMenuItem(title: "mi_about".localized, action: #selector(openAbout), keyEquivalent: ""))
menu.addItem(NSMenuItem(title: "mi_quit".localized, action: #selector(terminateApp), keyEquivalent: "q"))
menu.addCoreMenuItems()
// Make sure every item can be interacted with
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) {
asyncExecution {
sender.phpExtension?.toggle()

View File

@ -45,14 +45,47 @@ class StatusMenu : NSMenu {
self.addItem(NSMenuItem.separator())
}
func addPhpConfigurationMenuItems() {
// Configuration
func addRemainingMenuItems() {
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(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"))
// Composer
self.addItem(NSMenuItem.separator())
}
func addComposerMenuItems() {
self.addItem(HeaderView.asMenuItem(text: "mi_composer".localized))
self.addItem(NSMenuItem(title: "mi_global_composer".localized, action: #selector(MainMenu.openGlobalComposerFolder), keyEquivalent: "g"))
@ -60,23 +93,19 @@ class StatusMenu : NSMenu {
composerMenuItem.keyEquivalentModifierMask = .shift
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(
memory: stats!.memory_limit,
post: stats!.post_max_size,
upload: stats!.upload_max_filesize)
memory: stats.memory_limit,
post: stats.post_max_size,
upload: stats.upload_max_filesize)
)
// Extensions
self.addItem(NSMenuItem.separator())
}
func addExtensionsMenuItems() {
self.addItem(HeaderView.asMenuItem(text: "mi_detected_extensions".localized))
if (PhpEnv.phpInstall.extensions.count == 0) {
@ -88,27 +117,29 @@ class StatusMenu : NSMenu {
self.addExtensionItem(phpExtension, shortcutKey)
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() {
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 xdebugMode = Xdebug.mode
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.mode = mode
xdebugModesMenu.addItem(item)
}
@ -162,7 +193,7 @@ class StatusMenu : NSMenu {
self.addItem(services)
}
// PRIVATE HELPERS
// MARK: Private Helpers
private func addSwitchToPhpMenuItems() {
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 {
var version: String = ""
}
class XdebugMenuItem: NSMenuItem {
var mode: String = ""
}
class ExtensionMenuItem: NSMenuItem {
var phpExtension: PhpExtension? = nil
}