1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-08-06 19:40:08 +02:00

🍱 Add icons to main menu

This commit is contained in:
2025-06-19 12:50:04 +02:00
parent ec0ad13ad0
commit 8ae2031ba5
2 changed files with 59 additions and 17 deletions

View File

@ -9,6 +9,24 @@
import Cocoa import Cocoa
extension NSMenuItem { extension NSMenuItem {
convenience init(
title: String,
action: Selector? = nil,
keyEquivalent: String = "",
keyModifier: NSEvent.ModifierFlags = [],
systemImage: String? = nil,
customImage: String? = nil,
) {
self.init(title: title, action: action, keyEquivalent: keyEquivalent)
self.keyEquivalentModifierMask = keyModifier
if systemImage != nil {
self.image = NSImage(systemSymbolName: systemImage!, accessibilityDescription: "")
}
if customImage != nil {
self.image = NSImage(named: customImage!)
}
}
convenience init( convenience init(
title: String, title: String,
action: Selector? = nil, action: Selector? = nil,
@ -26,12 +44,20 @@ extension NSMenuItem {
keyEquivalent: String = "", keyEquivalent: String = "",
keyModifier: NSEvent.ModifierFlags = [], keyModifier: NSEvent.ModifierFlags = [],
toolTip: String? = nil, toolTip: String? = nil,
systemImage: String? = nil,
customImage: String? = nil,
submenu: [NSMenuItem], submenu: [NSMenuItem],
target: NSObject? = nil target: NSObject? = nil
) { ) {
self.init(title: title, action: nil, keyEquivalent: keyEquivalent) self.init(title: title, action: nil, keyEquivalent: keyEquivalent)
self.keyEquivalentModifierMask = keyModifier self.keyEquivalentModifierMask = keyModifier
self.toolTip = toolTip self.toolTip = toolTip
if systemImage != nil {
self.image = NSImage(systemSymbolName: systemImage!, accessibilityDescription: "")
}
if customImage != nil {
self.image = NSImage(named: customImage!)
}
self.submenu = NSMenu(items: submenu, target: target) self.submenu = NSMenu(items: submenu, target: target)
} }
} }

View File

@ -78,11 +78,12 @@ extension StatusMenu {
let action = #selector(MainMenu.switchToPhpVersion(sender:)) let action = #selector(MainMenu.switchToPhpVersion(sender:))
let brew = (shortVersion == PhpEnvironments.brewPhpAlias) ? "php" : "php@\(shortVersion)" let brew = (shortVersion == PhpEnvironments.brewPhpAlias) ? "php" : "php@\(shortVersion)"
let isActive = (shortVersion == PhpEnvironments.phpInstall?.version.short)
let menuItem = PhpMenuItem( let menuItem = PhpMenuItem(
title: "\("mi_php_switch".localized) \(versionString) (\(brew))", title: "\("mi_php_switch".localized) \(versionString) (\(brew))",
action: (shortVersion == PhpEnvironments.phpInstall?.version.short) action: isActive ? nil : action, keyEquivalent: "\(shortcutKey)",
? nil systemImage: isActive ? "checkmark.square.fill" : "square.dotted"
: action, keyEquivalent: "\(shortcutKey)"
) )
menuItem.version = shortVersion menuItem.version = shortVersion
@ -110,12 +111,18 @@ extension StatusMenu {
} }
@MainActor func addPreferencesMenuItems() { @MainActor func addPreferencesMenuItems() {
addItems([ addItems([
NSMenuItem.separator(), NSMenuItem.separator(),
NSMenuItem(title: "mi_preferences".localized, NSMenuItem(title: "mi_preferences".localized,
action: #selector(MainMenu.openPrefs), keyEquivalent: ","), action: #selector(MainMenu.openPrefs),
keyEquivalent: ",",
systemImage: "gear"
),
NSMenuItem(title: "mi_check_for_updates".localized, NSMenuItem(title: "mi_check_for_updates".localized,
action: #selector(MainMenu.checkForUpdates)) action: #selector(MainMenu.checkForUpdates),
systemImage: "arrow.clockwise.circle"
)
]) ])
} }
@ -136,10 +143,12 @@ extension StatusMenu {
HeaderView.asMenuItem(text: "mi_valet".localized), HeaderView.asMenuItem(text: "mi_valet".localized),
NSMenuItem(title: "mi_valet_config".localized, NSMenuItem(title: "mi_valet_config".localized,
action: #selector(MainMenu.openValetConfigFolder), action: #selector(MainMenu.openValetConfigFolder),
keyEquivalent: "v"), keyEquivalent: "v",
systemImage: "folder.badge.gearshape"),
NSMenuItem(title: "mi_domain_list".localized, NSMenuItem(title: "mi_domain_list".localized,
action: #selector(MainMenu.openDomainList), action: #selector(MainMenu.openDomainList),
keyEquivalent: "l"), keyEquivalent: "l",
systemImage: "globe"),
NSMenuItem.separator() NSMenuItem.separator()
]) ])
} }
@ -151,19 +160,24 @@ extension StatusMenu {
HeaderView.asMenuItem(text: "mi_configuration".localized), HeaderView.asMenuItem(text: "mi_configuration".localized),
NSMenuItem(title: "mi_php_version_manager".localized, NSMenuItem(title: "mi_php_version_manager".localized,
action: #selector(MainMenu.openPhpVersionManager), action: #selector(MainMenu.openPhpVersionManager),
keyEquivalent: "m"), keyEquivalent: "m",
systemImage: "cpu.fill"),
NSMenuItem(title: "mi_php_ext_manager".localized, NSMenuItem(title: "mi_php_ext_manager".localized,
action: #selector(MainMenu.openPhpExtensionManager), action: #selector(MainMenu.openPhpExtensionManager),
keyEquivalent: "e"), keyEquivalent: "e",
systemImage: "puzzlepiece.extension"),
NSMenuItem(title: "mi_php_config".localized, NSMenuItem(title: "mi_php_config".localized,
action: #selector(MainMenu.openActiveConfigFolder), action: #selector(MainMenu.openActiveConfigFolder),
keyEquivalent: "c"), keyEquivalent: "c",
systemImage: "folder.badge.gearshape"),
NSMenuItem(title: "mi_phpmon_config".localized, NSMenuItem(title: "mi_phpmon_config".localized,
action: #selector(MainMenu.openPhpMonitorConfigurationFile), action: #selector(MainMenu.openPhpMonitorConfigurationFile),
keyEquivalent: "y"), keyEquivalent: "y",
systemImage: "folder.badge.person.crop"),
NSMenuItem(title: "mi_phpinfo".localized, NSMenuItem(title: "mi_phpinfo".localized,
action: #selector(MainMenu.openPhpInfo), action: #selector(MainMenu.openPhpInfo),
keyEquivalent: "i") keyEquivalent: "i",
systemImage: "info.circle.fill")
]) ])
} }
@ -175,7 +189,8 @@ extension StatusMenu {
NSMenuItem( NSMenuItem(
title: "mi_global_composer".localized, title: "mi_global_composer".localized,
action: #selector(MainMenu.openGlobalComposerFolder), action: #selector(MainMenu.openGlobalComposerFolder),
keyEquivalent: "g" keyEquivalent: "g",
systemImage: "plus.rectangle.on.folder"
), ),
NSMenuItem( NSMenuItem(
title: "mi_update_global_composer".localized, title: "mi_update_global_composer".localized,
@ -183,7 +198,8 @@ extension StatusMenu {
? nil ? nil
: #selector(MainMenu.updateGlobalComposerDependencies), : #selector(MainMenu.updateGlobalComposerDependencies),
keyEquivalent: "g", keyEquivalent: "g",
keyModifier: [.shift] keyModifier: [.shift],
systemImage: "arrow.down.to.line.square"
) )
]) ])
} }
@ -243,7 +259,7 @@ extension StatusMenu {
} }
@MainActor private func addEmptyPresetHelp() { @MainActor private func addEmptyPresetHelp() {
addItem(NSMenuItem(title: "mi_presets_title".localized, submenu: [ addItem(NSMenuItem(title: "mi_presets_title".localized, systemImage: "puzzlepiece.fill", submenu: [
NSMenuItem(title: "mi_no_presets".localized), NSMenuItem(title: "mi_no_presets".localized),
NSMenuItem.separator(), NSMenuItem.separator(),
NSMenuItem(title: "mi_set_up_presets".localized, NSMenuItem(title: "mi_set_up_presets".localized,
@ -252,7 +268,7 @@ extension StatusMenu {
} }
@MainActor private func addLoadedPresets() { @MainActor private func addLoadedPresets() {
addItem(NSMenuItem(title: "mi_presets_title".localized, submenu: [ addItem(NSMenuItem(title: "mi_presets_title".localized, systemImage: "puzzlepiece.fill", submenu: [
NSMenuItem.separator(), NSMenuItem.separator(),
HeaderView.asMenuItem(text: "mi_apply_presets_title".localized) HeaderView.asMenuItem(text: "mi_apply_presets_title".localized)
] + PresetMenuItem.getAll() + [ ] + PresetMenuItem.getAll() + [
@ -303,7 +319,7 @@ extension StatusMenu {
// MARK: - First Aid & Services // MARK: - First Aid & Services
@MainActor func addFirstAidAndServicesMenuItems() { @MainActor func addFirstAidAndServicesMenuItems() {
let services = NSMenuItem(title: "mi_other".localized) let services = NSMenuItem(title: "mi_other".localized, systemImage: "cross.case")
var items: [NSMenuItem] = [ var items: [NSMenuItem] = [
// FIRST AID // FIRST AID