diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 82d5544..73601a5 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -149,6 +149,8 @@ C473319F2470923A009A0597 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; C47331A2247093B7009A0597 /* StatusMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47331A1247093B7009A0597 /* StatusMenu.swift */; }; C474B00624C0E98C00066A22 /* LocalNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = C474B00524C0E98C00066A22 /* LocalNotification.swift */; }; + C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699EE28A2F2A30060FEB8 /* WarningManager.swift */; }; + C47699F128A2F3150060FEB8 /* Warning.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699F028A2F3150060FEB8 /* Warning.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 */; }; @@ -385,6 +387,8 @@ C473319E2470923A009A0597 /* Localizable.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = ""; }; C47331A1247093B7009A0597 /* StatusMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusMenu.swift; sourceTree = ""; }; C474B00524C0E98C00066A22 /* LocalNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalNotification.swift; sourceTree = ""; }; + C47699EE28A2F2A30060FEB8 /* WarningManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningManager.swift; sourceTree = ""; }; + C47699F028A2F3150060FEB8 /* Warning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Warning.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 = ""; }; @@ -680,6 +684,8 @@ C422DDAB28A2DAA100CEAC97 /* Warnings */ = { isa = PBXGroup; children = ( + C47699F028A2F3150060FEB8 /* Warning.swift */, + C47699EE28A2F2A30060FEB8 /* WarningManager.swift */, C422DDAC28A2DAC600CEAC97 /* WarningsWindowController.swift */, ); path = Warnings; @@ -1258,6 +1264,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */, C4ACA38F25C754C100060C66 /* PhpExtension.swift in Sources */, C4D8016622B1584700C6DA1B /* Startup.swift in Sources */, C42C49DB27C2806F0074ABAC /* MainMenu+FixMyValet.swift in Sources */, @@ -1324,6 +1331,7 @@ 5420395F2613607600FB00FA /* Preferences.swift in Sources */, C48D0C9325CC804200CC7490 /* XibLoadable.swift in Sources */, 54FCFD2A276C8AA4004CE748 /* CheckboxPreferenceView.swift in Sources */, + C47699F128A2F3150060FEB8 /* Warning.swift in Sources */, 54D9E0B227E4F51E003B9AD9 /* HotKeysController.swift in Sources */, C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */, C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */, diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 3f03a00..edd5c86 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -94,7 +94,6 @@ extension MainMenu { Log.info("Should present the first launch screen!") DispatchQueue.main.async { // OnboardingWindowController.show() - WarningsWindowController.show() } } diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 8b5d4f5..3019c84 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -174,6 +174,10 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate PreferencesWindowController.show() } + @objc func openWarnings() { + WarningsWindowController.show() + } + @objc func openDomainList() { DomainListVC.show() } diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 5da271e..f27976c 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -76,6 +76,10 @@ class StatusMenu: NSMenu { func addCoreMenuItems() { self.addItem(NSMenuItem.separator()) + if (WarningManager.hasWarnings()) { + self.addItem(NSMenuItem(title: "mi_warnings".localized(2), + action: #selector(MainMenu.openWarnings), keyEquivalent: "")) + } self.addItem(NSMenuItem(title: "mi_preferences".localized, action: #selector(MainMenu.openPrefs), keyEquivalent: ",")) self.addItem(NSMenuItem(title: "mi_check_for_updates".localized, diff --git a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift index e4f7eb3..0417bf9 100644 --- a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift +++ b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift @@ -13,12 +13,17 @@ struct WarningListView: View { List { VStack(alignment: .leading) { WarningView( - title: "warnings.arm_compatibility_title".localized, - description: "warnings.arm_compatibility.description".localized, + title: "warnings.arm_compatibility_title", + description: "warnings.arm_compatibility.description", documentationUrl: "https://phpmon.app/documentation/apple-silicon-transition" ) Divider() - }.frame(height: 90) + WarningView( + title: "warnings.helper_permissions_title", + description: "warnings.helper_permissions.description" + ) + Divider() + } } .navigationTitle("Warnings") diff --git a/phpmon/Domain/SwiftUI/Warning/WarningView.swift b/phpmon/Domain/SwiftUI/Warning/WarningView.swift index 7339934..efd98dd 100644 --- a/phpmon/Domain/SwiftUI/Warning/WarningView.swift +++ b/phpmon/Domain/SwiftUI/Warning/WarningView.swift @@ -15,24 +15,24 @@ struct WarningView: View { var body: some View { VStack(alignment: .leading) { - HStack(spacing: 5) { + HStack(spacing: 10) { Image(systemName: "exclamationmark.triangle.fill") .resizable() - .frame(width: 25, height: 25) - .padding() + .frame(width: 18, height: 18) .foregroundColor(Color.orange) + .padding() VStack(alignment: .leading, spacing: 5) { Text(title.localizedForSwiftUI) .fontWeight(.bold) Text(description.localizedForSwiftUI) - .font(.body) + .font(.system(size: 12)) } if documentationUrl != nil { Button("Learn More") { NSWorkspace.shared.open(URL(string: documentationUrl!)!) - } + }.padding() } - }.padding() + }.padding(5) } } } @@ -41,7 +41,8 @@ struct WarningView_Previews: PreviewProvider { static var previews: some View { WarningView( title: "warnings.helper_permissions_title", - description: "warnings.helper_permissions.description" + description: "warnings.helper_permissions.description", + documentationUrl: "https://nicoverbruggen.be" ) WarningView( title: "warnings.helper_permissions_title", diff --git a/phpmon/Domain/Warnings/Warning.swift b/phpmon/Domain/Warnings/Warning.swift new file mode 100644 index 0000000..ef629ef --- /dev/null +++ b/phpmon/Domain/Warnings/Warning.swift @@ -0,0 +1,13 @@ +// +// Warning.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 09/08/2022. +// Copyright © 2022 Nico Verbruggen. All rights reserved. +// + +import Foundation + +struct Warning { + +} diff --git a/phpmon/Domain/Warnings/WarningManager.swift b/phpmon/Domain/Warnings/WarningManager.swift new file mode 100644 index 0000000..179988c --- /dev/null +++ b/phpmon/Domain/Warnings/WarningManager.swift @@ -0,0 +1,15 @@ +// +// WarningManager.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 09/08/2022. +// Copyright © 2022 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class WarningManager { + + // TODO: Singleton initialization at launch + +} diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index d944dcc..d9e0a3a 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -55,6 +55,8 @@ "mi_detected_extensions" = "Detected Extensions"; "mi_no_extensions_detected" = "No additional extensions detected."; +"mi_warnings" = "⚠️ %i Warnings..."; + "mi_valet" = "Laravel Valet"; "mi_domain_list" = "View Domains List...";