diff --git a/Stats/MenuBar.swift b/Stats/MenuBar.swift index d1cedf70..1016edba 100644 --- a/Stats/MenuBar.swift +++ b/Stats/MenuBar.swift @@ -53,7 +53,7 @@ class MenuBar { self.menuBarButton.addSubview(stackView) - if self.stackView.subviews.count == 0 { + if self.stackView.subviews.count == 0 || WIDTH == 0 { self.menuBarButton.image = NSImage(named:NSImage.Name("tray_icon")) self.stackView.frame.size.width = widgetSize.width self.menuBarItem.length = widgetSize.width diff --git a/Stats/Modules/Battery/Battery.swift b/Stats/Modules/Battery/Battery.swift index eb56c053..fb60fd82 100644 --- a/Stats/Modules/Battery/Battery.swift +++ b/Stats/Modules/Battery/Battery.swift @@ -11,7 +11,7 @@ import IOKit.ps class Battery: Module { public var name: String = "Battery" - public var updateInterval: Double = 1 + public var updateInterval: Double = 15 public var enabled: Bool = true public var available: Bool { diff --git a/Stats/Modules/Module.swift b/Stats/Modules/Module.swift index ce41c720..3ede3dd7 100644 --- a/Stats/Modules/Module.swift +++ b/Stats/Modules/Module.swift @@ -103,9 +103,9 @@ extension Module { widget.name = self.name widget.start() -// self.readers.forEach { reader in -// reader.read() -// } + self.readers.forEach { reader in + reader.read() + } self.widget.view = widget as! NSView } diff --git a/Stats/Views/PopupViewController.swift b/Stats/Views/PopupViewController.swift index fecb64e1..86acf6e5 100644 --- a/Stats/Views/PopupViewController.swift +++ b/Stats/Views/PopupViewController.swift @@ -40,7 +40,7 @@ class MainViewController: NSViewController { } override func viewWillAppear() { - if self.segmentsControl == nil { return } + if self.segmentsControl == nil || self.segmentsControl.selectedSegment == -1 { return } menuBar?.modules[self.segmentsControl.selectedSegment].popup.setActive(true) DispatchQueue.global(qos: .background).async { @@ -55,7 +55,7 @@ class MainViewController: NSViewController { } override func viewWillDisappear() { - if self.segmentsControl == nil { return } + if self.segmentsControl == nil || self.segmentsControl.selectedSegment == -1 { return } menuBar?.modules[self.segmentsControl.selectedSegment].popup.setActive(false) DispatchQueue.global(qos: .background).async { diff --git a/Stats/Widgets/Battery/BatteryTimeWidget.swift b/Stats/Widgets/Battery/BatteryTimeWidget.swift index ffecd9ab..b8303e65 100644 --- a/Stats/Widgets/Battery/BatteryTimeWidget.swift +++ b/Stats/Widgets/Battery/BatteryTimeWidget.swift @@ -11,11 +11,13 @@ import Cocoa class BatteryTimeWidget: BatteryWidget { private var timeValue: NSTextField = NSTextField() private let timeWidth: CGFloat = 62 + private let timeHourWidth: CGFloat = 42 override init(frame: NSRect) { super.init(frame: CGRect(x: 0, y: 0, width: widgetSize.width, height: widgetSize.height)) self.drawTime() self.changeWidth(width: self.timeWidth) + self.update() } required init?(coder decoder: NSCoder) { @@ -23,7 +25,7 @@ class BatteryTimeWidget: BatteryWidget { } private func drawTime() { - self.timeValue = NSTextField(frame: NSMakeRect(0, 0, timeWidth, self.frame.size.height - 4)) + self.timeValue = NSTextField(frame: NSMakeRect(0, 0, timeHourWidth, self.frame.size.height - 4)) timeValue.isEditable = false timeValue.isSelectable = false timeValue.isBezeled = false @@ -34,7 +36,7 @@ class BatteryTimeWidget: BatteryWidget { timeValue.alignment = .right timeValue.font = NSFont.systemFont(ofSize: 11, weight: .regular) timeValue.stringValue = (self.time*60).printSecondsToHoursMinutesSeconds() - if self.time == 0 { + if self.time <= 0 { timeValue.isHidden = true } @@ -49,10 +51,15 @@ class BatteryTimeWidget: BatteryWidget { } self.timeValue.stringValue = (self.time*60).printSecondsToHoursMinutesSeconds() - if self.time == 0 && self.size == self.batterySize + timeWidth { + if self.time <= 0 && self.size == self.batterySize + timeWidth { self.changeWidth(width: 0) - } else if self.time > 0 && self.size != self.batterySize + timeWidth { + self.timeValue.frame.size.width = 0 + } else if self.time <= 59 && self.size != self.batterySize + timeHourWidth { + self.changeWidth(width: timeHourWidth) + self.timeValue.frame.size.width = timeHourWidth + } else if self.time > 59 && self.size != self.batterySize + timeWidth { self.changeWidth(width: timeWidth) + self.timeValue.frame.size.width = timeWidth } } } diff --git a/Stats/Widgets/Battery/BatteryWidget.swift b/Stats/Widgets/Battery/BatteryWidget.swift index 71ce435d..22d833a8 100644 --- a/Stats/Widgets/Battery/BatteryWidget.swift +++ b/Stats/Widgets/Battery/BatteryWidget.swift @@ -92,8 +92,7 @@ class BatteryWidget: NSView, Widget { } func redraw() { - self.needsDisplay = true - setNeedsDisplay(self.frame) + self.display() } func setValue(data: [Double]) { @@ -112,6 +111,7 @@ class BatteryWidget: NSView, Widget { if changed { self.redraw() + self.update() } } diff --git a/Stats/Widgets/Mini.swift b/Stats/Widgets/Mini.swift index 525e2929..0c07d11b 100644 --- a/Stats/Widgets/Mini.swift +++ b/Stats/Widgets/Mini.swift @@ -85,8 +85,7 @@ class Mini: NSView, Widget { func redraw() { self.valueView.textColor = self.value.usageColor(color: self.color) - self.needsDisplay = true - setNeedsDisplay(self.frame) + self.display() } func setValue(data: [Double]) { diff --git a/Stats/Widgets/Network/NetworkDotsText.swift b/Stats/Widgets/Network/NetworkDotsText.swift index 25155a87..3f7c9830 100644 --- a/Stats/Widgets/Network/NetworkDotsText.swift +++ b/Stats/Widgets/Network/NetworkDotsText.swift @@ -16,10 +16,6 @@ class NetworkDotsTextView: NSView, Widget { private var download: Int64 = 0 private var upload: Int64 = 0 - override var intrinsicContentSize: CGSize { - return CGSize(width: self.frame.size.width, height: self.frame.size.height) - } - var downloadValue: NSTextField = NSTextField() var uploadValue: NSTextField = NSTextField() @@ -39,10 +35,10 @@ class NetworkDotsTextView: NSView, Widget { override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) - + let workingHeight: CGFloat = (self.frame.size.height - (widgetSize.margin * 2)) let height: CGFloat = ((workingHeight - widgetSize.margin) / 2) - 1 - + var uploadCircle = NSBezierPath() uploadCircle = NSBezierPath(ovalIn: CGRect(x: widgetSize.margin, y: height + (widgetSize.margin * 2) + 1, width: height, height: height)) if self.upload >= 1_024 { @@ -51,7 +47,7 @@ class NetworkDotsTextView: NSView, Widget { NSColor.labelColor.setFill() } uploadCircle.fill() - + var downloadCircle = NSBezierPath() downloadCircle = NSBezierPath(ovalIn: CGRect(x: widgetSize.margin, y: widgetSize.margin, width: height, height: height)) if self.download >= 1_024 { @@ -62,10 +58,7 @@ class NetworkDotsTextView: NSView, Widget { downloadCircle.fill() } - func redraw() { - self.needsDisplay = true - setNeedsDisplay(self.frame) - } + func redraw() {} func setValue(data: [Double]) { let download: Int64 = Int64(data[0]) @@ -79,8 +72,6 @@ class NetworkDotsTextView: NSView, Widget { self.upload = upload uploadValue.stringValue = Units(bytes: self.upload).getReadableSpeed() } - - self.redraw() } func valueView() { @@ -94,7 +85,7 @@ class NetworkDotsTextView: NSView, Widget { downloadValue.canDrawSubviewsIntoLayer = true downloadValue.alignment = .right downloadValue.font = NSFont.systemFont(ofSize: 9, weight: .light) - downloadValue.stringValue = "0 KB/s" + downloadValue.stringValue = Units(bytes: self.download).getReadableSpeed() uploadValue = NSTextField(frame: NSMakeRect(widgetSize.margin, self.frame.size.height - 10, self.frame.size.width - widgetSize.margin, 9)) uploadValue.isEditable = false @@ -106,7 +97,7 @@ class NetworkDotsTextView: NSView, Widget { uploadValue.canDrawSubviewsIntoLayer = true uploadValue.alignment = .right uploadValue.font = NSFont.systemFont(ofSize: 9, weight: .light) - uploadValue.stringValue = "0 KB/s" + uploadValue.stringValue = Units(bytes: self.upload).getReadableSpeed() self.addSubview(downloadValue) self.addSubview(uploadValue)