diff --git a/Kit/module/module.swift b/Kit/module/module.swift index f9997bd2..8b55de4c 100644 --- a/Kit/module/module.swift +++ b/Kit/module/module.swift @@ -124,7 +124,13 @@ open class Module: Module_p { debug("Module started without widget", log: self.log) } - self.settings = Settings(config: &self.config, widgets: &self.menuBar.widgets, enabled: self.enabled, moduleSettings: self.settingsView) + self.settings = Settings( + config: &self.config, + widgets: &self.menuBar.widgets, + enabled: self.enabled, + moduleSettings: self.settingsView, + popupSettings: self.popupView + ) self.settings?.toggleCallback = { [weak self] in self?.toggleEnabled() if self?.pauseState == true { diff --git a/Kit/module/popup.swift b/Kit/module/popup.swift index 3e7d364a..5957e069 100644 --- a/Kit/module/popup.swift +++ b/Kit/module/popup.swift @@ -13,6 +13,7 @@ import Cocoa public protocol Popup_p: NSView { var sizeCallback: ((NSSize) -> Void)? { get set } + func settings() -> NSView? } internal class PopupWindow: NSWindow, NSWindowDelegate { diff --git a/Kit/module/settings.swift b/Kit/module/settings.swift index cac4c7da..87b9536a 100644 --- a/Kit/module/settings.swift +++ b/Kit/module/settings.swift @@ -27,9 +27,11 @@ open class Settings: NSStackView, Settings_p { private var config: UnsafePointer private var widgets: [Widget] private var moduleSettings: Settings_v? + private var popupSettings: Popup_p? private var moduleSettingsContainer: NSStackView? private var widgetSettingsContainer: NSStackView? + private var popupSettingsContainer: NSStackView? private var enableControl: NSControl? @@ -42,6 +44,7 @@ open class Settings: NSStackView, Settings_p { return view }() private let noWidgetsView: EmptyView = EmptyView(msg: localizedString("No available widgets to configure")) + private let noPopupSettingsView: EmptyView = EmptyView(msg: localizedString("No options to configure for the popup in this module")) private var oneViewState: Bool { get { @@ -52,10 +55,11 @@ open class Settings: NSStackView, Settings_p { } } - init(config: UnsafePointer, widgets: UnsafeMutablePointer<[Widget]>, enabled: Bool, moduleSettings: Settings_v?) { + init(config: UnsafePointer, widgets: UnsafeMutablePointer<[Widget]>, enabled: Bool, moduleSettings: Settings_v?, popupSettings: Popup_p?) { self.config = config self.widgets = widgets.pointee self.moduleSettings = moduleSettings + self.popupSettings = popupSettings super.init(frame: NSRect(x: 0, y: 0, width: Constants.Settings.width, height: Constants.Settings.height)) @@ -193,8 +197,19 @@ open class Settings: NSStackView, Settings_p { return view }() + let popupTab: NSTabViewItem = NSTabViewItem() + popupTab.label = localizedString("Popup settings") + popupTab.view = { + let view = ScrollableStackView(frame: view.frame) + view.stackView.spacing = 0 + self.popupSettingsContainer = view.stackView + self.loadPopupSettings() + return view + }() + view.addTabViewItem(moduleTab) view.addTabViewItem(widgetTab) + view.addTabViewItem(popupTab) return view } @@ -275,6 +290,16 @@ open class Settings: NSStackView, Settings_p { } } + private func loadPopupSettings() { + self.popupSettingsContainer?.subviews.forEach{ $0.removeFromSuperview() } + + if let settingsView = self.popupSettings, let view = settingsView.settings() { + self.popupSettingsContainer?.addArrangedSubview(view) + } else { + self.popupSettingsContainer?.addArrangedSubview(self.noPopupSettingsView) + } + } + @objc private func toggleOneView(_ sender: NSControl) { var state: NSControl.StateValue? = nil if #available(OSX 10.15, *) { diff --git a/Modules/Battery/popup.swift b/Modules/Battery/popup.swift index af4ecf57..ae7de0b3 100644 --- a/Modules/Battery/popup.swift +++ b/Modules/Battery/popup.swift @@ -342,6 +342,12 @@ internal class Popup: NSView, Popup_p { self.processesInitialized = true }) } + + // MARK: - Settings + + public func settings() -> NSView? { + return nil + } } private class BatteryView: NSView { diff --git a/Modules/Bluetooth/popup.swift b/Modules/Bluetooth/popup.swift index a9e3ad8e..b659c500 100644 --- a/Modules/Bluetooth/popup.swift +++ b/Modules/Bluetooth/popup.swift @@ -61,6 +61,12 @@ internal class Popup: NSStackView, Popup_p { } } } + + // MARK: - Settings + + public func settings() -> NSView? { + return nil + } } internal class BLEView: NSStackView { diff --git a/Modules/CPU/popup.swift b/Modules/CPU/popup.swift index f258c45e..df1b6c45 100644 --- a/Modules/CPU/popup.swift +++ b/Modules/CPU/popup.swift @@ -368,4 +368,10 @@ internal class Popup: NSView, Popup_p { self.initializedFrequency = false }) } + + // MARK: - Settings + + public func settings() -> NSView? { + return nil + } } diff --git a/Modules/Disk/popup.swift b/Modules/Disk/popup.swift index 300a9771..377dc1c5 100644 --- a/Modules/Disk/popup.swift +++ b/Modules/Disk/popup.swift @@ -73,6 +73,12 @@ internal class Popup: NSStackView, Popup_p { } } } + + // MARK: - Settings + + public func settings() -> NSView? { + return nil + } } internal class DiskView: NSStackView { diff --git a/Modules/GPU/popup.swift b/Modules/GPU/popup.swift index d504f4cd..380ccf8e 100644 --- a/Modules/GPU/popup.swift +++ b/Modules/GPU/popup.swift @@ -53,6 +53,12 @@ internal class Popup: NSStackView, Popup_p { self.sizeCallback?(self.frame.size) } } + + // MARK: - Settings + + public func settings() -> NSView? { + return nil + } } private class GPUView: NSStackView { diff --git a/Modules/Net/popup.swift b/Modules/Net/popup.swift index 66cbfe48..0464a959 100644 --- a/Modules/Net/popup.swift +++ b/Modules/Net/popup.swift @@ -414,6 +414,12 @@ internal class Popup: NSStackView, Popup_p { self.connectivityField?.stringValue = localizedString("Unknown") } + // MARK: - Settings + + public func settings() -> NSView? { + return nil + } + // MARK: - helpers private func topValueView(_ view: NSView, title: String, color: NSColor) -> (NSView, NSTextField, NSTextField, ColorView) { diff --git a/Modules/RAM/popup.swift b/Modules/RAM/popup.swift index 3fc3fca8..5166047b 100644 --- a/Modules/RAM/popup.swift +++ b/Modules/RAM/popup.swift @@ -255,6 +255,12 @@ internal class Popup: NSView, Popup_p { self.processesInitialized = true }) } + + // MARK: - Settings + + public func settings() -> NSView? { + return nil + } } public class PressureView: NSView { diff --git a/Modules/Sensors/popup.swift b/Modules/Sensors/popup.swift index eca637b5..5f2965aa 100644 --- a/Modules/Sensors/popup.swift +++ b/Modules/Sensors/popup.swift @@ -132,6 +132,12 @@ internal class Popup: NSStackView, Popup_p { self.sizeCallback?(self.frame.size) } } + + // MARK: - Settings + + public func settings() -> NSView? { + return nil + } } // MARK: - Sensor view