feat: added an option to set a spacing between modules in the combined view (#1084)

This commit is contained in:
Serhiy Mytrovtsiy
2023-02-06 17:59:40 +01:00
parent 56083851f8
commit 6039d146e8
5 changed files with 50 additions and 17 deletions

View File

@@ -34,6 +34,7 @@ identifier_name:
- _uuidAddress - _uuidAddress
- AppleSiliconSensorsList - AppleSiliconSensorsList
- FanValues - FanValues
- CombinedModulesSpacings
line_length: 200 line_length: 200

View File

@@ -82,7 +82,7 @@ open class Module: Module_p {
public var name: String { public var name: String {
config.name config.name
} }
public var oneViewPosition: Int { public var combinedPosition: Int {
get { get {
Store.shared.int(key: "\(self.name)_position", defaultValue: 0) Store.shared.int(key: "\(self.name)_position", defaultValue: 0)
} }

View File

@@ -54,6 +54,18 @@ public let TemperatureUnits: [KeyValue_t] = [
KeyValue_t(key: "fahrenheit", value: "Fahrenheit", additional: UnitTemperature.fahrenheit) KeyValue_t(key: "fahrenheit", value: "Fahrenheit", additional: UnitTemperature.fahrenheit)
] ]
public let CombinedModulesSpacings: [KeyValue_t] = [
KeyValue_t(key: "none", value: "None"),
KeyValue_t(key: "1", value: "1", additional: 1),
KeyValue_t(key: "2", value: "2", additional: 2),
KeyValue_t(key: "3", value: "3", additional: 3),
KeyValue_t(key: "4", value: "4", additional: 4),
KeyValue_t(key: "5", value: "5", additional: 5),
KeyValue_t(key: "6", value: "6", additional: 6),
KeyValue_t(key: "7", value: "7", additional: 7),
KeyValue_t(key: "8", value: "8", additional: 8)
]
public enum DataSizeBase: String { public enum DataSizeBase: String {
case bit case bit
case byte case byte

View File

@@ -19,7 +19,7 @@ class ApplicationSettings: NSStackView {
private var temperatureUnitsValue: String { private var temperatureUnitsValue: String {
get { get {
return Store.shared.string(key: "temperature_units", defaultValue: "system") Store.shared.string(key: "temperature_units", defaultValue: "system")
} }
set { set {
Store.shared.set(key: "temperature_units", value: newValue) Store.shared.set(key: "temperature_units", value: newValue)
@@ -34,6 +34,14 @@ class ApplicationSettings: NSStackView {
Store.shared.set(key: "CombinedModules", value: newValue) Store.shared.set(key: "CombinedModules", value: newValue)
} }
} }
private var combinedModulesSpacing: String {
get {
Store.shared.string(key: "CombinedModules_spacing", defaultValue: "none")
}
set {
Store.shared.set(key: "CombinedModules_spacing", value: newValue)
}
}
private let updateWindow: UpdateWindow = UpdateWindow() private let updateWindow: UpdateWindow = UpdateWindow()
private let moduleSelector: ModuleSelectorView = ModuleSelectorView() private let moduleSelector: ModuleSelectorView = ModuleSelectorView()
@@ -190,6 +198,14 @@ class ApplicationSettings: NSStackView {
state: self.combinedModulesState, state: self.combinedModulesState,
text: localizedString("Combined modules") text: localizedString("Combined modules")
)]) )])
grid.addRow(with: [
self.titleView(localizedString("Combined module spacing")),
selectView(
action: #selector(self.toggleCombinedModulesSpacing),
items: CombinedModulesSpacings,
selected: self.combinedModulesSpacing
)
])
view.addArrangedSubview(self.moduleSelector) view.addArrangedSubview(self.moduleSelector)
view.addArrangedSubview(grid) view.addArrangedSubview(grid)
@@ -270,7 +286,7 @@ class ApplicationSettings: NSStackView {
// MARK: - actions // MARK: - actions
@objc func updateAction(_ sender: NSObject) { @objc private func updateAction(_ sender: NSObject) {
updater.check(force: true, completion: { result, error in updater.check(force: true, completion: { result, error in
if error != nil { if error != nil {
debug("error updater.check(): \(error!.localizedDescription)") debug("error updater.check(): \(error!.localizedDescription)")
@@ -290,21 +306,16 @@ class ApplicationSettings: NSStackView {
} }
@objc private func toggleUpdateInterval(_ sender: NSMenuItem) { @objc private func toggleUpdateInterval(_ sender: NSMenuItem) {
guard let key = sender.representedObject as? String else { guard let key = sender.representedObject as? String else { return }
return
}
Store.shared.set(key: "update-interval", value: key) Store.shared.set(key: "update-interval", value: key)
} }
@objc private func toggleTemperatureUnits(_ sender: NSMenuItem) { @objc private func toggleTemperatureUnits(_ sender: NSMenuItem) {
guard let key = sender.representedObject as? String else { guard let key = sender.representedObject as? String else { return }
return
}
self.temperatureUnitsValue = key self.temperatureUnitsValue = key
} }
@objc func toggleDock(_ sender: NSButton) { @objc private func toggleDock(_ sender: NSButton) {
let state = sender.state let state = sender.state
Store.shared.set(key: "dockIcon", value: state == NSControl.StateValue.on) Store.shared.set(key: "dockIcon", value: state == NSControl.StateValue.on)
@@ -315,14 +326,14 @@ class ApplicationSettings: NSStackView {
} }
} }
@objc func toggleLaunchAtLogin(_ sender: NSButton) { @objc private func toggleLaunchAtLogin(_ sender: NSButton) {
LaunchAtLogin.isEnabled = sender.state == NSControl.StateValue.on LaunchAtLogin.isEnabled = sender.state == NSControl.StateValue.on
if !Store.shared.exist(key: "runAtLoginInitialized") { if !Store.shared.exist(key: "runAtLoginInitialized") {
Store.shared.set(key: "runAtLoginInitialized", value: true) Store.shared.set(key: "runAtLoginInitialized", value: true)
} }
} }
@objc func resetSettings(_ sender: NSObject) { @objc private func resetSettings(_ sender: NSObject) {
let alert = NSAlert() let alert = NSAlert()
alert.messageText = localizedString("Reset settings") alert.messageText = localizedString("Reset settings")
alert.informativeText = localizedString("Reset settings text") alert.informativeText = localizedString("Reset settings text")
@@ -359,6 +370,12 @@ class ApplicationSettings: NSStackView {
self.moduleSelector.isHidden = !self.combinedModulesState self.moduleSelector.isHidden = !self.combinedModulesState
NotificationCenter.default.post(name: .toggleOneView, object: nil, userInfo: nil) NotificationCenter.default.post(name: .toggleOneView, object: nil, userInfo: nil)
} }
@objc private func toggleCombinedModulesSpacing(_ sender: NSMenuItem) {
guard let key = sender.representedObject as? String else { return }
self.combinedModulesSpacing = key
NotificationCenter.default.post(name: .moduleRearrange, object: nil, userInfo: nil)
}
} }
private class ModuleSelectorView: NSStackView { private class ModuleSelectorView: NSStackView {
@@ -385,7 +402,7 @@ private class ModuleSelectorView: NSStackView {
}() }()
var w = self.spacing var w = self.spacing
modules.filter({ $0.available }).sorted(by: { $0.oneViewPosition < $1.oneViewPosition }).forEach { (m: Module) in modules.filter({ $0.available }).sorted(by: { $0.combinedPosition < $1.combinedPosition }).forEach { (m: Module) in
let v = ModulePreview(id: m.name, icon: m.config.icon) let v = ModulePreview(id: m.name, icon: m.config.icon)
self.addArrangedSubview(v) self.addArrangedSubview(v)
w += v.frame.width + self.spacing w += v.frame.width + self.spacing
@@ -464,7 +481,7 @@ private class ModuleSelectorView: NSStackView {
for (i, v) in self.views(in: .leading).compactMap({$0 as? ModulePreview}).enumerated() { for (i, v) in self.views(in: .leading).compactMap({$0 as? ModulePreview}).enumerated() {
if let m = modules.first(where: { $0.name == v.identifier?.rawValue }) { if let m = modules.first(where: { $0.name == v.identifier?.rawValue }) {
m.oneViewPosition = i m.combinedPosition = i
} }
} }
} }

View File

@@ -19,6 +19,9 @@ class CombinedView {
private var status: Bool { private var status: Bool {
Store.shared.bool(key: "CombinedModules", defaultValue: false) Store.shared.bool(key: "CombinedModules", defaultValue: false)
} }
private var spacing: CGFloat {
CGFloat(Int(Store.shared.string(key: "CombinedModules_spacing", defaultValue: "")) ?? 0)
}
init() { init() {
modules.forEach { (m: Module) in modules.forEach { (m: Module) in
@@ -69,10 +72,10 @@ class CombinedView {
var w: CGFloat = 0 var w: CGFloat = 0
var i: Int = 0 var i: Int = 0
modules.filter({ $0.enabled }).sorted(by: { $0.oneViewPosition < $1.oneViewPosition }).forEach { (m: Module) in modules.filter({ $0.enabled }).sorted(by: { $0.combinedPosition < $1.combinedPosition }).forEach { (m: Module) in
self.view.addSubview(m.menuBar.view) self.view.addSubview(m.menuBar.view)
self.view.subviews[i].setFrameOrigin(NSPoint(x: w, y: 0)) self.view.subviews[i].setFrameOrigin(NSPoint(x: w, y: 0))
w += m.menuBar.view.frame.width w += m.menuBar.view.frame.width + self.spacing
i += 1 i += 1
} }
self.view.setFrameSize(NSSize(width: w, height: self.view.frame.height)) self.view.setFrameSize(NSSize(width: w, height: self.view.frame.height))