mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-15 00:34:08 +09:00
feat: added text alignment for Stack widget (#2463)
This commit is contained in:
@@ -30,6 +30,7 @@ public class StackWidget: WidgetWrapper {
|
|||||||
private var modeState: StackMode = .auto
|
private var modeState: StackMode = .auto
|
||||||
private var fixedSizeState: Bool = false
|
private var fixedSizeState: Bool = false
|
||||||
private var monospacedFontState: Bool = false
|
private var monospacedFontState: Bool = false
|
||||||
|
private var alignmentState: String = "left"
|
||||||
|
|
||||||
private var values: [Stack_t] = []
|
private var values: [Stack_t] = []
|
||||||
|
|
||||||
@@ -38,6 +39,13 @@ public class StackWidget: WidgetWrapper {
|
|||||||
|
|
||||||
private let orderTableView: OrderTableView
|
private let orderTableView: OrderTableView
|
||||||
|
|
||||||
|
private var alignment: NSTextAlignment {
|
||||||
|
if let alignmentPair = Alignments.first(where: { $0.key == self.alignmentState }) {
|
||||||
|
return alignmentPair.additional as? NSTextAlignment ?? .left
|
||||||
|
}
|
||||||
|
return .left
|
||||||
|
}
|
||||||
|
|
||||||
public init(title: String, config: NSDictionary?, preview: Bool = false) {
|
public init(title: String, config: NSDictionary?, preview: Bool = false) {
|
||||||
if let config, preview {
|
if let config, preview {
|
||||||
if let previewConfig = config["Preview"] as? NSDictionary {
|
if let previewConfig = config["Preview"] as? NSDictionary {
|
||||||
@@ -62,6 +70,7 @@ public class StackWidget: WidgetWrapper {
|
|||||||
self.modeState = StackMode(rawValue: Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_mode", defaultValue: self.modeState.rawValue)) ?? .auto
|
self.modeState = StackMode(rawValue: Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_mode", defaultValue: self.modeState.rawValue)) ?? .auto
|
||||||
self.fixedSizeState = Store.shared.bool(key: "\(self.title)_\(self.type.rawValue)_size", defaultValue: self.fixedSizeState)
|
self.fixedSizeState = Store.shared.bool(key: "\(self.title)_\(self.type.rawValue)_size", defaultValue: self.fixedSizeState)
|
||||||
self.monospacedFontState = Store.shared.bool(key: "\(self.title)_\(self.type.rawValue)_monospacedFont", defaultValue: self.monospacedFontState)
|
self.monospacedFontState = Store.shared.bool(key: "\(self.title)_\(self.type.rawValue)_monospacedFont", defaultValue: self.monospacedFontState)
|
||||||
|
self.alignmentState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_alignment", defaultValue: self.alignmentState)
|
||||||
}
|
}
|
||||||
|
|
||||||
self.orderTableView.reorderCallback = { [weak self] in
|
self.orderTableView.reorderCallback = { [weak self] in
|
||||||
@@ -136,7 +145,7 @@ public class StackWidget: WidgetWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let style = NSMutableParagraphStyle()
|
let style = NSMutableParagraphStyle()
|
||||||
style.alignment = .center
|
style.alignment = self.alignment
|
||||||
|
|
||||||
var width: CGFloat = self.oneRowWidth
|
var width: CGFloat = self.oneRowWidth
|
||||||
if !self.fixedSizeState {
|
if !self.fixedSizeState {
|
||||||
@@ -164,7 +173,7 @@ public class StackWidget: WidgetWrapper {
|
|||||||
font = NSFont.systemFont(ofSize: 10, weight: .light)
|
font = NSFont.systemFont(ofSize: 10, weight: .light)
|
||||||
}
|
}
|
||||||
let style = NSMutableParagraphStyle()
|
let style = NSMutableParagraphStyle()
|
||||||
style.alignment = .right
|
style.alignment = self.alignment
|
||||||
|
|
||||||
let attributes = [
|
let attributes = [
|
||||||
NSAttributedString.Key.font: font,
|
NSAttributedString.Key.font: font,
|
||||||
@@ -232,6 +241,11 @@ public class StackWidget: WidgetWrapper {
|
|||||||
PreferencesRow(localizedString("Monospaced font"), component: switchView(
|
PreferencesRow(localizedString("Monospaced font"), component: switchView(
|
||||||
action: #selector(self.toggleMonospacedFont),
|
action: #selector(self.toggleMonospacedFont),
|
||||||
state: self.monospacedFontState
|
state: self.monospacedFontState
|
||||||
|
)),
|
||||||
|
PreferencesRow(localizedString("Alignment"), component: selectView(
|
||||||
|
action: #selector(self.toggleAlignment),
|
||||||
|
items: Alignments,
|
||||||
|
selected: self.alignmentState
|
||||||
))
|
))
|
||||||
]
|
]
|
||||||
if self.title != "Clock" {
|
if self.title != "Clock" {
|
||||||
@@ -265,6 +279,15 @@ public class StackWidget: WidgetWrapper {
|
|||||||
Store.shared.set(key: "\(self.title)_\(self.type.rawValue)_monospacedFont", value: self.monospacedFontState)
|
Store.shared.set(key: "\(self.title)_\(self.type.rawValue)_monospacedFont", value: self.monospacedFontState)
|
||||||
self.display()
|
self.display()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc private func toggleAlignment(_ sender: NSMenuItem) {
|
||||||
|
guard let key = sender.representedObject as? String else { return }
|
||||||
|
if let newAlignment = Alignments.first(where: { $0.key == key }) {
|
||||||
|
self.alignmentState = newAlignment.key
|
||||||
|
}
|
||||||
|
Store.shared.set(key: "\(self.title)_\(self.type.rawValue)_alignment", value: key)
|
||||||
|
self.display()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class OrderTableView: NSView, NSTableViewDelegate, NSTableViewDataSource {
|
private class OrderTableView: NSView, NSTableViewDelegate, NSTableViewDataSource {
|
||||||
|
|||||||
Reference in New Issue
Block a user