From a2b1573bee3fcab4f9b03f832bf90faec86604e1 Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Fri, 22 Mar 2024 21:45:08 +0100 Subject: [PATCH] feat: added read and written data to the disk view (#1804) --- Modules/Disk/popup.swift | 52 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/Modules/Disk/popup.swift b/Modules/Disk/popup.swift index 61c1581c..3a679553 100644 --- a/Modules/Disk/popup.swift +++ b/Modules/Disk/popup.swift @@ -128,6 +128,7 @@ internal class Popup: PopupWrapper { value.reversed().forEach { (drive: drive) in if let view = views.first(where: { $0.name == drive.mediaName }) { view.updateReadWrite(read: drive.activity.read, write: drive.activity.write) + view.updateReadWritten(read: drive.activity.readBytes, written: drive.activity.writeBytes) } } } @@ -224,6 +225,8 @@ internal class DiskView: NSStackView { private var chartView: ChartView private var barView: BarView private var legendView: LegendView + private var readDataView: DataView + private var writtenDataView: DataView private var temperatureView: TemperatureView? private var lifeView: LifeView? @@ -235,6 +238,8 @@ internal class DiskView: NSStackView { self.chartView = ChartView(width: innerWidth) self.barView = BarView(width: innerWidth, size: size, free: free) self.legendView = LegendView(width: innerWidth, id: "\(name)_\(path?.absoluteString ?? "")", size: size, free: free) + self.readDataView = DataView(width: innerWidth, title: "\(localizedString("Total bytes read")):") + self.writtenDataView = DataView(width: innerWidth, title: "\(localizedString("Total bytes written")):") if let smart { self.temperatureView = TemperatureView(width: innerWidth, smart: smart) self.lifeView = LifeView(width: innerWidth, smart: smart) @@ -258,6 +263,8 @@ internal class DiskView: NSStackView { self.addArrangedSubview(self.chartView) self.addArrangedSubview(self.barView) self.addArrangedSubview(self.legendView) + self.addArrangedSubview(self.readDataView) + self.addArrangedSubview(self.writtenDataView) if smart != nil, let temperatureView = self.temperatureView, let lifeView = self.lifeView { self.addArrangedSubview(temperatureView) self.addArrangedSubview(lifeView) @@ -289,6 +296,10 @@ internal class DiskView: NSStackView { self.nameView.update(free: nil, read: read, write: write) self.chartView.update(read: read, write: write) } + public func updateReadWritten(read: Int64, written: Int64) { + self.readDataView.update(read) + self.writtenDataView.update(written) + } public func setChartColor(read: NSColor? = nil, write: NSColor? = nil) { self.chartView.setColors(read: read, write: write) } @@ -335,7 +346,7 @@ internal class NameView: NSStackView { let readView: NSView = NSView(frame: NSRect(x: 0, y: 0, width: 32, height: activity.frame.height)) let readField: NSTextField = TextView(frame: NSRect(x: 0, y: 0, width: nameField.frame.width, height: readView.frame.height)) readField.stringValue = "R" - let readState: NSView = NSView(frame: NSRect(x: 13, y: (readView.frame.height-9)/2, width: 10, height: 10)) + let readState: NSView = NSView(frame: NSRect(x: 13, y: (readView.frame.height-10)/2, width: 10, height: 10)) readState.wantsLayer = true readState.layer?.backgroundColor = NSColor.lightGray.withAlphaComponent(0.75).cgColor readState.layer?.cornerRadius = 2 @@ -722,3 +733,42 @@ internal class LifeView: NSStackView { } } } + +internal class DataView: NSStackView { + private var initialized: Bool = false + private let field: NSTextField = TextView() + + init(width: CGFloat, title: String) { + super.init(frame: CGRect(x: 0, y: 0, width: width, height: 16)) + + self.orientation = .horizontal + self.spacing = 0 + + let titleField = TextView() + titleField.font = NSFont.systemFont(ofSize: 11, weight: .light) + titleField.stringValue = title + titleField.cell?.truncatesLastVisibleLine = true + + self.field.font = NSFont.systemFont(ofSize: 11, weight: .regular) + self.field.alignment = .right + self.field.stringValue = "0" + + self.addArrangedSubview(titleField) + self.addArrangedSubview(NSView()) + self.addArrangedSubview(self.field) + + self.widthAnchor.constraint(equalToConstant: self.frame.width).isActive = true + self.heightAnchor.constraint(equalToConstant: self.frame.height).isActive = true + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public func update(_ newValue: Int64) { + if (self.window?.isVisible ?? false) || !self.initialized { + self.field.stringValue = Units(bytes: newValue).getReadableMemory() + self.initialized = true + } + } +}