diff --git a/Modules/Disk/notifications.swift b/Modules/Disk/notifications.swift index 12884062..90b235b9 100644 --- a/Modules/Disk/notifications.swift +++ b/Modules/Disk/notifications.swift @@ -14,24 +14,28 @@ import Kit class Notifications: NotificationsWrapper { private let utilizationID: String = "usage" - private var utilizationLevel: String = "" + + private var utilizationState: Bool = false + private var utilization: Int = 80 public init(_ module: ModuleType) { super.init(module, [self.utilizationID]) if Store.shared.exist(key: "\(self.module)_notificationLevel") { - let value = Store.shared.string(key: "\(self.module)_notificationLevel", defaultValue: self.utilizationLevel) - Store.shared.set(key: "\(self.module)_notifications_utilization", value: value) - Store.shared.remove("\(self.module)_notificationLevel") + let value = Store.shared.string(key: "\(self.module)_notifications_free", defaultValue: "") + if let v = Double(value) { + Store.shared.set(key: "\(self.module)_notifications_utilization_state", value: true) + Store.shared.set(key: "\(self.module)_notifications_utilization_value", value: Int(v*100)) + Store.shared.remove("\(self.module)_notificationLevel") + } } - self.utilizationLevel = Store.shared.string(key: "\(self.module)_notifications_utilization", defaultValue: self.utilizationLevel) + self.utilizationState = Store.shared.bool(key: "\(self.module)_notifications_utilization_state", defaultValue: self.utilizationState) + self.utilization = Store.shared.int(key: "\(self.module)_notifications_utilization_value", defaultValue: self.utilization) self.addArrangedSubview(PreferencesSection([ - PreferencesRow(localizedString("Usage"), component: selectView( - action: #selector(self.changeUsage), - items: notificationLevels, - selected: self.utilizationLevel + PreferencesRow(localizedString("Usage"), component: PreferencesSwitch( + action: self.toggleUtilization, state: self.utilizationState, with: StepperInput(self.utilization, callback: self.changeUtilization) )) ])) } @@ -43,15 +47,18 @@ class Notifications: NotificationsWrapper { internal func utilizationCallback(_ value: Double) { let title = localizedString("Disk utilization threshold") - if let threshold = Double(self.utilizationLevel) { + if self.utilizationState { let subtitle = localizedString("Disk utilization is", "\(Int((value)*100))%") - self.checkDouble(id: self.utilizationID, value: value, threshold: threshold, title: title, subtitle: subtitle) + self.checkDouble(id: self.utilizationID, value: value, threshold: Double(self.utilization)/100, title: title, subtitle: subtitle) } } - @objc private func changeUsage(_ sender: NSMenuItem) { - guard let key = sender.representedObject as? String else { return } - self.utilizationLevel = key.isEmpty ? "" : "\(Double(key) ?? 0)" - Store.shared.set(key: "\(self.module)_notifications_utilization", value: self.utilizationLevel) + @objc private func toggleUtilization(_ sender: NSControl) { + self.utilizationState = controlState(sender) + Store.shared.set(key: "\(self.module)_notifications_utilization_state", value: self.utilizationState) + } + @objc private func changeUtilization(_ newValue: Int) { + self.utilization = newValue + Store.shared.set(key: "\(self.module)_notifications_utilization_value", value: self.utilization) } } diff --git a/Modules/Net/popup.swift b/Modules/Net/popup.swift index 1489f348..327e544c 100644 --- a/Modules/Net/popup.swift +++ b/Modules/Net/popup.swift @@ -543,22 +543,11 @@ internal class Popup: PopupWrapper { items: Scale.allCases, selected: self.chartScale.key )), - PreferencesRow(localizedString("Scale value"), component: { - let view: NSStackView = NSStackView() - view.orientation = .horizontal - view.spacing = 2 - let valueField = StepperInput(self.chartFixedScale, range: NSRange(location: 1, length: 1023)) - valueField.callback = self.toggleFixedScale - valueField.widthAnchor.constraint(equalToConstant: 80).isActive = true - view.addArrangedSubview(NSView()) - view.addArrangedSubview(valueField) - view.addArrangedSubview(selectView( - action: #selector(self.toggleUploadScaleSize), - items: SizeUnit.allCases, - selected: self.chartFixedScaleSize.key - )) - return view - }()) + PreferencesRow(localizedString("Scale value"), component: StepperInput( + self.chartFixedScale, range: NSRange(location: 1, length: 1023), + unit: self.chartFixedScaleSize.key, units: SizeUnit.allCases, + callback: self.toggleFixedScale, unitCallback: self.toggleFixedScaleSize + )) ]) view.addArrangedSubview(self.chartPrefSection!) self.chartPrefSection?.toggleVisibility(2, newState: self.chartScale == .fixed) @@ -639,12 +628,10 @@ internal class Popup: PopupWrapper { self.chart?.setScale(self.chartScale, Double(self.chartFixedScaleSize.toBytes(newValue))) Store.shared.set(key: "\(self.title)_chartFixedScale", value: newValue) } - @objc private func toggleUploadScaleSize(_ sender: NSMenuItem) { - guard let key = sender.representedObject as? String, - let value = SizeUnit.allCases.first(where: { $0.key == key }) else { return } - self.chartFixedScaleSize = value - self.chart?.setScale(self.chartScale, Double(self.chartFixedScaleSize.toBytes(self.chartFixedScale))) - Store.shared.set(key: "\(self.title)_chartFixedScaleSize", value: key) + private func toggleFixedScaleSize(_ newValue: KeyValue_p) { + guard let newUnit = newValue as? SizeUnit else { return } + self.chartFixedScaleSize = newUnit + Store.shared.set(key: "\(self.title)_chartFixedScaleSize", value: self.chartFixedScaleSize.key) self.display() } diff --git a/Modules/Net/settings.swift b/Modules/Net/settings.swift index 27af1ac4..7a636d4b 100644 --- a/Modules/Net/settings.swift +++ b/Modules/Net/settings.swift @@ -146,26 +146,13 @@ internal class Settings: NSStackView, Settings_v, NSTextFieldDelegate { self.section = section self.widgetThresholdSection = PreferencesSection([ - PreferencesRow(localizedString("Widget activation threshold"), component: switchView( - action: #selector(self.toggleWidgetActivationThreshold), - state: self.widgetActivationThresholdState - )), - PreferencesRow(localizedString("Value"), component: { - let view: NSStackView = NSStackView() - view.orientation = .horizontal - view.spacing = 2 - let valueField = StepperInput(self.widgetActivationThreshold, range: NSRange(location: 1, length: 1023)) - valueField.callback = self.changeWidgetActivationThreshold - valueField.widthAnchor.constraint(equalToConstant: 80).isActive = true - view.addArrangedSubview(NSView()) - view.addArrangedSubview(valueField) - view.addArrangedSubview(selectView( - action: #selector(self.toggleWidgetActivationThresholdSize), - items: SizeUnit.allCases, - selected: self.widgetActivationThresholdSize.key - )) - return view - }()) + PreferencesRow(localizedString("Widget activation threshold"), component: PreferencesSwitch( + action: self.toggleWidgetActivationThreshold, state: self.widgetActivationThresholdState, with: StepperInput( + self.widgetActivationThreshold, range: NSRange(location: 1, length: 1023), + unit: self.widgetActivationThresholdSize.key, units: SizeUnit.allCases, + callback: self.changeWidgetActivationThreshold, unitCallback: self.toggleWidgetActivationThresholdSize + ) + )) ]) self.addArrangedSubview(self.widgetThresholdSection!) self.widgetThresholdSection?.toggleVisibility(1, newState: self.widgetActivationThresholdState) @@ -234,11 +221,10 @@ internal class Settings: NSStackView, Settings_v, NSTextFieldDelegate { self.widgetActivationThreshold = newValue Store.shared.set(key: "\(self.title)_widgetActivationThreshold", value: newValue) } - @objc private func toggleWidgetActivationThresholdSize(_ sender: NSMenuItem) { - guard let key = sender.representedObject as? String, - let value = SizeUnit.allCases.first(where: { $0.key == key }) else { return } - self.widgetActivationThresholdSize = value - Store.shared.set(key: "\(self.title)_widgetActivationThresholdSize", value: key) + private func toggleWidgetActivationThresholdSize(_ newValue: KeyValue_p) { + guard let newUnit = newValue as? SizeUnit else { return } + self.widgetActivationThresholdSize = newUnit + Store.shared.set(key: "\(self.title)_widgetActivationThresholdSize", value: self.widgetActivationThresholdSize.key) self.display() } diff --git a/Stats/Supporting Files/Info.plist b/Stats/Supporting Files/Info.plist index f6bb1730..e03ad877 100755 --- a/Stats/Supporting Files/Info.plist +++ b/Stats/Supporting Files/Info.plist @@ -17,7 +17,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 554 + 555 Description Simple macOS system monitor in your menu bar LSApplicationCategoryType