mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-07 03:50:08 +02:00
♻️ Menu refactor
This commit is contained in:
@ -17,6 +17,7 @@
|
|||||||
C42295DD2358D02000E263B2 /* Command.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42295DC2358D02000E263B2 /* Command.swift */; };
|
C42295DD2358D02000E263B2 /* Command.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42295DC2358D02000E263B2 /* Command.swift */; };
|
||||||
C46FA23F246C358E00944F05 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46FA23E246C358E00944F05 /* StringExtension.swift */; };
|
C46FA23F246C358E00944F05 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46FA23E246C358E00944F05 /* StringExtension.swift */; };
|
||||||
C473319F2470923A009A0597 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; };
|
C473319F2470923A009A0597 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; };
|
||||||
|
C47331A2247093B7009A0597 /* StatusMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47331A1247093B7009A0597 /* StatusMenu.swift */; };
|
||||||
C476FF9822B0DD830098105B /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476FF9722B0DD830098105B /* Alert.swift */; };
|
C476FF9822B0DD830098105B /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476FF9722B0DD830098105B /* Alert.swift */; };
|
||||||
C4811D2422D70A4700B5F6B3 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2322D70A4700B5F6B3 /* App.swift */; };
|
C4811D2422D70A4700B5F6B3 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2322D70A4700B5F6B3 /* App.swift */; };
|
||||||
C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */; };
|
C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */; };
|
||||||
@ -39,6 +40,7 @@
|
|||||||
C42295DC2358D02000E263B2 /* Command.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Command.swift; sourceTree = "<group>"; };
|
C42295DC2358D02000E263B2 /* Command.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Command.swift; sourceTree = "<group>"; };
|
||||||
C46FA23E246C358E00944F05 /* StringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = "<group>"; };
|
C46FA23E246C358E00944F05 /* StringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = "<group>"; };
|
||||||
C473319E2470923A009A0597 /* Localizable.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = "<group>"; };
|
C473319E2470923A009A0597 /* Localizable.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = "<group>"; };
|
||||||
|
C47331A1247093B7009A0597 /* StatusMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusMenu.swift; sourceTree = "<group>"; };
|
||||||
C476FF9722B0DD830098105B /* Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.swift; sourceTree = "<group>"; };
|
C476FF9722B0DD830098105B /* Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.swift; sourceTree = "<group>"; };
|
||||||
C4811D2322D70A4700B5F6B3 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; };
|
C4811D2322D70A4700B5F6B3 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; };
|
||||||
C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenu.swift; sourceTree = "<group>"; };
|
C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenu.swift; sourceTree = "<group>"; };
|
||||||
@ -96,6 +98,7 @@
|
|||||||
C41E181722CB61EB0072CF09 /* Classes */ = {
|
C41E181722CB61EB0072CF09 /* Classes */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
C47331A0247093AC009A0597 /* Menu */,
|
||||||
C4811D2722D70D8E00B5F6B3 /* Commands */,
|
C4811D2722D70D8E00B5F6B3 /* Commands */,
|
||||||
C4811D2822D70D9C00B5F6B3 /* Helpers */,
|
C4811D2822D70D9C00B5F6B3 /* Helpers */,
|
||||||
);
|
);
|
||||||
@ -110,6 +113,14 @@
|
|||||||
path = "View Controllers";
|
path = "View Controllers";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
C47331A0247093AC009A0597 /* Menu */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
C47331A1247093B7009A0597 /* StatusMenu.swift */,
|
||||||
|
);
|
||||||
|
path = Menu;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
C4811D2622D70CEF00B5F6B3 /* Singletons */ = {
|
C4811D2622D70CEF00B5F6B3 /* Singletons */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -231,6 +242,7 @@
|
|||||||
C41C1B3722B0097F00E7CF16 /* AppDelegate.swift in Sources */,
|
C41C1B3722B0097F00E7CF16 /* AppDelegate.swift in Sources */,
|
||||||
C41C1B4B22B019FF00E7CF16 /* PhpVersion.swift in Sources */,
|
C41C1B4B22B019FF00E7CF16 /* PhpVersion.swift in Sources */,
|
||||||
C476FF9822B0DD830098105B /* Alert.swift in Sources */,
|
C476FF9822B0DD830098105B /* Alert.swift in Sources */,
|
||||||
|
C47331A2247093B7009A0597 /* StatusMenu.swift in Sources */,
|
||||||
C46FA23F246C358E00944F05 /* StringExtension.swift in Sources */,
|
C46FA23F246C358E00944F05 /* StringExtension.swift in Sources */,
|
||||||
C4EE188422D3386B00E126E5 /* Constants.swift in Sources */,
|
C4EE188422D3386B00E126E5 /* Constants.swift in Sources */,
|
||||||
);
|
);
|
||||||
|
88
phpmon/Classes/Menu/StatusMenu.swift
Normal file
88
phpmon/Classes/Menu/StatusMenu.swift
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
//
|
||||||
|
// MainMenuBuilder.swift
|
||||||
|
// PHP Monitor
|
||||||
|
//
|
||||||
|
// Created by Nico Verbruggen on 16/05/2020.
|
||||||
|
// Copyright © 2020 Nico Verbruggen. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Cocoa
|
||||||
|
|
||||||
|
class StatusMenu : NSMenu {
|
||||||
|
|
||||||
|
public func addPhpVersionMenuItems()
|
||||||
|
{
|
||||||
|
var string = "We are not sure what version of PHP you are running."
|
||||||
|
if (App.shared.currentVersion != nil) {
|
||||||
|
if (!App.shared.currentVersion!.error) {
|
||||||
|
string = "You are running PHP \(App.shared.currentVersion!.long)"
|
||||||
|
self.addItem(NSMenuItem(title: string, action: nil, keyEquivalent: ""))
|
||||||
|
} else {
|
||||||
|
// in case of an error show the error message
|
||||||
|
self.addItem(NSMenuItem(title: "Oof! It appears your PHP installation is broken...", action: nil, keyEquivalent: ""))
|
||||||
|
self.addItem(NSMenuItem(title: "Try running `php -v` in your terminal.", action: nil, keyEquivalent: ""))
|
||||||
|
self.addItem(NSMenuItem(title: "You could also try switching to another version.", action: nil, keyEquivalent: ""))
|
||||||
|
self.addItem(NSMenuItem(title: "Running `brew reinstall php` (or for the equivalent version) might help.", action: nil, keyEquivalent: ""))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func addPhpActionMenuItems()
|
||||||
|
{
|
||||||
|
if (App.shared.availablePhpVersions.count > 0 && !App.shared.busy) {
|
||||||
|
var shortcutKey = 1
|
||||||
|
for index in (0..<App.shared.availablePhpVersions.count).reversed() {
|
||||||
|
let version = App.shared.availablePhpVersions[index]
|
||||||
|
let action = #selector(MainMenu.switchToPhpVersion(sender:))
|
||||||
|
let menuItem = NSMenuItem(title: "Switch to PHP \(version)", action: (version == App.shared.currentVersion?.short) ? nil : action, keyEquivalent: "\(shortcutKey)")
|
||||||
|
menuItem.tag = index
|
||||||
|
shortcutKey = shortcutKey + 1
|
||||||
|
self.addItem(menuItem)
|
||||||
|
}
|
||||||
|
self.addItem(NSMenuItem.separator())
|
||||||
|
self.addItem(NSMenuItem(title: "Active Services", action: nil, keyEquivalent: ""))
|
||||||
|
self.addItem(NSMenuItem(title: "Restart php-fpm service", action: #selector(MainMenu.restartPhpFpm), keyEquivalent: "f"))
|
||||||
|
self.addItem(NSMenuItem(title: "Restart nginx service", action: #selector(MainMenu.restartNginx), keyEquivalent: "n"))
|
||||||
|
self.addItem(NSMenuItem(title: "Force load latest PHP version", action: #selector(MainMenu.forceRestartLatestPhp), keyEquivalent: ""))
|
||||||
|
}
|
||||||
|
if (App.shared.busy) {
|
||||||
|
self.addItem(NSMenuItem(title: "PHP Monitor is busy...", action: nil, keyEquivalent: ""))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func addPhpConfigurationMenuItems()
|
||||||
|
{
|
||||||
|
if (App.shared.currentVersion != nil) {
|
||||||
|
self.addItem(NSMenuItem(title: "Configuration", action: nil, keyEquivalent: ""))
|
||||||
|
self.addItem(NSMenuItem(title: "Valet configuration (.config/valet)", action: #selector(MainMenu.openValetConfigFolder), keyEquivalent: "v"))
|
||||||
|
self.addItem(NSMenuItem(title: "PHP configuration file (php.ini)", action: #selector(MainMenu.openActiveConfigFolder), keyEquivalent: "c"))
|
||||||
|
self.addItem(NSMenuItem.separator())
|
||||||
|
self.addItem(NSMenuItem(title: "Enabled Extensions", action: nil, keyEquivalent: ""))
|
||||||
|
self.addXdebugMenuItem()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func addXdebugMenuItem()
|
||||||
|
{
|
||||||
|
let xdebugFound = App.shared.currentVersion!.xdebugFound
|
||||||
|
if (xdebugFound) {
|
||||||
|
let xdebugOn = App.shared.currentVersion!.xdebugEnabled
|
||||||
|
let xdebugToggleMenuItem = NSMenuItem(
|
||||||
|
title: "Xdebug",
|
||||||
|
action: #selector(MainMenu.toggleXdebug), keyEquivalent: "x"
|
||||||
|
)
|
||||||
|
if (xdebugOn) {
|
||||||
|
xdebugToggleMenuItem.state = .on
|
||||||
|
}
|
||||||
|
self.addItem(xdebugToggleMenuItem)
|
||||||
|
} else {
|
||||||
|
let disabledItem = NSMenuItem(
|
||||||
|
title: "xdebug.so missing",
|
||||||
|
action: nil, keyEquivalent: "x"
|
||||||
|
)
|
||||||
|
disabledItem.isEnabled = false
|
||||||
|
self.addItem(disabledItem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -39,75 +39,31 @@ class MainMenu: NSObject, NSWindowDelegate {
|
|||||||
|
|
||||||
public func update() {
|
public func update() {
|
||||||
DispatchQueue.global(qos: .userInitiated).async { [unowned self] in
|
DispatchQueue.global(qos: .userInitiated).async { [unowned self] in
|
||||||
let menu = NSMenu()
|
// Create a new menu
|
||||||
var string = "We are not sure what version of PHP you are running."
|
let menu = StatusMenu()
|
||||||
if (App.shared.currentVersion != nil) {
|
|
||||||
if (!App.shared.currentVersion!.error) {
|
|
||||||
string = "You are running PHP \(App.shared.currentVersion!.long)"
|
|
||||||
menu.addItem(NSMenuItem(title: string, action: nil, keyEquivalent: ""))
|
|
||||||
} else {
|
|
||||||
// in case of an error show the error message
|
|
||||||
menu.addItem(NSMenuItem(title: "Oof! It appears your PHP installation is broken...", action: nil, keyEquivalent: ""))
|
|
||||||
menu.addItem(NSMenuItem(title: "Try running `php -v` in your terminal.", action: nil, keyEquivalent: ""))
|
|
||||||
menu.addItem(NSMenuItem(title: "You could also try switching to another version.", action: nil, keyEquivalent: ""))
|
|
||||||
menu.addItem(NSMenuItem(title: "Running `brew reinstall php` (or for the equivalent version) might help.", action: nil, keyEquivalent: ""))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Add the PHP versions (or error messages)
|
||||||
|
menu.addPhpVersionMenuItems()
|
||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
if (App.shared.availablePhpVersions.count > 0 && !App.shared.busy) {
|
|
||||||
var shortcutKey = 1
|
// Add the possible actions
|
||||||
for index in (0..<App.shared.availablePhpVersions.count).reversed() {
|
menu.addPhpActionMenuItems()
|
||||||
let version = App.shared.availablePhpVersions[index]
|
|
||||||
let action = #selector(self.switchToPhpVersion(sender:))
|
|
||||||
let menuItem = NSMenuItem(title: "Switch to PHP \(version)", action: (version == App.shared.currentVersion?.short) ? nil : action, keyEquivalent: "\(shortcutKey)")
|
|
||||||
menuItem.tag = index
|
|
||||||
shortcutKey = shortcutKey + 1
|
|
||||||
menu.addItem(menuItem)
|
|
||||||
}
|
|
||||||
menu.addItem(NSMenuItem.separator())
|
|
||||||
menu.addItem(NSMenuItem(title: "Active Services", action: nil, keyEquivalent: ""))
|
|
||||||
menu.addItem(NSMenuItem(title: "Restart php-fpm service", action: #selector(self.restartPhpFpm), keyEquivalent: "f"))
|
|
||||||
menu.addItem(NSMenuItem(title: "Restart nginx service", action: #selector(self.restartNginx), keyEquivalent: "n"))
|
|
||||||
menu.addItem(NSMenuItem(title: "Force load latest PHP version", action: #selector(self.forceRestartLatestPhp), keyEquivalent: ""))
|
|
||||||
menu.addItem(NSMenuItem.separator())
|
|
||||||
}
|
|
||||||
if (App.shared.busy) {
|
|
||||||
menu.addItem(NSMenuItem(title: "PHP Monitor is busy...", action: nil, keyEquivalent: ""))
|
|
||||||
menu.addItem(NSMenuItem.separator())
|
|
||||||
}
|
|
||||||
if (App.shared.currentVersion != nil) {
|
|
||||||
menu.addItem(NSMenuItem(title: "Configuration", action: nil, keyEquivalent: ""))
|
|
||||||
menu.addItem(NSMenuItem(title: "Valet configuration (.config/valet)", action: #selector(self.openValetConfigFolder), keyEquivalent: "v"))
|
|
||||||
menu.addItem(NSMenuItem(title: "PHP configuration file (php.ini)", action: #selector(self.openActiveConfigFolder), keyEquivalent: "c"))
|
|
||||||
menu.addItem(NSMenuItem.separator())
|
|
||||||
menu.addItem(NSMenuItem(title: "Enabled Extensions", action: nil, keyEquivalent: ""))
|
|
||||||
let xdebugFound = App.shared.currentVersion!.xdebugFound
|
|
||||||
if (xdebugFound) {
|
|
||||||
let xdebugOn = App.shared.currentVersion!.xdebugEnabled
|
|
||||||
let xdebugToggleMenuItem = NSMenuItem(
|
|
||||||
title: "Xdebug",
|
|
||||||
action: #selector(self.toggleXdebug), keyEquivalent: "x"
|
|
||||||
)
|
|
||||||
if (xdebugOn) {
|
|
||||||
xdebugToggleMenuItem.state = .on
|
|
||||||
}
|
|
||||||
menu.addItem(xdebugToggleMenuItem)
|
|
||||||
} else {
|
|
||||||
let disabledItem = NSMenuItem(
|
|
||||||
title: "xdebug.so missing",
|
|
||||||
action: nil, keyEquivalent: "x"
|
|
||||||
)
|
|
||||||
disabledItem.isEnabled = false
|
|
||||||
menu.addItem(disabledItem)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
|
// Add information about services & actions
|
||||||
|
menu.addPhpConfigurationMenuItems()
|
||||||
|
menu.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
|
// Add about & quit menu items
|
||||||
menu.addItem(NSMenuItem(title: "About PHP Monitor", action: #selector(self.openAbout), keyEquivalent: ""))
|
menu.addItem(NSMenuItem(title: "About PHP Monitor", action: #selector(self.openAbout), keyEquivalent: ""))
|
||||||
|
menu.addItem(NSMenuItem(title: "Quit PHP Monitor", action: #selector(self.terminateApp), keyEquivalent: "q"))
|
||||||
|
|
||||||
|
// Make sure every item can be interacted with
|
||||||
menu.items.forEach({ (item) in
|
menu.items.forEach({ (item) in
|
||||||
item.target = self
|
item.target = self
|
||||||
})
|
})
|
||||||
menu.addItem(NSMenuItem(title: "Quit PHP Monitor", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))
|
|
||||||
|
// Update the menu item on the main thread
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.statusItem.menu = menu
|
self.statusItem.menu = menu
|
||||||
}
|
}
|
||||||
@ -115,11 +71,7 @@ class MainMenu: NSObject, NSWindowDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func setStatusBarImage(version: String) {
|
func setStatusBarImage(version: String) {
|
||||||
self.setStatusBar(
|
self.setStatusBar(image: MenuBarImageGenerator.textToImage(text: version))
|
||||||
image: MenuBarImageGenerator.textToImage(
|
|
||||||
text: version
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func setStatusBar(image: NSImage) {
|
func setStatusBar(image: NSImage) {
|
||||||
@ -129,7 +81,7 @@ class MainMenu: NSObject, NSWindowDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Invokable Logic
|
// MARK: - Nicer callbacks
|
||||||
|
|
||||||
private func waitAndExecute(_ execute: @escaping () -> Void, _ completion: @escaping () -> Void = {})
|
private func waitAndExecute(_ execute: @escaping () -> Void, _ completion: @escaping () -> Void = {})
|
||||||
{
|
{
|
||||||
@ -147,7 +99,7 @@ class MainMenu: NSObject, NSWindowDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Callable via Obj-C (#selector)
|
// MARK: - Actions & Menu Manipulation
|
||||||
|
|
||||||
@objc func updatePhpVersionInStatusBar() {
|
@objc func updatePhpVersionInStatusBar() {
|
||||||
App.shared.currentVersion = PhpVersion()
|
App.shared.currentVersion = PhpVersion()
|
||||||
@ -245,6 +197,12 @@ class MainMenu: NSObject, NSWindowDelegate {
|
|||||||
NSApplication.shared.orderFrontStandardAboutPanel()
|
NSApplication.shared.orderFrontStandardAboutPanel()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func terminateApp() {
|
||||||
|
NSApplication.shared.terminate(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Cleanup when window closes
|
||||||
|
|
||||||
func windowWillClose(_ notification: Notification) {
|
func windowWillClose(_ notification: Notification) {
|
||||||
App.shared.windowController = nil
|
App.shared.windowController = nil
|
||||||
Shell.user.delegate = nil
|
Shell.user.delegate = nil
|
||||||
|
Reference in New Issue
Block a user