mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-15 00:34:08 +09:00
feat: added a new option to the Speed widget that specifies what to show in the widget (#2186). This new option removes the old "Reverse order" option since the new one includes it.
This commit is contained in:
@@ -42,6 +42,7 @@ identifier_name:
|
|||||||
- _writeTS
|
- _writeTS
|
||||||
- LineChartHistory
|
- LineChartHistory
|
||||||
- SpeedPictogramColor
|
- SpeedPictogramColor
|
||||||
|
- SensorsWidgetValue
|
||||||
|
|
||||||
line_length: 200
|
line_length: 200
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ public class SpeedWidget: WidgetWrapper {
|
|||||||
private var iconColorState: String = "default"
|
private var iconColorState: String = "default"
|
||||||
private var valueAlignmentState: String = "right"
|
private var valueAlignmentState: String = "right"
|
||||||
private var modeState: String = "twoRows"
|
private var modeState: String = "twoRows"
|
||||||
private var reverseOrderState: Bool = false
|
|
||||||
private var iconAlignmentState: String = "left"
|
private var iconAlignmentState: String = "left"
|
||||||
|
private var displayValueState: String = "io"
|
||||||
|
|
||||||
private var downloadColorState: SColor = .secondBlue
|
private var downloadColorState: SColor = .secondBlue
|
||||||
private var uploadColorState: SColor = .secondRed
|
private var uploadColorState: SColor = .secondRed
|
||||||
@@ -37,6 +37,7 @@ public class SpeedWidget: WidgetWrapper {
|
|||||||
private var valueAlignmentView: NSPopUpButton? = nil
|
private var valueAlignmentView: NSPopUpButton? = nil
|
||||||
private var iconAlignmentView: NSPopUpButton? = nil
|
private var iconAlignmentView: NSPopUpButton? = nil
|
||||||
private var iconColorView: NSPopUpButton? = nil
|
private var iconColorView: NSPopUpButton? = nil
|
||||||
|
private var displayModeView: NSPopUpButton? = nil
|
||||||
|
|
||||||
private var downloadColor: (String) -> NSColor {{ state in
|
private var downloadColor: (String) -> NSColor {{ state in
|
||||||
if state == "none" { return .textColor }
|
if state == "none" { return .textColor }
|
||||||
@@ -76,6 +77,10 @@ public class SpeedWidget: WidgetWrapper {
|
|||||||
DataSizeBase(rawValue: Store.shared.string(key: "\(self.title)_base", defaultValue: "byte")) ?? .byte
|
DataSizeBase(rawValue: Store.shared.string(key: "\(self.title)_base", defaultValue: "byte")) ?? .byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var reverseOrderState: Bool {
|
||||||
|
self.displayValueState == "oi"
|
||||||
|
}
|
||||||
|
|
||||||
public init(title: String, config: NSDictionary?, preview: Bool = false) {
|
public init(title: String, config: NSDictionary?, preview: Bool = false) {
|
||||||
let widgetTitle: String = title
|
let widgetTitle: String = title
|
||||||
if config != nil {
|
if config != nil {
|
||||||
@@ -104,9 +109,9 @@ public class SpeedWidget: WidgetWrapper {
|
|||||||
self.uploadColorState = SColor.fromString(Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_uploadColor", defaultValue: self.uploadColorState.key))
|
self.uploadColorState = SColor.fromString(Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_uploadColor", defaultValue: self.uploadColorState.key))
|
||||||
self.valueAlignmentState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_valueAlignment", defaultValue: self.valueAlignmentState)
|
self.valueAlignmentState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_valueAlignment", defaultValue: self.valueAlignmentState)
|
||||||
self.modeState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_mode", defaultValue: self.modeState)
|
self.modeState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_mode", defaultValue: self.modeState)
|
||||||
self.reverseOrderState = Store.shared.bool(key: "\(self.title)_\(self.type.rawValue)_reverseOrder", defaultValue: self.reverseOrderState)
|
|
||||||
self.iconAlignmentState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_iconAlignment", defaultValue: self.iconAlignmentState)
|
self.iconAlignmentState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_iconAlignment", defaultValue: self.iconAlignmentState)
|
||||||
self.iconColorState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_iconColor", defaultValue: self.iconColorState)
|
self.iconColorState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_iconColor", defaultValue: self.iconColorState)
|
||||||
|
self.displayValueState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_displayValue", defaultValue: self.displayValueState)
|
||||||
}
|
}
|
||||||
|
|
||||||
if preview {
|
if preview {
|
||||||
@@ -140,7 +145,7 @@ public class SpeedWidget: WidgetWrapper {
|
|||||||
private func drawOneRow() -> CGFloat {
|
private func drawOneRow() -> CGFloat {
|
||||||
var width: CGFloat = Constants.Widget.margin.x
|
var width: CGFloat = Constants.Widget.margin.x
|
||||||
|
|
||||||
if self.reverseOrderState {
|
if self.displayValueState.first == "i" {
|
||||||
width = self.drawRowItem(
|
width = self.drawRowItem(
|
||||||
initWidth: width,
|
initWidth: width,
|
||||||
symbol: self.symbols[1],
|
symbol: self.symbols[1],
|
||||||
@@ -148,14 +153,6 @@ public class SpeedWidget: WidgetWrapper {
|
|||||||
value: self.downloadValue,
|
value: self.downloadValue,
|
||||||
valueColor: self.downloadColor(self.valueColorState)
|
valueColor: self.downloadColor(self.valueColorState)
|
||||||
)
|
)
|
||||||
width += 4
|
|
||||||
width = self.drawRowItem(
|
|
||||||
initWidth: width,
|
|
||||||
symbol: self.symbols[0],
|
|
||||||
iconColor: self.uploadColor(self.iconColorState),
|
|
||||||
value: self.uploadValue,
|
|
||||||
valueColor: self.uploadColor(self.valueColorState)
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
width = self.drawRowItem(
|
width = self.drawRowItem(
|
||||||
initWidth: width,
|
initWidth: width,
|
||||||
@@ -164,14 +161,27 @@ public class SpeedWidget: WidgetWrapper {
|
|||||||
value: self.uploadValue,
|
value: self.uploadValue,
|
||||||
valueColor: self.uploadColor(self.valueColorState)
|
valueColor: self.uploadColor(self.valueColorState)
|
||||||
)
|
)
|
||||||
width += 4
|
}
|
||||||
width = self.drawRowItem(
|
|
||||||
initWidth: width,
|
if self.displayValueState.count > 1 {
|
||||||
symbol: self.symbols[1],
|
width += Constants.Widget.spacing*3
|
||||||
iconColor: self.downloadColor(self.iconColorState),
|
if self.displayValueState.last == "i" {
|
||||||
value: self.downloadValue,
|
width = self.drawRowItem(
|
||||||
valueColor: self.downloadColor(self.valueColorState)
|
initWidth: width,
|
||||||
)
|
symbol: self.symbols[1],
|
||||||
|
iconColor: self.downloadColor(self.iconColorState),
|
||||||
|
value: self.downloadValue,
|
||||||
|
valueColor: self.downloadColor(self.valueColorState)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
width = self.drawRowItem(
|
||||||
|
initWidth: width,
|
||||||
|
symbol: self.symbols[0],
|
||||||
|
iconColor: self.uploadColor(self.iconColorState),
|
||||||
|
value: self.uploadValue,
|
||||||
|
valueColor: self.uploadColor(self.valueColorState)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return width + Constants.Widget.margin.x
|
return width + Constants.Widget.margin.x
|
||||||
@@ -498,16 +508,21 @@ public class SpeedWidget: WidgetWrapper {
|
|||||||
valueColor.isEnabled = self.valueState
|
valueColor.isEnabled = self.valueState
|
||||||
self.valueColorView = valueColor
|
self.valueColorView = valueColor
|
||||||
|
|
||||||
|
let displayMode = selectView(
|
||||||
|
action: #selector(self.changeDisplayMode),
|
||||||
|
items: SensorsWidgetMode.filter({ $0.key == "oneRow" || $0.key == "twoRows"}),
|
||||||
|
selected: self.modeState
|
||||||
|
)
|
||||||
|
displayMode.isEnabled = self.displayValueState.count > 1
|
||||||
|
self.displayModeView = displayMode
|
||||||
|
|
||||||
view.addArrangedSubview(PreferencesSection([
|
view.addArrangedSubview(PreferencesSection([
|
||||||
PreferencesRow(localizedString("Display mode"), component: selectView(
|
PreferencesRow(localizedString("Value"), component: selectView(
|
||||||
action: #selector(self.changeDisplayMode),
|
action: #selector(self.changeDisplayValue),
|
||||||
items: SensorsWidgetMode.filter({ $0.key == "oneRow" || $0.key == "twoRows"}),
|
items: SensorsWidgetValue,
|
||||||
selected: self.modeState
|
selected: self.displayValueState
|
||||||
)),
|
)),
|
||||||
PreferencesRow(localizedString("Reverse order"), component: switchView(
|
PreferencesRow(localizedString("Display mode"), component: displayMode)
|
||||||
action: #selector(self.toggleReverseOrder),
|
|
||||||
state: self.reverseOrderState
|
|
||||||
))
|
|
||||||
]))
|
]))
|
||||||
|
|
||||||
view.addArrangedSubview(PreferencesSection([
|
view.addArrangedSubview(PreferencesSection([
|
||||||
@@ -553,6 +568,23 @@ public class SpeedWidget: WidgetWrapper {
|
|||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc private func changeDisplayValue(_ sender: NSMenuItem) {
|
||||||
|
guard let key = sender.representedObject as? String else { return }
|
||||||
|
self.displayValueState = key
|
||||||
|
|
||||||
|
if key.count == 1 {
|
||||||
|
if self.modeState != "oneRow" {
|
||||||
|
self.modeState = "oneRow"
|
||||||
|
Store.shared.set(key: "\(self.title)_\(self.type.rawValue)_mode", value: self.modeState)
|
||||||
|
}
|
||||||
|
self.displayModeView?.selectItem(at: 0)
|
||||||
|
}
|
||||||
|
self.displayModeView?.isEnabled = key.count > 1
|
||||||
|
|
||||||
|
Store.shared.set(key: "\(self.title)_\(self.type.rawValue)_displayValue", value: key)
|
||||||
|
self.display()
|
||||||
|
}
|
||||||
|
|
||||||
@objc private func changeDisplayMode(_ sender: NSMenuItem) {
|
@objc private func changeDisplayMode(_ sender: NSMenuItem) {
|
||||||
guard let key = sender.representedObject as? String else { return }
|
guard let key = sender.representedObject as? String else { return }
|
||||||
self.modeState = key
|
self.modeState = key
|
||||||
@@ -560,12 +592,6 @@ public class SpeedWidget: WidgetWrapper {
|
|||||||
self.display()
|
self.display()
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func toggleReverseOrder(_ sender: NSControl) {
|
|
||||||
self.reverseOrderState = controlState(sender)
|
|
||||||
Store.shared.set(key: "\(self.title)_\(self.type.rawValue)_reverseOrder", value: self.reverseOrderState)
|
|
||||||
self.display()
|
|
||||||
}
|
|
||||||
|
|
||||||
@objc private func toggleValue(_ sender: NSControl) {
|
@objc private func toggleValue(_ sender: NSControl) {
|
||||||
self.valueState = controlState(sender)
|
self.valueState = controlState(sender)
|
||||||
|
|
||||||
|
|||||||
@@ -102,6 +102,14 @@ internal enum StackMode: String {
|
|||||||
case twoRows = "twoRows"
|
case twoRows = "twoRows"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal let SensorsWidgetValue: [KeyValue_t] = [
|
||||||
|
KeyValue_t(key: "io", value: "Input/Output"),
|
||||||
|
KeyValue_t(key: "oi", value: "Output/Input"),
|
||||||
|
KeyValue_t(key: "separator", value: "separator"),
|
||||||
|
KeyValue_t(key: "i", value: "Input"),
|
||||||
|
KeyValue_t(key: "o", value: "Output")
|
||||||
|
]
|
||||||
|
|
||||||
internal let SensorsWidgetMode: [KeyValue_t] = [
|
internal let SensorsWidgetMode: [KeyValue_t] = [
|
||||||
KeyValue_t(key: StackMode.auto.rawValue, value: "Automatic"),
|
KeyValue_t(key: StackMode.auto.rawValue, value: "Automatic"),
|
||||||
KeyValue_t(key: "separator", value: "separator"),
|
KeyValue_t(key: "separator", value: "separator"),
|
||||||
|
|||||||
Reference in New Issue
Block a user