mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-15 00:34:08 +09:00
feat: added an option to change read/write colors for the disk popup (#1374)
This commit is contained in:
@@ -15,9 +15,29 @@ import Kit
|
||||
internal class Popup: PopupWrapper {
|
||||
private let emptyView: EmptyView = EmptyView(height: 30, isHidden: false, msg: localizedString("No disks are available"))
|
||||
|
||||
private var readColorState: Color = .secondBlue
|
||||
private var readColor: NSColor {
|
||||
var value = NSColor.systemRed
|
||||
if let color = self.readColorState.additional as? NSColor {
|
||||
value = color
|
||||
}
|
||||
return value
|
||||
}
|
||||
private var writeColorState: Color = .secondRed
|
||||
private var writeColor: NSColor {
|
||||
var value = NSColor.systemBlue
|
||||
if let color = self.writeColorState.additional as? NSColor {
|
||||
value = color
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
public init() {
|
||||
super.init(frame: NSRect(x: 0, y: 0, width: Constants.Popup.width, height: 30))
|
||||
|
||||
self.readColorState = Color.fromString(Store.shared.string(key: "\(Disk.name)_readColor", defaultValue: self.readColorState.key))
|
||||
self.writeColorState = Color.fromString(Store.shared.string(key: "\(Disk.name)_writeColor", defaultValue: self.writeColorState.key))
|
||||
|
||||
self.orientation = .vertical
|
||||
self.spacing = Constants.Popup.margins
|
||||
}
|
||||
@@ -71,6 +91,55 @@ internal class Popup: PopupWrapper {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Settings
|
||||
|
||||
public override func settings() -> NSView? {
|
||||
let view = SettingsContainerView()
|
||||
|
||||
view.addArrangedSubview(selectSettingsRow(
|
||||
title: localizedString("Color of write"),
|
||||
action: #selector(toggleWriteColor),
|
||||
items: Color.allColors,
|
||||
selected: self.writeColorState.key
|
||||
))
|
||||
|
||||
view.addArrangedSubview(selectSettingsRow(
|
||||
title: localizedString("Color of read"),
|
||||
action: #selector(toggleReadColor),
|
||||
items: Color.allColors,
|
||||
selected: self.readColorState.key
|
||||
))
|
||||
|
||||
return view
|
||||
}
|
||||
|
||||
@objc private func toggleWriteColor(_ sender: NSMenuItem) {
|
||||
guard let key = sender.representedObject as? String,
|
||||
let newValue = Color.allColors.first(where: { $0.key == key }) else {
|
||||
return
|
||||
}
|
||||
self.writeColorState = newValue
|
||||
Store.shared.set(key: "\(Disk.name)_writeColor", value: key)
|
||||
if let color = newValue.additional as? NSColor {
|
||||
for view in self.subviews.filter({ $0 is DiskView }).map({ $0 as! DiskView }) {
|
||||
view.setChartColor(write: color)
|
||||
}
|
||||
}
|
||||
}
|
||||
@objc private func toggleReadColor(_ sender: NSMenuItem) {
|
||||
guard let key = sender.representedObject as? String,
|
||||
let newValue = Color.allColors.first(where: { $0.key == key }) else {
|
||||
return
|
||||
}
|
||||
self.readColorState = newValue
|
||||
Store.shared.set(key: "\(Disk.name)_readColor", value: key)
|
||||
if let color = newValue.additional as? NSColor {
|
||||
for view in self.subviews.filter({ $0 is DiskView }).map({ $0 as! DiskView }) {
|
||||
view.setChartColor(read: color)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal class DiskView: NSStackView {
|
||||
@@ -133,6 +202,9 @@ internal class DiskView: NSStackView {
|
||||
self.nameView.update(free: nil, read: read, write: write)
|
||||
self.chartView.update(read: read, write: write)
|
||||
}
|
||||
public func setChartColor(read: NSColor? = nil, write: NSColor? = nil) {
|
||||
self.chartView.setColors(read: read, write: write)
|
||||
}
|
||||
}
|
||||
|
||||
internal class NameView: NSStackView {
|
||||
@@ -143,6 +215,13 @@ internal class NameView: NSStackView {
|
||||
private var readState: NSView? = nil
|
||||
private var writeState: NSView? = nil
|
||||
|
||||
private var readColor: NSColor {
|
||||
Color.fromString(Store.shared.string(key: "\(Disk.name)_readColor", defaultValue: Color.secondBlue.key)).additional as! NSColor
|
||||
}
|
||||
private var writeColor: NSColor {
|
||||
Color.fromString(Store.shared.string(key: "\(Disk.name)_writeColor", defaultValue: Color.secondRed.key)).additional as! NSColor
|
||||
}
|
||||
|
||||
public init(width: CGFloat, name: String, size: Int64, free: Int64, path: URL?) {
|
||||
self.size = size
|
||||
self.uri = path
|
||||
@@ -215,11 +294,11 @@ internal class NameView: NSStackView {
|
||||
if (self.window?.isVisible ?? false) || !self.ready {
|
||||
if let read = read {
|
||||
self.readState?.toolTip = DiskSize(read).getReadableMemory()
|
||||
self.readState?.layer?.backgroundColor = read != 0 ? NSColor.systemBlue.cgColor : NSColor.lightGray.withAlphaComponent(0.75).cgColor
|
||||
self.readState?.layer?.backgroundColor = read != 0 ? self.readColor.cgColor : NSColor.lightGray.withAlphaComponent(0.75).cgColor
|
||||
}
|
||||
if let write = write {
|
||||
self.writeState?.toolTip = DiskSize(write).getReadableMemory()
|
||||
self.writeState?.layer?.backgroundColor = write != 0 ? NSColor.systemRed.cgColor : NSColor.lightGray.withAlphaComponent(0.75).cgColor
|
||||
self.writeState?.layer?.backgroundColor = write != 0 ? self.writeColor.cgColor : NSColor.lightGray.withAlphaComponent(0.75).cgColor
|
||||
}
|
||||
self.ready = true
|
||||
}
|
||||
@@ -244,6 +323,13 @@ internal class ChartView: NSStackView {
|
||||
private var chart: NetworkChartView? = nil
|
||||
private var ready: Bool = false
|
||||
|
||||
private var readColor: NSColor {
|
||||
Color.fromString(Store.shared.string(key: "\(Disk.name)_readColor", defaultValue: Color.secondBlue.key)).additional as! NSColor
|
||||
}
|
||||
private var writeColor: NSColor {
|
||||
Color.fromString(Store.shared.string(key: "\(Disk.name)_writeColor", defaultValue: Color.secondRed.key)).additional as! NSColor
|
||||
}
|
||||
|
||||
public init(width: CGFloat) {
|
||||
super.init(frame: NSRect(x: 0, y: 0, width: width, height: 36))
|
||||
|
||||
@@ -255,7 +341,7 @@ internal class ChartView: NSStackView {
|
||||
y: 1,
|
||||
width: self.frame.width,
|
||||
height: self.frame.height - 2
|
||||
), num: 120)
|
||||
), num: 120, outColor: self.writeColor, inColor: self.readColor)
|
||||
self.chart = chart
|
||||
|
||||
self.addArrangedSubview(chart)
|
||||
@@ -268,12 +354,16 @@ internal class ChartView: NSStackView {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func updateLayer() {
|
||||
self.layer?.backgroundColor = self.isDarkMode ? NSColor.lightGray.withAlphaComponent(0.1).cgColor : NSColor.white.cgColor
|
||||
}
|
||||
|
||||
public func update(read: Int64, write: Int64) {
|
||||
self.chart?.addValue(upload: Double(write), download: Double(read))
|
||||
}
|
||||
|
||||
override func updateLayer() {
|
||||
self.layer?.backgroundColor = self.isDarkMode ? NSColor.lightGray.withAlphaComponent(0.1).cgColor : NSColor.white.cgColor
|
||||
public func setColors(read: NSColor? = nil, write: NSColor? = nil) {
|
||||
self.chart?.setColors(in: read, out: write)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user