diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 29a43cb..e127e47 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -25,6 +25,10 @@ 03BFF5282E312C3D007F96FA /* Startup+Timers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF5262E312C39007F96FA /* Startup+Timers.swift */; }; 03BFF5292E312C3D007F96FA /* Startup+Timers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF5262E312C39007F96FA /* Startup+Timers.swift */; }; 03BFF52A2E312C3D007F96FA /* Startup+Timers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF5262E312C39007F96FA /* Startup+Timers.swift */; }; + 03BFF52C2E313244007F96FA /* StatusMenu+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */; }; + 03BFF52D2E313244007F96FA /* StatusMenu+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */; }; + 03BFF52E2E313244007F96FA /* StatusMenu+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */; }; + 03BFF52F2E313244007F96FA /* StatusMenu+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */; }; 03E36FE728D9219000636F7F /* ActiveShell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E36FE628D9219000636F7F /* ActiveShell.swift */; }; 03E36FE828D9219000636F7F /* ActiveShell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E36FE628D9219000636F7F /* ActiveShell.swift */; }; 5420395926135DC100FB00FA /* PreferencesVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PreferencesVC.swift */; }; @@ -925,6 +929,7 @@ 033D459D2B0D513900070080 /* RemovePhpExtensionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemovePhpExtensionCommand.swift; sourceTree = ""; }; 033D45A22B0D531D00070080 /* PhpExtensionManagerView+Actions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PhpExtensionManagerView+Actions.swift"; sourceTree = ""; }; 03BFF5262E312C39007F96FA /* Startup+Timers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Startup+Timers.swift"; sourceTree = ""; }; + 03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StatusMenu+Driver.swift"; sourceTree = ""; }; 03E36FE628D9219000636F7F /* ActiveShell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveShell.swift; sourceTree = ""; }; 5420395826135DC100FB00FA /* PreferencesVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesVC.swift; sourceTree = ""; }; 5420395E2613607600FB00FA /* Preferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = ""; }; @@ -1855,6 +1860,7 @@ C4F361602836BFD9003598CC /* MainMenu+Actions.swift */, C47331A1247093B7009A0597 /* StatusMenu.swift */, C4C3643828AE4FCE00C0770E /* StatusMenu+Items.swift */, + 03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */, C4821C592C2DEDE200357A68 /* AppMenu.swift */, ); path = Menu; @@ -2648,6 +2654,7 @@ C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */, C41CA5ED2774F8EE00A2C80E /* DomainListVC+Actions.swift in Sources */, C412E5FC25700D5300A1FB67 /* HomebrewDecodable.swift in Sources */, + 03BFF52E2E313244007F96FA /* StatusMenu+Driver.swift in Sources */, 03E36FE728D9219000636F7F /* ActiveShell.swift in Sources */, C4D9ADBF277610E1007277F4 /* PhpSwitcher.swift in Sources */, C45E76142854A65300B4FE0C /* ServicesManager.swift in Sources */, @@ -2869,6 +2876,7 @@ C471E7FE28F9BACE0021E251 /* HomebrewDecodable.swift in Sources */, C4415E8F2B0287E90035F520 /* BrewFormulaeObservable.swift in Sources */, C471E7D828F9BA8F0021E251 /* FileSystemProtocol.swift in Sources */, + 03BFF52F2E313244007F96FA /* StatusMenu+Driver.swift in Sources */, C471E7F328F9BAC70021E251 /* PhpHelper.swift in Sources */, C46DC7A62C7B5BC900F19D17 /* Favorites.swift in Sources */, C471E7E728F9BAC20021E251 /* Constants.swift in Sources */, @@ -3098,6 +3106,7 @@ C471E80228F9BAD40021E251 /* PhpInstallation.swift in Sources */, C471E81028F9BAE80021E251 /* StringExtension.swift in Sources */, C48DDD1029C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, + 03BFF52C2E313244007F96FA /* StatusMenu+Driver.swift in Sources */, C471E7F828F9BACB0021E251 /* InternalSwitcher.swift in Sources */, C471E82328F9BB2E0021E251 /* ComposerJson.swift in Sources */, C471E82128F9BB2E0021E251 /* ProjectTypeDetection.swift in Sources */, @@ -3246,6 +3255,7 @@ C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */, C4C3643A28AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */, C42759682627662800093CAE /* NSMenuExtension.swift in Sources */, + 03BFF52D2E313244007F96FA /* StatusMenu+Driver.swift in Sources */, C4AFC4B429C4F43300BF4E0D /* HomebrewUpgradableTest.swift in Sources */, C4E2E84828FC1D93003B070C /* TestableConfigurationTest.swift in Sources */, C4D936CB27E3EE4A00BD69FE /* DomainListCellProtocol.swift in Sources */, diff --git a/phpmon/Assets.xcassets/ValetDriverIcon.imageset/Contents.json b/phpmon/Assets.xcassets/ValetDriverIcon.imageset/Contents.json new file mode 100644 index 0000000..39e31f6 --- /dev/null +++ b/phpmon/Assets.xcassets/ValetDriverIcon.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ValetDriverIcon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/phpmon/Assets.xcassets/ValetDriverIcon.imageset/ValetDriverIcon@2x.png b/phpmon/Assets.xcassets/ValetDriverIcon.imageset/ValetDriverIcon@2x.png new file mode 100644 index 0000000..e63a8ef Binary files /dev/null and b/phpmon/Assets.xcassets/ValetDriverIcon.imageset/ValetDriverIcon@2x.png differ diff --git a/phpmon/Domain/Menu/StatusMenu+Driver.swift b/phpmon/Domain/Menu/StatusMenu+Driver.swift new file mode 100644 index 0000000..d74e093 --- /dev/null +++ b/phpmon/Domain/Menu/StatusMenu+Driver.swift @@ -0,0 +1,28 @@ +// +// StatusMenu+Driver.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 23/07/2025. +// Copyright © 2025 Nico Verbruggen. All rights reserved. +// + +import Cocoa + +extension StatusMenu { + @MainActor func addLiteModeMenuItem() { + addItems([ + NSMenuItem.separator(), + NSMenuItem(title: "mi_lite_mode".localized, action: #selector(MainMenu.openLiteModeInfo)) + ]) + } + + @MainActor func addValetVersionItem() { + if let version = Valet.shared.version { + addItems([ + NSMenuItem.separator(), + NSMenuItem(title: "mi_driver".localized("Valet \(version.text)"), + action: nil, customImage: "ValetDriverIcon") + ]) + } + } +} diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 008da2d..2205f0a 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -103,13 +103,6 @@ extension StatusMenu { } } - @MainActor func addLiteModeMenuItem() { - addItems([ - NSMenuItem.separator(), - NSMenuItem(title: "mi_lite_mode".localized, action: #selector(MainMenu.openLiteModeInfo)) - ]) - } - @MainActor func addPreferencesMenuItems() { addItems([ @@ -331,13 +324,14 @@ extension StatusMenu { if Valet.installed { items.append(contentsOf: [ NSMenuItem.separator(), + HeaderView.asMenuItem(text: "Laravel Valet"), NSMenuItem(title: "mi_fix_my_valet".localized(PhpEnvironments.brewPhpAlias), action: #selector(MainMenu.fixMyValet), toolTip: "mi_fix_my_valet_tooltip".localized), NSMenuItem(title: "mi_fix_brew_permissions".localized(), action: #selector(MainMenu.fixHomebrewPermissions), toolTip: "mi_fix_brew_permissions_tooltip".localized), - NSMenuItem.separator(), + NSMenuItem.separator(), // SERVICES HeaderView.asMenuItem(text: "mi_services".localized), diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 85ffc6e..5dbe8c9 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -66,7 +66,11 @@ class StatusMenu: NSMenu { addPreferencesMenuItems() - if !Valet.installed { + if Valet.installed { + // Add the menu item displaying the driver information + addValetVersionItem() + } else { + // No driver, using Standalone Mode (internally: lite mode) addLiteModeMenuItem() } diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index cbca9cb..5ebd9f1 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -68,6 +68,7 @@ "mi_donate" = "Donate..."; "mi_check_for_updates" = "Check for Updates..."; "mi_lite_mode" = "About Standalone Mode..."; +"mi_driver" = "App Driver: %@"; "mi_quit" = "Quit PHP Monitor"; "mi_about" = "About PHP Monitor";