mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-14 00:04:15 +09:00
fix: added fastest fan to the popup view (#2056)
This commit is contained in:
@@ -20,12 +20,8 @@ private struct Sensor_t: KeyValue_p {
|
||||
var additional: Any?
|
||||
|
||||
var index: Int {
|
||||
get {
|
||||
Store.shared.int(key: "sensors_\(self.key)_index", defaultValue: -1)
|
||||
}
|
||||
set {
|
||||
Store.shared.set(key: "sensors_\(self.key)_index", value: newValue)
|
||||
}
|
||||
get { Store.shared.int(key: "sensors_\(self.key)_index", defaultValue: -1) }
|
||||
set { Store.shared.set(key: "sensors_\(self.key)_index", value: newValue) }
|
||||
}
|
||||
|
||||
init(key: String, value: String, name: String? = nil) {
|
||||
@@ -38,9 +34,7 @@ private struct Sensor_t: KeyValue_p {
|
||||
internal class Popup: PopupWrapper {
|
||||
private var list: [String: NSView] = [:]
|
||||
|
||||
private var unknownSensorsState: Bool {
|
||||
Store.shared.bool(key: "Sensors_unknown", defaultValue: false)
|
||||
}
|
||||
private var unknownSensorsState: Bool { Store.shared.bool(key: "Sensors_unknown", defaultValue: false) }
|
||||
private var fanValueState: FanValue = .percentage
|
||||
|
||||
private var sensors: [Sensor_p] = []
|
||||
@@ -78,8 +72,8 @@ internal class Popup: PopupWrapper {
|
||||
|
||||
internal func setup(_ values: [Sensor_p]? = nil, reload: Bool = false) {
|
||||
guard let values = reload ? self.sensors : values else { return }
|
||||
let fans = values.filter({ $0.type == .fan && !$0.isComputed && $0.popupState })
|
||||
var sensors = values.filter({ !($0.type == .fan && $0.isComputed) })
|
||||
let fans = values.filter({ $0.type == .fan && $0.popupState })
|
||||
var sensors = values
|
||||
if !self.unknownSensorsState {
|
||||
sensors = sensors.filter({ $0.group != .unknown })
|
||||
}
|
||||
@@ -100,15 +94,21 @@ internal class Popup: PopupWrapper {
|
||||
|
||||
fans.forEach { (f: Sensor_p) in
|
||||
if let fan = f as? Fan {
|
||||
let view = FanView(fan, width: self.frame.width) { [weak self] in
|
||||
let h = container.arrangedSubviews.map({ $0.bounds.height + container.spacing }).reduce(0, +) - container.spacing
|
||||
if container.frame.size.height != h && h >= 0 {
|
||||
container.setFrameSize(NSSize(width: container.frame.width, height: h))
|
||||
if f.isComputed {
|
||||
let sensor = SensorView(fan, width: self.frame.width, toggleable: false) {}
|
||||
self.list[fan.key] = sensor
|
||||
container.addArrangedSubview(sensor)
|
||||
} else {
|
||||
let view = FanView(fan, width: self.frame.width) { [weak self] in
|
||||
let h = container.arrangedSubviews.map({ $0.bounds.height + container.spacing }).reduce(0, +) - container.spacing
|
||||
if container.frame.size.height != h && h >= 0 {
|
||||
container.setFrameSize(NSSize(width: container.frame.width, height: h))
|
||||
}
|
||||
self?.recalculateHeight()
|
||||
}
|
||||
self?.recalculateHeight()
|
||||
self.list[fan.key] = view
|
||||
container.addArrangedSubview(view)
|
||||
}
|
||||
self.list[fan.key] = view
|
||||
container.addArrangedSubview(view)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,7 +158,7 @@ internal class Popup: PopupWrapper {
|
||||
self.addArrangedSubview(separatorView(localizedString(typ.rawValue), width: self.frame.width))
|
||||
groups.forEach { (group: SensorGroup) in
|
||||
filtered.filter{ $0.group == group }.forEach { (s: Sensor_p) in
|
||||
let sensor = SensorView(s, width: self.frame.width) { [weak self] in
|
||||
let sensor = SensorView(s, width: self.frame.width) { [weak self] in
|
||||
self?.recalculateHeight()
|
||||
}
|
||||
self.addArrangedSubview(sensor)
|
||||
@@ -280,7 +280,11 @@ internal class SensorView: NSStackView {
|
||||
|
||||
private var openned: Bool = false
|
||||
|
||||
public init(_ sensor: Sensor_p, width: CGFloat, callback: @escaping (() -> Void)) {
|
||||
private var fanValueState: FanValue {
|
||||
FanValue(rawValue: Store.shared.string(key: "Sensors_popup_fanValue", defaultValue: FanValue.percentage.rawValue)) ?? .percentage
|
||||
}
|
||||
|
||||
public init(_ sensor: Sensor_p, width: CGFloat, toggleable: Bool = true, callback: @escaping (() -> Void)) {
|
||||
self.sizeCallback = callback
|
||||
|
||||
super.init(frame: NSRect(x: 0, y: 0, width: width, height: 22))
|
||||
@@ -289,7 +293,7 @@ internal class SensorView: NSStackView {
|
||||
self.distribution = .fillProportionally
|
||||
self.spacing = 0
|
||||
|
||||
self.valueView = ValueSensorView(sensor, width: width, callback: { [weak self] in
|
||||
self.valueView = ValueSensorView(sensor, width: width, toggleable: toggleable, callback: { [weak self] in
|
||||
self?.open()
|
||||
})
|
||||
self.chartView = ChartSensorView(width: width, suffix: sensor.unit)
|
||||
@@ -306,7 +310,11 @@ internal class SensorView: NSStackView {
|
||||
}
|
||||
|
||||
public func update(_ sensor: Sensor_p) {
|
||||
self.valueView.update(sensor.formattedPopupValue)
|
||||
var value = sensor.formattedPopupValue
|
||||
if let fan = sensor as? Fan {
|
||||
value = self.fanValueState == .percentage ? "\(fan.percentage)%" : fan.formattedValue
|
||||
}
|
||||
self.valueView.update(value)
|
||||
}
|
||||
|
||||
public func addHistoryPoint(_ sensor: Sensor_p) {
|
||||
@@ -337,8 +345,11 @@ internal class ValueSensorView: NSStackView {
|
||||
}()
|
||||
private var valueView: ValueField = ValueField(frame: NSRect.zero)
|
||||
|
||||
public init(_ sensor: Sensor_p, width: CGFloat, callback: @escaping (() -> Void)) {
|
||||
private let isToggleable: Bool
|
||||
|
||||
public init(_ sensor: Sensor_p, width: CGFloat, toggleable: Bool = true, callback: @escaping (() -> Void)) {
|
||||
self.callback = callback
|
||||
self.isToggleable = toggleable
|
||||
super.init(frame: NSRect(x: 0, y: 0, width: width, height: 22))
|
||||
|
||||
self.wantsLayer = true
|
||||
@@ -354,12 +365,14 @@ internal class ValueSensorView: NSStackView {
|
||||
self.addArrangedSubview(self.labelView)
|
||||
self.addArrangedSubview(self.valueView)
|
||||
|
||||
self.addTrackingArea(NSTrackingArea(
|
||||
rect: NSRect(x: 0, y: 0, width: self.frame.width, height: 22),
|
||||
options: [NSTrackingArea.Options.activeAlways, NSTrackingArea.Options.mouseEnteredAndExited, NSTrackingArea.Options.activeInActiveApp],
|
||||
owner: self,
|
||||
userInfo: nil
|
||||
))
|
||||
if self.isToggleable {
|
||||
self.addTrackingArea(NSTrackingArea(
|
||||
rect: NSRect(x: 0, y: 0, width: self.frame.width, height: 22),
|
||||
options: [NSTrackingArea.Options.activeAlways, NSTrackingArea.Options.mouseEnteredAndExited, NSTrackingArea.Options.activeInActiveApp],
|
||||
owner: self,
|
||||
userInfo: nil
|
||||
))
|
||||
}
|
||||
|
||||
NSLayoutConstraint.activate([
|
||||
self.labelView.heightAnchor.constraint(equalToConstant: 16),
|
||||
@@ -377,14 +390,17 @@ internal class ValueSensorView: NSStackView {
|
||||
}
|
||||
|
||||
override func mouseDown(with theEvent: NSEvent) {
|
||||
guard self.isToggleable else { return }
|
||||
self.callback()
|
||||
}
|
||||
|
||||
public override func mouseEntered(with: NSEvent) {
|
||||
guard self.isToggleable else { return }
|
||||
self.layer?.backgroundColor = .init(gray: 0.01, alpha: 0.05)
|
||||
}
|
||||
|
||||
public override func mouseExited(with: NSEvent) {
|
||||
guard self.isToggleable else { return }
|
||||
self.layer?.backgroundColor = .none
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user