fix: next try to make properly working widget ordering in the menu bar

This commit is contained in:
Serhiy Mytrovtsiy
2021-02-22 16:58:08 +01:00
parent 4b736700b9
commit 40b408ca20
5 changed files with 44 additions and 61 deletions

View File

@@ -86,6 +86,7 @@ public class PieChart: WidgetWrapper {
frame = NSRect(x: x, y: 0, width: self.frame.size.height, height: self.frame.size.height)
self.chart.frame = frame
self.setFrameSize(NSSize(width: self.size + x, height: self.frame.size.height))
self.setWidth(self.size + x)
}

View File

@@ -225,8 +225,7 @@ open class Module: Module_p {
store: self.store,
module: self.config.name,
config: self.config.widgetsConfig,
defaultWidget: self.config.defaultWidget,
moduleState: self.enabled
defaultWidget: self.config.defaultWidget
) {
self.widgets.append(widget)
}

View File

@@ -25,71 +25,58 @@ public enum widget_t: String {
case sensors = "sensors"
case memory = "memory"
public func new(store: UnsafePointer<Store>, module: String, config: NSDictionary, defaultWidget: widget_t, moduleState: Bool) -> Widget? {
var widget: Widget? = nil
public func new(store: UnsafePointer<Store>, module: String, config: NSDictionary, defaultWidget: widget_t) -> Widget? {
var preview: widget_p? = nil
var item: widget_p? = nil
guard let widgetConfig: NSDictionary = config[self.rawValue] as? NSDictionary else {
return nil
}
switch self {
case .mini:
widget = Widget(self, defaultWidget: defaultWidget, module: module, moduleState: moduleState, store: store,
preview: Mini(title: module, config: widgetConfig, store: store, preview: true),
item: Mini(title: module, config: widgetConfig, store: store)
)
preview = Mini(title: module, config: widgetConfig, store: store, preview: true)
item = Mini(title: module, config: widgetConfig, store: store, preview: false)
break
case .lineChart:
widget = Widget(self, defaultWidget: defaultWidget, module: module, moduleState: moduleState, store: store,
preview: LineChart(title: module, config: widgetConfig, store: store, preview: true),
item: LineChart(title: module, config: widgetConfig, store: store)
)
preview = LineChart(title: module, config: widgetConfig, store: store, preview: true)
item = LineChart(title: module, config: widgetConfig, store: store, preview: false)
break
case .barChart:
widget = Widget(self, defaultWidget: defaultWidget, module: module, moduleState: moduleState, store: store,
preview: BarChart(title: module, config: widgetConfig, store: store, preview: true),
item: BarChart(title: module, config: widgetConfig, store: store)
)
preview = BarChart(title: module, config: widgetConfig, store: store, preview: true)
item = BarChart(title: module, config: widgetConfig, store: store, preview: false)
break
case .pieChart:
widget = Widget(self, defaultWidget: defaultWidget, module: module, moduleState: moduleState, store: store,
preview: PieChart(title: module, config: widgetConfig, store: store, preview: true),
item: PieChart(title: module, config: widgetConfig, store: store)
)
preview = PieChart(title: module, config: widgetConfig, store: store, preview: true)
item = PieChart(title: module, config: widgetConfig, store: store, preview: false)
break
case .networkChart:
widget = Widget(self, defaultWidget: defaultWidget, module: module, moduleState: moduleState, store: store,
preview: NetworkChart(title: module, config: widgetConfig, store: store, preview: true),
item: NetworkChart(title: module, config: widgetConfig, store: store)
)
preview = NetworkChart(title: module, config: widgetConfig, store: store, preview: true)
item = NetworkChart(title: module, config: widgetConfig, store: store, preview: false)
break
case .speed:
widget = Widget(self, defaultWidget: defaultWidget, module: module, moduleState: moduleState, store: store,
preview: SpeedWidget(title: module, config: widgetConfig, store: store, preview: true),
item: SpeedWidget(title: module, config: widgetConfig, store: store)
)
preview = SpeedWidget(title: module, config: widgetConfig, store: store, preview: true)
item = SpeedWidget(title: module, config: widgetConfig, store: store, preview: false)
break
case .battery:
widget = Widget(self, defaultWidget: defaultWidget, module: module, moduleState: moduleState, store: store,
preview: BatterykWidget(title: module, config: widgetConfig, store: store, preview: true),
item: BatterykWidget(title: module, config: widgetConfig, store: store)
)
preview = BatterykWidget(title: module, config: widgetConfig, store: store, preview: true)
item = BatterykWidget(title: module, config: widgetConfig, store: store, preview: false)
break
case .sensors:
widget = Widget(self, defaultWidget: defaultWidget, module: module, moduleState: moduleState, store: store,
preview: SensorsWidget(title: module, config: widgetConfig, store: store, preview: true),
item: SensorsWidget(title: module, config: widgetConfig, store: store)
)
preview = SensorsWidget(title: module, config: widgetConfig, store: store, preview: true)
item = SensorsWidget(title: module, config: widgetConfig, store: store, preview: false)
break
case .memory:
widget = Widget(self, defaultWidget: defaultWidget, module: module, moduleState: moduleState, store: store,
preview: MemoryWidget(title: module, config: widgetConfig, store: store, preview: true),
item: MemoryWidget(title: module, config: widgetConfig, store: store)
)
preview = MemoryWidget(title: module, config: widgetConfig, store: store, preview: true)
item = MemoryWidget(title: module, config: widgetConfig, store: store, preview: false)
break
default: break
}
return widget
if let preview = preview, let item = item {
return Widget(self, defaultWidget: defaultWidget, module: module, preview: preview, item: item)
}
return nil
}
public func name() -> String {
@@ -174,33 +161,27 @@ public class Widget {
}
}
private let store: UnsafePointer<Store>
private var config: NSDictionary = NSDictionary()
private var menuBarItem: NSStatusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)
private let log: OSLog
private var list: [widget_t] {
get {
let string = self.store.pointee.string(key: "\(self.module)_widget", defaultValue: self.defaultWidget.rawValue)
let string = Store.shared.string(key: "\(self.module)_widget", defaultValue: self.defaultWidget.rawValue)
return string.split(separator: ",").map{ (widget_t(rawValue: String($0)) ?? .unknown)}
}
set {
self.store.pointee.set(key: "\(self.module)_widget", value: newValue.map{ $0.rawValue }.joined(separator: ","))
Store.shared.set(key: "\(self.module)_widget", value: newValue.map{ $0.rawValue }.joined(separator: ","))
}
}
public init(_ type: widget_t, defaultWidget: widget_t, module: String, moduleState: Bool, store: UnsafePointer<Store>, preview: widget_p, item: widget_p) {
public init(_ type: widget_t, defaultWidget: widget_t, module: String, preview: widget_p, item: widget_p) {
self.type = type
self.module = module
self.preview = preview
self.item = item
self.store = store
self.defaultWidget = defaultWidget
self.log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: self.module)
self.menuBarItem.autosaveName = "\(self.module)_\(self.type.name())"
self.menuBarItem.length = 0
self.menuBarItem.isVisible = moduleState && self.isActive
self.item.widthHandler = { [weak self] value in
if let s = self, s.menuBarItem.length != value {
@@ -208,10 +189,6 @@ public class Widget {
os_log(.debug, log: s.log, "widget %s change width to %.2f", "\(s.type)", value)
}
}
self.menuBarItem.button?.target = self
self.menuBarItem.button?.action = #selector(self.togglePopup)
self.menuBarItem.button?.sendAction(on: [.leftMouseDown, .rightMouseDown])
}
// show item in the menu bar
@@ -220,10 +197,18 @@ public class Widget {
return
}
self.menuBarItem.isVisible = true
DispatchQueue.main.async(execute: {
self.menuBarItem.length = self.item.frame.width
self.menuBarItem = NSStatusBar.system.statusItem(withLength: self.item.frame.width)
self.menuBarItem.autosaveName = "\(self.module)_\(self.type.name())"
self.menuBarItem.button?.addSubview(self.item)
if !self.menuBarItem.isVisible {
self.menuBarItem.isVisible = true
}
self.menuBarItem.button?.target = self
self.menuBarItem.button?.action = #selector(self.togglePopup)
self.menuBarItem.button?.sendAction(on: [.leftMouseDown, .rightMouseDown])
})
os_log(.debug, log: log, "widget %s enabled", self.type.rawValue)
@@ -231,9 +216,7 @@ public class Widget {
// remove item from the menu bar
public func disable() {
self.menuBarItem.length = 0
self.menuBarItem.isVisible = false
NSStatusBar.system.removeStatusItem(self.menuBarItem)
os_log(.debug, log: log, "widget %s disabled", self.type.rawValue)
}

View File

@@ -824,9 +824,9 @@
9A81C7572449A41400825D92 /* RAM */,
9AF9EE0324648751005D2270 /* Disk */,
9AE29AD6249A50350071B02D /* Sensors */,
9A8DE588253DEFA9006A748F /* Fans */,
9A3E17CD247A94AF00449CD1 /* Net */,
9ABFF8F7248BEBCB00C9041A /* Battery */,
9A8DE588253DEFA9006A748F /* Fans */,
);
path = Modules;
sourceTree = "<group>";

View File

@@ -45,6 +45,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
// print("------------", startingPoint, "------------", to: &Log.log)
self.parseArguments()
self.parseVersion()
NSUserNotificationCenter.default.removeAllDeliveredNotifications()
NotificationCenter.default.addObserver(self, selector: #selector(updateCron), name: .changeCronInterval, object: nil)
@@ -53,7 +54,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
self.settingsWindow.setModules()
self.parseVersion()
self.defaultValues()
self.updateCron()
os_log(.info, log: log, "Stats started in %.4f seconds", startingPoint.timeIntervalSinceNow * -1)