mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-07 12:00:09 +02:00
👌 Handle multiple modes w/ Xdebug menu item
This commit also fixes the width of the header items.
This commit is contained in:
@ -69,9 +69,4 @@ class PhpExtensionTest: XCTestCase {
|
|||||||
XCTAssertEqual(PhpExtension.from(filePath: destination.path).first!.enabled, false)
|
XCTAssertEqual(PhpExtension.from(filePath: destination.path).first!.enabled, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testCanRetrieveXdebugMode() throws {
|
|
||||||
let value = Command.execute(path: Paths.php, arguments: ["-r", "echo ini_get('xdebug.mode');"])
|
|
||||||
XCTAssertEqual(value, "coverage")
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,20 +11,23 @@ import Foundation
|
|||||||
class Xdebug {
|
class Xdebug {
|
||||||
|
|
||||||
public static var enabled: Bool {
|
public static var enabled: Bool {
|
||||||
return !self.mode.isEmpty
|
return PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
public static var mode: String {
|
public static var activeModes: [String] {
|
||||||
guard let file = PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") else {
|
guard let file = PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") else {
|
||||||
return ""
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
return file.get(for: "xdebug.mode") ?? ""
|
guard let value = file.get(for: "xdebug.mode") else {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
return value.components(separatedBy: ",").filter { self.modes.contains($0) }
|
||||||
}
|
}
|
||||||
|
|
||||||
public static var modes: [String] {
|
public static var modes: [String] {
|
||||||
return [
|
return [
|
||||||
"off",
|
|
||||||
"develop",
|
"develop",
|
||||||
"coverage",
|
"coverage",
|
||||||
"debug",
|
"debug",
|
||||||
|
@ -38,8 +38,6 @@ struct PhpFrameworks {
|
|||||||
"zendframework/zendframework": "Zend",
|
"zendframework/zendframework": "Zend",
|
||||||
"zendframework/zend-mvc": "Zend",
|
"zendframework/zend-mvc": "Zend",
|
||||||
"typo3/cms-core": "Typo3"
|
"typo3/cms-core": "Typo3"
|
||||||
|
|
||||||
// TODO (6.0): Handle these in v6.0
|
|
||||||
// "magento/*": "Magento",
|
// "magento/*": "Magento",
|
||||||
// "concrete5/*": "Concrete5",
|
// "concrete5/*": "Concrete5",
|
||||||
// "contao/*": "Contao",
|
// "contao/*": "Contao",
|
||||||
|
@ -13,12 +13,23 @@ class HeaderView: NSView, XibLoadable {
|
|||||||
|
|
||||||
@IBOutlet weak var textField: NSTextField!
|
@IBOutlet weak var textField: NSTextField!
|
||||||
|
|
||||||
static func asMenuItem(text: String) -> NSMenuItem {
|
static func asMenuItem(
|
||||||
let view = Self.createFromXib()
|
text: String,
|
||||||
view!.textField.stringValue = text.uppercased()
|
width: Int? = nil
|
||||||
|
) -> NSMenuItem {
|
||||||
|
let view = Self.createFromXib()!
|
||||||
|
|
||||||
|
view.autoresizingMask = [.width, .height]
|
||||||
|
|
||||||
|
view.textField.stringValue = text.uppercased()
|
||||||
|
view.textField.sizeToFit()
|
||||||
|
|
||||||
|
view.setFrameSize(CGSize(width: view.textField.frame.width + 40, height: view.frame.height))
|
||||||
|
|
||||||
let item = NSMenuItem()
|
let item = NSMenuItem()
|
||||||
item.view = view
|
item.view = view
|
||||||
item.target = self
|
item.target = self
|
||||||
|
|
||||||
return item
|
return item
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,6 +242,10 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc func disableAllXdebugModes() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
@objc func toggleXdebugMode(sender: XdebugMenuItem) {
|
@objc func toggleXdebugMode(sender: XdebugMenuItem) {
|
||||||
Log.info("Switching Xdebug to mode: \(sender.mode)")
|
Log.info("Switching Xdebug to mode: \(sender.mode)")
|
||||||
|
|
||||||
|
@ -151,7 +151,9 @@ class StatusMenu: NSMenu {
|
|||||||
keyEquivalent: ""
|
keyEquivalent: ""
|
||||||
)
|
)
|
||||||
let xdebugModesMenu = NSMenu()
|
let xdebugModesMenu = NSMenu()
|
||||||
let xdebugMode = Xdebug.mode
|
let activeModes = Xdebug.activeModes
|
||||||
|
|
||||||
|
xdebugModesMenu.addItem(HeaderView.asMenuItem(text: "Available Modes"))
|
||||||
|
|
||||||
for mode in Xdebug.modes {
|
for mode in Xdebug.modes {
|
||||||
let item = XdebugMenuItem(
|
let item = XdebugMenuItem(
|
||||||
@ -159,11 +161,19 @@ class StatusMenu: NSMenu {
|
|||||||
action: #selector(MainMenu.toggleXdebugMode(sender:)),
|
action: #selector(MainMenu.toggleXdebugMode(sender:)),
|
||||||
keyEquivalent: ""
|
keyEquivalent: ""
|
||||||
)
|
)
|
||||||
item.state = xdebugMode == mode ? .on : .off
|
|
||||||
|
item.state = activeModes.contains(mode) ? .on : .off
|
||||||
item.mode = mode
|
item.mode = mode
|
||||||
xdebugModesMenu.addItem(item)
|
xdebugModesMenu.addItem(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xdebugModesMenu.addItem(HeaderView.asMenuItem(text: "Actions"))
|
||||||
|
xdebugModesMenu.addItem(
|
||||||
|
withTitle: "Disable All",
|
||||||
|
action: #selector(MainMenu.disableAllXdebugModes),
|
||||||
|
keyEquivalent: ""
|
||||||
|
)
|
||||||
|
|
||||||
for item in xdebugModesMenu.items {
|
for item in xdebugModesMenu.items {
|
||||||
item.target = MainMenu.shared
|
item.target = MainMenu.shared
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
"mi_other" = "First Aid & Services";
|
"mi_other" = "First Aid & Services";
|
||||||
"mi_first_aid" = "First Aid";
|
"mi_first_aid" = "First Aid";
|
||||||
|
|
||||||
"mi_xdebug_mode" = "Switch Xdebug Mode";
|
"mi_xdebug_mode" = "Manage Xdebug";
|
||||||
|
|
||||||
"mi_composer" = "Composer";
|
"mi_composer" = "Composer";
|
||||||
"mi_valet_config" = "Locate Valet Folder (.config/valet)";
|
"mi_valet_config" = "Locate Valet Folder (.config/valet)";
|
||||||
|
Reference in New Issue
Block a user