From 98d90f58a7799701428fe32a796a7dc2f65293a9 Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Wed, 12 Jun 2019 00:59:09 +0200 Subject: [PATCH] started with chart --- Stats.xcodeproj/project.pbxproj | 4 - Stats/Modules/CPU/CPU.swift | 126 +++++++++++++++++++++++++++++--- Stats/Modules/CPU/CPU.xib | 57 --------------- Stats/libs/Extensions.swift | 12 +++ 4 files changed, 128 insertions(+), 71 deletions(-) delete mode 100644 Stats/Modules/CPU/CPU.xib diff --git a/Stats.xcodeproj/project.pbxproj b/Stats.xcodeproj/project.pbxproj index f7169d29..3488130e 100755 --- a/Stats.xcodeproj/project.pbxproj +++ b/Stats.xcodeproj/project.pbxproj @@ -15,7 +15,6 @@ 9A5B1CBF229E78F0008B9D3C /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5B1CBE229E78F0008B9D3C /* Observable.swift */; }; 9A5B1CC5229E7B40008B9D3C /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5B1CC4229E7B40008B9D3C /* Extensions.swift */; }; 9A6CFC0122A1C9F5001E782D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9A6CFC0022A1C9F5001E782D /* Assets.xcassets */; }; - 9A7B8F5B22A290A200DEB352 /* CPU.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A7B8F5A22A290A200DEB352 /* CPU.xib */; }; 9A7B8F5E22A2A57600DEB352 /* CPUReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7B8F5D22A2A57600DEB352 /* CPUReader.swift */; }; 9A7B8F6522A2C19D00DEB352 /* Memory.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A7B8F6422A2C19D00DEB352 /* Memory.xib */; }; 9A7B8F6722A2C1B900DEB352 /* Disk.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A7B8F6622A2C1B900DEB352 /* Disk.xib */; }; @@ -55,7 +54,6 @@ 9A5B1CBE229E78F0008B9D3C /* Observable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Observable.swift; sourceTree = ""; }; 9A5B1CC4229E7B40008B9D3C /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 9A6CFC0022A1C9F5001E782D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 9A7B8F5A22A290A200DEB352 /* CPU.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CPU.xib; sourceTree = ""; }; 9A7B8F5D22A2A57600DEB352 /* CPUReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CPUReader.swift; sourceTree = ""; }; 9A7B8F6422A2C19D00DEB352 /* Memory.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Memory.xib; sourceTree = ""; }; 9A7B8F6622A2C1B900DEB352 /* Disk.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Disk.xib; sourceTree = ""; }; @@ -156,7 +154,6 @@ 9A7B8F5C22A2926500DEB352 /* CPU */ = { isa = PBXGroup; children = ( - 9A7B8F5A22A290A200DEB352 /* CPU.xib */, 9A57A19C22A1E3270033E318 /* CPU.swift */, 9A7B8F5D22A2A57600DEB352 /* CPUReader.swift */, ); @@ -284,7 +281,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9A7B8F5B22A290A200DEB352 /* CPU.xib in Resources */, 9A6CFC0122A1C9F5001E782D /* Assets.xcassets in Resources */, 9A7B8F6722A2C1B900DEB352 /* Disk.xib in Resources */, 9A7B8F6522A2C19D00DEB352 /* Memory.xib in Resources */, diff --git a/Stats/Modules/CPU/CPU.swift b/Stats/Modules/CPU/CPU.swift index 8bcc2fb2..c75fe30c 100644 --- a/Stats/Modules/CPU/CPU.swift +++ b/Stats/Modules/CPU/CPU.swift @@ -8,9 +8,111 @@ import Cocoa +class ChartView: NSView { + var valueLabel: NSTextField = NSTextField() + + var label: Bool = false + var points: [Double] { + didSet { + setNeedsDisplay(self.frame) + } + } + + override init(frame: NSRect) { + self.points = Array(repeating: 0.0, count: 50) + super.init(frame: frame) + + self.wantsLayer = true + + if self.label { + let valueLabel = NSTextField(frame: NSMakeRect(2, MODULE_HEIGHT - 11, self.frame.size.width, 10)) + valueLabel.textColor = NSColor.red + valueLabel.isEditable = false + valueLabel.isSelectable = false + valueLabel.isBezeled = false + valueLabel.wantsLayer = true + valueLabel.textColor = .labelColor + valueLabel.backgroundColor = .controlColor + valueLabel.canDrawSubviewsIntoLayer = true + valueLabel.alignment = .natural + valueLabel.font = NSFont.systemFont(ofSize: 8, weight: .ultraLight) + valueLabel.stringValue = "" + valueLabel.addSubview(NSView()) + + self.valueLabel = valueLabel + self.addSubview(self.valueLabel) + } else { + self.addSubview(NSView()) + } + } + + required init?(coder decoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func draw(_ dirtyRect: NSRect) { + super.draw(dirtyRect) + + if (self.points.count < 2) { + return + } + + let xOffset: CGFloat = 4.0 + let yOffset: CGFloat = 3.0 + var height: Double = Double(self.frame.size.height) - Double((yOffset * 2)) + if self.label { + height = 7.0 + } + let xRatio = Double(self.frame.size.width - (xOffset * 2)) / (Double(self.points.count) - 1) + + let chartLine = NSBezierPath() + chartLine.lineWidth = 0.5 + + for i in 0.. @@ -20,26 +122,30 @@ class CPU: Module { init() { self.active = Observable(defaults.object(forKey: name) != nil ? defaults.bool(forKey: name) : true) - self.view = loadViewFromNib() + self.chart = ChartView(frame: NSMakeRect(0, 0, MODULE_WIDTH + 7, MODULE_HEIGHT)) + self.view.wantsLayer = true + self.view = self.chart } func start() { if !self.reader.usage.value.isNaN { - self.value.stringValue = "\(Int(Float(self.reader.usage.value.roundTo(decimalPlaces: 2))! * 100))%" - self.value.textColor = self.reader.usage.value.usageColor() + self.chart.addValue(value: Double(self.reader.usage!.value)) +// self.value.stringValue = "\(Int(Float(self.reader.usage.value.roundTo(decimalPlaces: 2))! * 100))%" +// self.value.textColor = self.reader.usage.value.usageColor() } - +// self.reader.start() self.reader.usage.subscribe(observer: self) { (value, _) in if !value.isNaN { - self.value.stringValue = "\(Int(Float(value.roundTo(decimalPlaces: 2))! * 100))%" - self.value.textColor = value.usageColor() + self.chart.addValue(value: Double(self.reader.usage!.value)) +// self.value.stringValue = "\(Int(Float(value.roundTo(decimalPlaces: 2))! * 100))%" +// self.value.textColor = value.usageColor() } } - - colors.subscribe(observer: self) { (value, _) in - self.value.textColor = self.reader.usage.value.usageColor() - } +// +// colors.subscribe(observer: self) { (value, _) in +// self.value.textColor = self.reader.usage.value.usageColor() +// } } func menu() -> NSMenuItem { diff --git a/Stats/Modules/CPU/CPU.xib b/Stats/Modules/CPU/CPU.xib deleted file mode 100644 index d88e8dad..00000000 --- a/Stats/Modules/CPU/CPU.xib +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Stats/libs/Extensions.swift b/Stats/libs/Extensions.swift index 7a7f94b0..033f9992 100755 --- a/Stats/libs/Extensions.swift +++ b/Stats/libs/Extensions.swift @@ -37,3 +37,15 @@ public enum Unit : Float { case gigabyte = 1073741824 } +//extension NSView { +// var backgroundColor: NSColor? { +// get { +// guard let color = layer?.backgroundColor else { return nil } +// return NSColor(cgColor: color) +// } +// set { +// wantsLayer = true +// layer?.backgroundColor = newValue?.cgColor +// } +// } +//}