diff --git a/phpmon.xcodeproj/project.pbxproj b/phpmon.xcodeproj/project.pbxproj index 626ec9d..51838f7 100644 --- a/phpmon.xcodeproj/project.pbxproj +++ b/phpmon.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ C41C1B4D22B0215A00E7CF16 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C1B4C22B0215A00E7CF16 /* Actions.swift */; }; C476FF9822B0DD830098105B /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476FF9722B0DD830098105B /* Alert.swift */; }; C4811D2422D70A4700B5F6B3 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2322D70A4700B5F6B3 /* App.swift */; }; + C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */; }; C4D8016622B1584700C6DA1B /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; }; C4EE188422D3386B00E126E5 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EE188322D3386B00E126E5 /* Constants.swift */; }; C4F8C0A422D4F12C002EFE61 /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8C0A322D4F12C002EFE61 /* DateExtension.swift */; }; @@ -37,6 +38,7 @@ C41C1B4C22B0215A00E7CF16 /* Actions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Actions.swift; sourceTree = ""; }; C476FF9722B0DD830098105B /* Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.swift; sourceTree = ""; }; C4811D2322D70A4700B5F6B3 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = ""; }; + C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenu.swift; sourceTree = ""; }; C4D8016522B1584700C6DA1B /* Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Startup.swift; sourceTree = ""; }; C4EE188322D3386B00E126E5 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; C4F8C0A322D4F12C002EFE61 /* DateExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateExtension.swift; sourceTree = ""; }; @@ -110,6 +112,7 @@ children = ( C41C1B4622B009A400E7CF16 /* Shell.swift */, C4811D2322D70A4700B5F6B3 /* App.swift */, + C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */, ); path = Singletons; sourceTree = ""; @@ -218,6 +221,7 @@ C41C1B4D22B0215A00E7CF16 /* Actions.swift in Sources */, C4811D2422D70A4700B5F6B3 /* App.swift in Sources */, C41C1B4922B00A9800E7CF16 /* MenuBarImageGenerator.swift in Sources */, + C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */, C41C1B3922B0097F00E7CF16 /* LogViewController.swift in Sources */, C41C1B3722B0097F00E7CF16 /* AppDelegate.swift in Sources */, C41C1B4B22B019FF00E7CF16 /* PhpVersion.swift in Sources */, diff --git a/phpmon/AppDelegate.swift b/phpmon/AppDelegate.swift index bfb90c4..9493999 100644 --- a/phpmon/AppDelegate.swift +++ b/phpmon/AppDelegate.swift @@ -9,155 +9,30 @@ import Cocoa @NSApplicationMain -class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate { +class AppDelegate: NSObject, NSApplicationDelegate { // MARK: - Variables - let sharedShell : Shell let state : App - let statusItem = NSStatusBar.system.statusItem(withLength: 32) + let menu : MainMenu // MARK: - Initializer override init() { self.sharedShell = Shell.shared self.state = App.shared + self.menu = MainMenu.shared super.init() } // MARK: - Lifecycle func applicationDidFinishLaunching(_ aNotification: Notification) { - // Start with the icon - self.setStatusBar(image: NSImage(named: NSImage.Name("StatusBarIcon"))!) - // Perform environment boot checks - DispatchQueue.global(qos: .userInitiated).async { [unowned self] in - Startup.checkEnvironment() - App.shared.availablePhpVersions = Actions.detectPhpVersions() - self.updatePhpVersionInStatusBar() - // Schedule a request to fetch the PHP version every 60 seconds - DispatchQueue.main.async { - App.shared.timer = Timer.scheduledTimer( - timeInterval: 60, - target: self, - selector: #selector(self.updatePhpVersionInStatusBar), - userInfo: nil, - repeats: true - ) - } - } + self.menu.startup() } func applicationWillTerminate(_ aNotification: Notification) { // Insert code here to tear down your application } - - // MARK: - UI related - - func setStatusBarImage(version: String) { - self.setStatusBar(image: MenuBarImageGenerator.textToImage(width: 32.0, text: version)) - } - - func setStatusBar(image: NSImage) { - if let button = statusItem.button { - image.isTemplate = true - button.image = image - } - } - - func updateMenu() { - DispatchQueue.global(qos: .userInitiated).async { [unowned self] in - let menu = NSMenu() - var string = "We are not sure what version of PHP you are running." - if (App.shared.currentVersion != nil) { - string = "You are running PHP \(App.shared.currentVersion!.long)" - } - menu.addItem(NSMenuItem(title: string, action: nil, keyEquivalent: "")) - if (App.shared.currentVersion != nil) { - // Actions - menu.addItem(NSMenuItem.separator()) - menu.addItem(NSMenuItem(title: "PHP configuration file (php.ini)", action: #selector(self.openActiveConfigFolder), keyEquivalent: "")) - } - menu.addItem(NSMenuItem.separator()) - if (App.shared.availablePhpVersions.count > 0 && !App.shared.busy) { - var shortcutKey = 1 - for index in (0..CFBundlePackageType APPL CFBundleShortVersionString - 1.2 + 1.3 CFBundleVersion 10 LSApplicationCategoryType diff --git a/phpmon/Singletons/MainMenu.swift b/phpmon/Singletons/MainMenu.swift new file mode 100644 index 0000000..61e34e4 --- /dev/null +++ b/phpmon/Singletons/MainMenu.swift @@ -0,0 +1,156 @@ +// +// MainMenu.swift +// phpmon +// +// Created by Nico Verbruggen on 11/07/2019. +// Copyright © 2019 Nico Verbruggen. All rights reserved. +// + +import Cocoa + +class MainMenu: NSObject, NSWindowDelegate { + + static let shared = MainMenu() + + let statusItem = NSStatusBar.system.statusItem(withLength: 32) + + // MARK: - UI related + + public func startup() { + // Start with the icon + self.setStatusBar(image: NSImage(named: NSImage.Name("StatusBarIcon"))!) + // Perform environment boot checks + DispatchQueue.global(qos: .userInitiated).async { [unowned self] in + Startup.checkEnvironment() + App.shared.availablePhpVersions = Actions.detectPhpVersions() + self.updatePhpVersionInStatusBar() + // Schedule a request to fetch the PHP version every 60 seconds + DispatchQueue.main.async { + App.shared.timer = Timer.scheduledTimer( + timeInterval: 60, + target: self, + selector: #selector(self.updatePhpVersionInStatusBar), + userInfo: nil, + repeats: true + ) + } + } + } + + public func update() { + DispatchQueue.global(qos: .userInitiated).async { [unowned self] in + let menu = NSMenu() + var string = "We are not sure what version of PHP you are running." + if (App.shared.currentVersion != nil) { + string = "You are running PHP \(App.shared.currentVersion!.long)" + } + menu.addItem(NSMenuItem(title: string, action: nil, keyEquivalent: "")) + if (App.shared.currentVersion != nil) { + // Actions + menu.addItem(NSMenuItem.separator()) + menu.addItem(NSMenuItem(title: "PHP configuration file (php.ini)", action: #selector(self.openActiveConfigFolder), keyEquivalent: "")) + } + menu.addItem(NSMenuItem.separator()) + if (App.shared.availablePhpVersions.count > 0 && !App.shared.busy) { + var shortcutKey = 1 + for index in (0..