From 8ae2031ba5559776efe87ba4e0444897301ddbaa Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 19 Jun 2025 12:50:04 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8D=B1=20Add=20icons=20to=20main=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/NSMenuItemExtension.swift | 26 ++++++++++ phpmon/Domain/Menu/StatusMenu+Items.swift | 50 ++++++++++++------- 2 files changed, 59 insertions(+), 17 deletions(-) diff --git a/phpmon/Common/Extensions/NSMenuItemExtension.swift b/phpmon/Common/Extensions/NSMenuItemExtension.swift index 9a5461e..9c107b3 100644 --- a/phpmon/Common/Extensions/NSMenuItemExtension.swift +++ b/phpmon/Common/Extensions/NSMenuItemExtension.swift @@ -9,6 +9,24 @@ import Cocoa 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( title: String, action: Selector? = nil, @@ -26,12 +44,20 @@ extension NSMenuItem { keyEquivalent: String = "", keyModifier: NSEvent.ModifierFlags = [], toolTip: String? = nil, + systemImage: String? = nil, + customImage: String? = nil, submenu: [NSMenuItem], target: NSObject? = nil ) { self.init(title: title, action: nil, keyEquivalent: keyEquivalent) self.keyEquivalentModifierMask = keyModifier 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) } } diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 85b29b6..008da2d 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -78,11 +78,12 @@ extension StatusMenu { let action = #selector(MainMenu.switchToPhpVersion(sender:)) let brew = (shortVersion == PhpEnvironments.brewPhpAlias) ? "php" : "php@\(shortVersion)" + let isActive = (shortVersion == PhpEnvironments.phpInstall?.version.short) + let menuItem = PhpMenuItem( title: "\("mi_php_switch".localized) \(versionString) (\(brew))", - action: (shortVersion == PhpEnvironments.phpInstall?.version.short) - ? nil - : action, keyEquivalent: "\(shortcutKey)" + action: isActive ? nil : action, keyEquivalent: "\(shortcutKey)", + systemImage: isActive ? "checkmark.square.fill" : "square.dotted" ) menuItem.version = shortVersion @@ -110,12 +111,18 @@ extension StatusMenu { } @MainActor func addPreferencesMenuItems() { + addItems([ NSMenuItem.separator(), NSMenuItem(title: "mi_preferences".localized, - action: #selector(MainMenu.openPrefs), keyEquivalent: ","), + action: #selector(MainMenu.openPrefs), + keyEquivalent: ",", + systemImage: "gear" + ), 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), NSMenuItem(title: "mi_valet_config".localized, action: #selector(MainMenu.openValetConfigFolder), - keyEquivalent: "v"), + keyEquivalent: "v", + systemImage: "folder.badge.gearshape"), NSMenuItem(title: "mi_domain_list".localized, action: #selector(MainMenu.openDomainList), - keyEquivalent: "l"), + keyEquivalent: "l", + systemImage: "globe"), NSMenuItem.separator() ]) } @@ -151,19 +160,24 @@ extension StatusMenu { HeaderView.asMenuItem(text: "mi_configuration".localized), NSMenuItem(title: "mi_php_version_manager".localized, action: #selector(MainMenu.openPhpVersionManager), - keyEquivalent: "m"), + keyEquivalent: "m", + systemImage: "cpu.fill"), NSMenuItem(title: "mi_php_ext_manager".localized, action: #selector(MainMenu.openPhpExtensionManager), - keyEquivalent: "e"), + keyEquivalent: "e", + systemImage: "puzzlepiece.extension"), NSMenuItem(title: "mi_php_config".localized, action: #selector(MainMenu.openActiveConfigFolder), - keyEquivalent: "c"), + keyEquivalent: "c", + systemImage: "folder.badge.gearshape"), NSMenuItem(title: "mi_phpmon_config".localized, action: #selector(MainMenu.openPhpMonitorConfigurationFile), - keyEquivalent: "y"), + keyEquivalent: "y", + systemImage: "folder.badge.person.crop"), NSMenuItem(title: "mi_phpinfo".localized, action: #selector(MainMenu.openPhpInfo), - keyEquivalent: "i") + keyEquivalent: "i", + systemImage: "info.circle.fill") ]) } @@ -175,7 +189,8 @@ extension StatusMenu { NSMenuItem( title: "mi_global_composer".localized, action: #selector(MainMenu.openGlobalComposerFolder), - keyEquivalent: "g" + keyEquivalent: "g", + systemImage: "plus.rectangle.on.folder" ), NSMenuItem( title: "mi_update_global_composer".localized, @@ -183,7 +198,8 @@ extension StatusMenu { ? nil : #selector(MainMenu.updateGlobalComposerDependencies), keyEquivalent: "g", - keyModifier: [.shift] + keyModifier: [.shift], + systemImage: "arrow.down.to.line.square" ) ]) } @@ -243,7 +259,7 @@ extension StatusMenu { } @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.separator(), NSMenuItem(title: "mi_set_up_presets".localized, @@ -252,7 +268,7 @@ extension StatusMenu { } @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(), HeaderView.asMenuItem(text: "mi_apply_presets_title".localized) ] + PresetMenuItem.getAll() + [ @@ -303,7 +319,7 @@ extension StatusMenu { // MARK: - First Aid & Services @MainActor func addFirstAidAndServicesMenuItems() { - let services = NSMenuItem(title: "mi_other".localized) + let services = NSMenuItem(title: "mi_other".localized, systemImage: "cross.case") var items: [NSMenuItem] = [ // FIRST AID