mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-15 00:34:08 +09:00
feat: moved all popups to new ProcessesView for top processes
This commit is contained in:
@@ -49,19 +49,16 @@ internal class Popup: PopupWrapper {
|
||||
private var powerField: NSTextField? = nil
|
||||
private var chargingStateField: NSTextField? = nil
|
||||
|
||||
private var processes: [ProcessView] = []
|
||||
private var processes: ProcessesView? = nil
|
||||
private var processesInitialized: Bool = false
|
||||
|
||||
private var colorState: Bool = false
|
||||
|
||||
private var numberOfProcesses: Int {
|
||||
return Store.shared.int(key: "\(self.title)_processes", defaultValue: 8)
|
||||
Store.shared.int(key: "\(self.title)_processes", defaultValue: 8)
|
||||
}
|
||||
private var processesHeight: CGFloat {
|
||||
get {
|
||||
let num = self.numberOfProcesses
|
||||
return (self.processHeight*CGFloat(num)) + (num == 0 ? 0 : Constants.Popup.separatorHeight)
|
||||
}
|
||||
(self.processHeight*CGFloat(self.numberOfProcesses)) + (self.numberOfProcesses == 0 ? 0 : Constants.Popup.separatorHeight + 22)
|
||||
}
|
||||
private var timeFormat: String {
|
||||
Store.shared.string(key: "\(self.title)_timeFormat", defaultValue: "short")
|
||||
@@ -104,23 +101,20 @@ internal class Popup: PopupWrapper {
|
||||
}
|
||||
|
||||
public override func disappear() {
|
||||
self.processes.forEach{ $0.setLock(false) }
|
||||
self.processes?.setLock(false)
|
||||
}
|
||||
|
||||
public func numberOfProcessesUpdated() {
|
||||
if self.processes.count == self.numberOfProcesses {
|
||||
return
|
||||
}
|
||||
if self.processes?.count == self.numberOfProcesses { return }
|
||||
|
||||
DispatchQueue.main.async(execute: {
|
||||
self.processes = []
|
||||
|
||||
let h: CGFloat = self.dashboardHeight + self.detailsHeight + self.batteryHeight + self.adapterHeight + self.processesHeight
|
||||
self.setFrameSize(NSSize(width: self.frame.width, height: h))
|
||||
|
||||
self.grid?.setFrameSize(NSSize(width: self.frame.width, height: h))
|
||||
|
||||
self.grid?.row(at: 4).cell(at: 0).contentView?.removeFromSuperview()
|
||||
self.processes = nil
|
||||
self.grid?.removeRow(at: 4)
|
||||
self.grid?.addRow(with: [self.initProcesses()])
|
||||
self.processesInitialized = false
|
||||
@@ -203,17 +197,16 @@ internal class Popup: PopupWrapper {
|
||||
}
|
||||
|
||||
private func initProcesses() -> NSView {
|
||||
if self.numberOfProcesses == 0 { return NSView() }
|
||||
|
||||
let view: NSView = NSView(frame: NSRect(x: 0, y: 0, width: self.frame.width, height: self.processesHeight))
|
||||
let separator = separatorView(localizedString("Top processes"), origin: NSPoint(x: 0, y: self.processesHeight-Constants.Popup.separatorHeight), width: self.frame.width)
|
||||
let container: NSStackView = NSStackView(frame: NSRect(x: 0, y: 0, width: self.frame.width, height: separator.frame.origin.y))
|
||||
container.orientation = .vertical
|
||||
container.spacing = 0
|
||||
|
||||
for _ in 0..<self.numberOfProcesses {
|
||||
let processView = ProcessView()
|
||||
self.processes.append(processView)
|
||||
container.addArrangedSubview(processView)
|
||||
}
|
||||
let container: ProcessesView = ProcessesView(
|
||||
frame: NSRect(x: 0, y: 0, width: self.frame.width, height: separator.frame.origin.y),
|
||||
values: [(localizedString("Usage"), nil)],
|
||||
n: self.numberOfProcesses
|
||||
)
|
||||
self.processes = container
|
||||
|
||||
view.addSubview(separator)
|
||||
view.addSubview(container)
|
||||
@@ -318,15 +311,12 @@ internal class Popup: PopupWrapper {
|
||||
if !(self.window?.isVisible ?? false) && self.processesInitialized {
|
||||
return
|
||||
}
|
||||
|
||||
if list.count != self.processes.count {
|
||||
self.processes.forEach { processView in
|
||||
processView.clear()
|
||||
}
|
||||
}
|
||||
let list = list.map { $0 }
|
||||
if list.count != self.processes?.count { self.processes?.clear() }
|
||||
|
||||
for i in 0..<list.count {
|
||||
self.processes[i].set(list[i], "\(list[i].usage)%")
|
||||
let process = list[i]
|
||||
self.processes?.set(i, process, ["\(process.usage)%"])
|
||||
}
|
||||
|
||||
self.processesInitialized = true
|
||||
|
||||
Reference in New Issue
Block a user