diff --git a/ModuleKit/Widgets/Sensors.swift b/ModuleKit/Widgets/Sensors.swift index d7a2e644..1655b3a0 100644 --- a/ModuleKit/Widgets/Sensors.swift +++ b/ModuleKit/Widgets/Sensors.swift @@ -14,6 +14,7 @@ import StatsKit public class SensorsWidget: WidgetWrapper { private var modeState: String = "automatic" + private var fixedSizeState: Bool = false private var values: [KeyValue_t] = [] private var oneRowWidth: CGFloat = 36 @@ -51,6 +52,7 @@ public class SensorsWidget: WidgetWrapper { if !preview { self.modeState = Store.shared.string(key: "\(self.title)_\(self.type.rawValue)_mode", defaultValue: self.modeState) + self.fixedSizeState = Store.shared.bool(key: "\(self.title)_\(self.type.rawValue)_size", defaultValue: self.fixedSizeState) } } @@ -122,7 +124,12 @@ public class SensorsWidget: WidgetWrapper { let style = NSMutableParagraphStyle() style.alignment = .center - let rect = CGRect(x: x, y: (Constants.Widget.height-13)/2, width: self.oneRowWidth, height: 13) + var width: CGFloat = self.oneRowWidth + if !self.fixedSizeState { + width = sensor.value.widthOfString(usingFont: font).rounded(.up) + 2 + } + + let rect = CGRect(x: x, y: (Constants.Widget.height-13)/2, width: width, height: 13) let str = NSAttributedString.init(string: sensor.value, attributes: [ NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: NSColor.textColor, @@ -130,7 +137,7 @@ public class SensorsWidget: WidgetWrapper { ]) str.draw(with: rect) - return self.oneRowWidth + return width } private func drawTwoRows(topSensor: KeyValue_t, bottomSensor: KeyValue_t?, x: CGFloat) -> CGFloat { @@ -146,17 +153,24 @@ public class SensorsWidget: WidgetWrapper { NSAttributedString.Key.paragraphStyle: style ] - var rect = CGRect(x: x, y: rowHeight+1, width: self.twoRowWidth, height: rowHeight) + var width: CGFloat = self.twoRowWidth + if !self.fixedSizeState { + let firstRowWidth = topSensor.value.widthOfString(usingFont: font) + let secondRowWidth = bottomSensor?.value.widthOfString(usingFont: font) ?? 0 + width = max(20, max(firstRowWidth, secondRowWidth)).rounded(.up) + 2 + } + + var rect = CGRect(x: x, y: rowHeight+1, width: width, height: rowHeight) var str = NSAttributedString.init(string: topSensor.value, attributes: attributes) str.draw(with: rect) if bottomSensor != nil { - rect = CGRect(x: x, y: 1, width: self.twoRowWidth, height: rowHeight) + rect = CGRect(x: x, y: 1, width: width, height: rowHeight) str = NSAttributedString.init(string: bottomSensor!.value, attributes: attributes) str.draw(with: rect) } - return self.twoRowWidth + return width } public func setValues(_ values: [KeyValue_t]) { @@ -170,24 +184,23 @@ public class SensorsWidget: WidgetWrapper { // MARK: - Settings public override func settings(width: CGFloat) -> NSView { - let rowHeight: CGFloat = 30 - let height: CGFloat = ((rowHeight + Constants.Settings.margin) * 1) + Constants.Settings.margin + let view = SettingsContainerView(width: width) - let view: NSView = NSView(frame: NSRect( - x: Constants.Settings.margin, - y: Constants.Settings.margin, - width: width - (Constants.Settings.margin*2), - height: height - )) - - view.addSubview(SelectRow( - frame: NSRect(x: 0, y: (rowHeight + Constants.Settings.margin) * 0, width: view.frame.width, height: rowHeight), + view.addArrangedSubview(SelectRow( + frame: NSRect(x: 0, y: 0, width: view.frame.width, height: Constants.Settings.row), title: LocalizedString("Display mode"), action: #selector(changeMode), items: SensorsWidgetMode, selected: self.modeState )) + view.addArrangedSubview(ToggleTitleRow( + frame: NSRect(x: 0, y: 0, width: view.frame.width, height: Constants.Settings.row), + title: LocalizedString("Static width"), + action: #selector(toggleSize), + state: self.fixedSizeState + )) + return view } @@ -198,4 +211,16 @@ public class SensorsWidget: WidgetWrapper { self.modeState = key Store.shared.set(key: "\(self.title)_\(self.type.rawValue)_mode", value: key) } + + @objc private func toggleSize(_ sender: NSControl) { + var state: NSControl.StateValue? = nil + if #available(OSX 10.15, *) { + state = sender is NSSwitch ? (sender as! NSSwitch).state: nil + } else { + state = sender is NSButton ? (sender as! NSButton).state: nil + } + self.fixedSizeState = state! == .on ? true : false + Store.shared.set(key: "\(self.title)_\(self.type.rawValue)_size", value: self.fixedSizeState) + self.display() + } } diff --git a/Stats.xcodeproj/project.pbxproj b/Stats.xcodeproj/project.pbxproj index cad2075e..4ee92057 100644 --- a/Stats.xcodeproj/project.pbxproj +++ b/Stats.xcodeproj/project.pbxproj @@ -56,6 +56,7 @@ 9A81C76A2449A43600825D92 /* readers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A81C7682449A43600825D92 /* readers.swift */; }; 9A81C76B2449AE9400825D92 /* StatsKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A0C82DA24460F7200FAE3D4 /* StatsKit.framework */; }; 9A81C7702449B8D500825D92 /* Charts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A81C76F2449B8D500825D92 /* Charts.swift */; }; + 9A885B1A26513253000E43FE /* constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A885B1926513253000E43FE /* constants.swift */; }; 9A8DE58E253DEFA9006A748F /* Fans.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A8DE587253DEFA9006A748F /* Fans.framework */; }; 9A8DE58F253DEFA9006A748F /* Fans.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9A8DE587253DEFA9006A748F /* Fans.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 9A8DE5E4253DF4E2006A748F /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A8DE5E3253DF4E2006A748F /* main.swift */; }; @@ -71,7 +72,6 @@ 9A944D55244920690058F32A /* reader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A944D54244920690058F32A /* reader.swift */; }; 9A944D5B244925720058F32A /* widget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A944D5A244925720058F32A /* widget.swift */; }; 9A944D5D24492A8B0058F32A /* popup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A944D5C24492A8B0058F32A /* popup.swift */; }; - 9A944D5F24492AA60058F32A /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A944D5E24492AA60058F32A /* Constants.swift */; }; 9A953A1424B9D22D0038EF4B /* settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A953A1324B9D22D0038EF4B /* settings.swift */; }; 9A97CED12537331B00742D8F /* CPU.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A97CECA2537331B00742D8F /* CPU.framework */; }; 9A97CED22537331B00742D8F /* CPU.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9A97CECA2537331B00742D8F /* CPU.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; @@ -428,6 +428,7 @@ 9A81C7672449A43600825D92 /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; 9A81C7682449A43600825D92 /* readers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = readers.swift; sourceTree = ""; }; 9A81C76F2449B8D500825D92 /* Charts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Charts.swift; sourceTree = ""; }; + 9A885B1926513253000E43FE /* constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = constants.swift; sourceTree = ""; }; 9A8DE587253DEFA9006A748F /* Fans.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Fans.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9A8DE58A253DEFA9006A748F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9A8DE5E3253DF4E2006A748F /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; @@ -441,7 +442,6 @@ 9A944D54244920690058F32A /* reader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = reader.swift; sourceTree = ""; }; 9A944D5A244925720058F32A /* widget.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = widget.swift; sourceTree = ""; }; 9A944D5C24492A8B0058F32A /* popup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = popup.swift; sourceTree = ""; }; - 9A944D5E24492AA60058F32A /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; 9A953A1324B9D22D0038EF4B /* settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = settings.swift; sourceTree = ""; }; 9A97CE2A25371B2300742D8F /* IntelPowerGadget.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IntelPowerGadget.framework; path = ../../../Library/Frameworks/IntelPowerGadget.framework; sourceTree = ""; }; 9A97CECA2537331B00742D8F /* CPU.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CPU.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -624,8 +624,9 @@ 9A65492224407EA600E30B74 /* store.swift */, 9A0C82D324460E4400FAE3D4 /* launchAtLogin.swift */, 9A654920244074B500E30B74 /* extensions.swift */, - 9A1D5E4A25235C8100B82BFC /* helpers.swift */, + 9A885B1926513253000E43FE /* constants.swift */, 9A5F191526220D510085C3CC /* types.swift */, + 9A1D5E4A25235C8100B82BFC /* helpers.swift */, 9A0C82DD24460F7200FAE3D4 /* Info.plist */, 9A9D728924471FAE005CF997 /* SMC.swift */, 9A81C76F2449B8D500825D92 /* Charts.swift */, @@ -821,7 +822,6 @@ 9A944D5A244925720058F32A /* widget.swift */, 9A944D5C24492A8B0058F32A /* popup.swift */, 9A81C74F24499D6600825D92 /* settings.swift */, - 9A944D5E24492AA60058F32A /* Constants.swift */, ); path = ModuleKit; sourceTree = ""; @@ -1442,6 +1442,7 @@ 9A81C7702449B8D500825D92 /* Charts.swift in Sources */, 9A0C82E624460F9A00FAE3D4 /* extensions.swift in Sources */, 9A0C82E724460F9C00FAE3D4 /* updater.swift in Sources */, + 9A885B1A26513253000E43FE /* constants.swift in Sources */, 9A1D5E4B25235C8100B82BFC /* helpers.swift in Sources */, 9A0C82EE2446124800FAE3D4 /* SystemKit.swift in Sources */, 9A9D728A24471FAE005CF997 /* SMC.swift in Sources */, @@ -1547,7 +1548,6 @@ 9A944D5B244925720058F32A /* widget.swift in Sources */, 9A41530C24ABC3AF00A2BDA7 /* Memory.swift in Sources */, 9A81C75024499D6600825D92 /* settings.swift in Sources */, - 9A944D5F24492AA60058F32A /* Constants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Stats/Supporting Files/bg.lproj/Localizable.strings b/Stats/Supporting Files/bg.lproj/Localizable.strings index 5a58c3d9..e00b5421 100644 --- a/Stats/Supporting Files/bg.lproj/Localizable.strings +++ b/Stats/Supporting Files/bg.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Батерия"; "Text widget" = "Текст"; "Memory widget" = "Памет"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Отваряне на настройките на модула"; diff --git a/Stats/Supporting Files/cs.lproj/Localizable.strings b/Stats/Supporting Files/cs.lproj/Localizable.strings index 6fea1c88..0f1f93e8 100644 --- a/Stats/Supporting Files/cs.lproj/Localizable.strings +++ b/Stats/Supporting Files/cs.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Baterie"; "Text widget" = "Text"; "Memory widget" = "Paměť"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Otevřít nastavení modulu"; diff --git a/Stats/Supporting Files/de.lproj/Localizable.strings b/Stats/Supporting Files/de.lproj/Localizable.strings index 586654b5..c76b822f 100644 --- a/Stats/Supporting Files/de.lproj/Localizable.strings +++ b/Stats/Supporting Files/de.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Akku"; "Text widget" = "Text"; "Memory widget" = "Speicher"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Modul Einstellungen öffnen"; diff --git a/Stats/Supporting Files/en.lproj/Localizable.strings b/Stats/Supporting Files/en.lproj/Localizable.strings index df443d24..f03d38ed 100644 --- a/Stats/Supporting Files/en.lproj/Localizable.strings +++ b/Stats/Supporting Files/en.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Battery"; "Text widget" = "Text"; "Memory widget" = "Memory"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Open module settings"; diff --git a/Stats/Supporting Files/es.lproj/Localizable.strings b/Stats/Supporting Files/es.lproj/Localizable.strings index f8189c82..0622dd54 100644 --- a/Stats/Supporting Files/es.lproj/Localizable.strings +++ b/Stats/Supporting Files/es.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Batería"; "Text widget" = "Texto"; "Memory widget" = "Memoria"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Abrir la configruación del módulo"; diff --git a/Stats/Supporting Files/fr.lproj/Localizable.strings b/Stats/Supporting Files/fr.lproj/Localizable.strings index e31b300a..ae2fc2eb 100644 --- a/Stats/Supporting Files/fr.lproj/Localizable.strings +++ b/Stats/Supporting Files/fr.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Battery"; "Text widget" = "Text"; "Memory widget" = "Memory"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Ouvrir les paramètres du module"; diff --git a/Stats/Supporting Files/hu.lproj/Localizable.strings b/Stats/Supporting Files/hu.lproj/Localizable.strings index 3213270c..c0f8beec 100644 --- a/Stats/Supporting Files/hu.lproj/Localizable.strings +++ b/Stats/Supporting Files/hu.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Battery"; "Text widget" = "Text"; "Memory widget" = "Memory"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Modul beállításainak megnyitása"; diff --git a/Stats/Supporting Files/it.lproj/Localizable.strings b/Stats/Supporting Files/it.lproj/Localizable.strings index 328a1e14..b3d36e5c 100644 --- a/Stats/Supporting Files/it.lproj/Localizable.strings +++ b/Stats/Supporting Files/it.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Battery"; "Text widget" = "Text"; "Memory widget" = "Memory"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Apri impostazioni modulo"; diff --git a/Stats/Supporting Files/ja.lproj/Localizable.strings b/Stats/Supporting Files/ja.lproj/Localizable.strings index fcc4f33c..c4a3375b 100644 --- a/Stats/Supporting Files/ja.lproj/Localizable.strings +++ b/Stats/Supporting Files/ja.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "バッテリー"; "Text widget" = "テキスト"; "Memory widget" = "未使用/使用済み"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "このモジュールの設定を開く"; diff --git a/Stats/Supporting Files/ko.lproj/Localizable.strings b/Stats/Supporting Files/ko.lproj/Localizable.strings index 4526539c..bfa53e66 100644 --- a/Stats/Supporting Files/ko.lproj/Localizable.strings +++ b/Stats/Supporting Files/ko.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Battery"; "Text widget" = "Text"; "Memory widget" = "Memory"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "모듈 설정 열기"; diff --git a/Stats/Supporting Files/nb.lproj/Localizable.strings b/Stats/Supporting Files/nb.lproj/Localizable.strings index 9f6aa475..271e4f19 100644 --- a/Stats/Supporting Files/nb.lproj/Localizable.strings +++ b/Stats/Supporting Files/nb.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Batteri"; "Text widget" = "Tekst"; "Memory widget" = "Tall"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Åpne modulinnstillinger"; diff --git a/Stats/Supporting Files/nl.lproj/Localizable.strings b/Stats/Supporting Files/nl.lproj/Localizable.strings index 5733e9e6..a8443b61 100644 --- a/Stats/Supporting Files/nl.lproj/Localizable.strings +++ b/Stats/Supporting Files/nl.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Batterijwidget"; "Text widget" = "Tekstwidget"; "Memory widget" = "Geheugenwidget"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Open module-instellingen"; diff --git a/Stats/Supporting Files/pl.lproj/Localizable.strings b/Stats/Supporting Files/pl.lproj/Localizable.strings index a464d93a..e5dc1796 100644 --- a/Stats/Supporting Files/pl.lproj/Localizable.strings +++ b/Stats/Supporting Files/pl.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Bateria"; "Text widget" = "Tekst"; "Memory widget" = "Pamięć"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Otwórz ustawienia modułu"; diff --git a/Stats/Supporting Files/pt-BR.lproj/Localizable.strings b/Stats/Supporting Files/pt-BR.lproj/Localizable.strings index 983bc724..07796949 100644 --- a/Stats/Supporting Files/pt-BR.lproj/Localizable.strings +++ b/Stats/Supporting Files/pt-BR.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Bateria"; "Text widget" = "Texto"; "Memory widget" = "Memoria"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Abrir configurações do módulo"; diff --git a/Stats/Supporting Files/pt-PT.lproj/Localizable.strings b/Stats/Supporting Files/pt-PT.lproj/Localizable.strings index 9778d6ba..aba0c13b 100644 --- a/Stats/Supporting Files/pt-PT.lproj/Localizable.strings +++ b/Stats/Supporting Files/pt-PT.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Battery"; "Text widget" = "Text"; "Memory widget" = "Memory"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Abrir configurações do módulo"; diff --git a/Stats/Supporting Files/ro.lproj/Localizable.strings b/Stats/Supporting Files/ro.lproj/Localizable.strings index 6b645093..9e5de1c6 100644 --- a/Stats/Supporting Files/ro.lproj/Localizable.strings +++ b/Stats/Supporting Files/ro.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Battery"; "Text widget" = "Text"; "Memory widget" = "Memory"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Deschide setăriile modulului"; diff --git a/Stats/Supporting Files/ru.lproj/Localizable.strings b/Stats/Supporting Files/ru.lproj/Localizable.strings index 78f07ba8..99b9c371 100644 --- a/Stats/Supporting Files/ru.lproj/Localizable.strings +++ b/Stats/Supporting Files/ru.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Battery"; "Text widget" = "Text"; "Memory widget" = "Memory"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Открыть настройки модуля"; diff --git a/Stats/Supporting Files/tr.lproj/Localizable.strings b/Stats/Supporting Files/tr.lproj/Localizable.strings index 1aa4e9cc..9b552f08 100644 --- a/Stats/Supporting Files/tr.lproj/Localizable.strings +++ b/Stats/Supporting Files/tr.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Batarya"; "Text widget" = "Metin"; "Memory widget" = "Bellek"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Modül ayarlarını aç"; diff --git a/Stats/Supporting Files/uk.lproj/Localizable.strings b/Stats/Supporting Files/uk.lproj/Localizable.strings index 70884dce..28c68bbc 100644 --- a/Stats/Supporting Files/uk.lproj/Localizable.strings +++ b/Stats/Supporting Files/uk.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Battery"; "Text widget" = "Text"; "Memory widget" = "Memory"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Відкрити налаштування модуля"; diff --git a/Stats/Supporting Files/vi.lproj/Localizable.strings b/Stats/Supporting Files/vi.lproj/Localizable.strings index 215d31d5..d53a2edc 100644 --- a/Stats/Supporting Files/vi.lproj/Localizable.strings +++ b/Stats/Supporting Files/vi.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "Pin"; "Text widget" = "Văn bản"; "Memory widget" = "Bộ nhớ"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "Mở cài đặt module"; diff --git a/Stats/Supporting Files/zh-Hans.lproj/Localizable.strings b/Stats/Supporting Files/zh-Hans.lproj/Localizable.strings index dca07d09..0fc4685d 100644 --- a/Stats/Supporting Files/zh-Hans.lproj/Localizable.strings +++ b/Stats/Supporting Files/zh-Hans.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "电池"; "Text widget" = "文本"; "Memory widget" = "容量"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "打开模块设置"; diff --git a/Stats/Supporting Files/zh-Hant.lproj/Localizable.strings b/Stats/Supporting Files/zh-Hant.lproj/Localizable.strings index 380984a2..b50fed08 100644 --- a/Stats/Supporting Files/zh-Hant.lproj/Localizable.strings +++ b/Stats/Supporting Files/zh-Hant.lproj/Localizable.strings @@ -94,6 +94,7 @@ "Battery widget" = "電池"; "Text widget" = "文字"; "Memory widget" = "記憶體"; +"Static width" = "Static width"; // Module Kit "Open module settings" = "打開模組設定"; diff --git a/ModuleKit/Constants.swift b/StatsKit/constants.swift similarity index 97% rename from ModuleKit/Constants.swift rename to StatsKit/constants.swift index 0a105082..e8ef1ca3 100644 --- a/ModuleKit/Constants.swift +++ b/StatsKit/constants.swift @@ -1,6 +1,6 @@ // -// Constants.swift -// ModuleKit +// constants.swift +// StatsKit // // Created by Serhiy Mytrovtsiy on 15/04/2020. // Using Swift 5.0. diff --git a/StatsKit/extensions.swift b/StatsKit/extensions.swift index cff12c14..49c64c0d 100644 --- a/StatsKit/extensions.swift +++ b/StatsKit/extensions.swift @@ -266,6 +266,7 @@ public extension NSView { row.addSubview(toggle) row.addSubview(rowTitle) + row.widthAnchor.constraint(equalToConstant: row.bounds.width).isActive = true row.heightAnchor.constraint(equalToConstant: row.bounds.height).isActive = true return row @@ -304,6 +305,7 @@ public extension NSView { row.addSubview(select) row.addSubview(rowTitle) + row.widthAnchor.constraint(equalToConstant: row.bounds.width).isActive = true row.heightAnchor.constraint(equalToConstant: row.bounds.height).isActive = true return row @@ -342,6 +344,9 @@ public extension NSView { row.addSubview(select) row.addSubview(rowTitle) + row.widthAnchor.constraint(equalToConstant: row.bounds.width).isActive = true + row.heightAnchor.constraint(equalToConstant: row.bounds.height).isActive = true + return row } @@ -361,6 +366,9 @@ public extension NSView { row.addSubview(select) row.addSubview(rowTitle) + row.widthAnchor.constraint(equalToConstant: row.bounds.width).isActive = true + row.heightAnchor.constraint(equalToConstant: row.bounds.height).isActive = true + return row } diff --git a/StatsKit/helpers.swift b/StatsKit/helpers.swift index a25608d8..28fede8f 100644 --- a/StatsKit/helpers.swift +++ b/StatsKit/helpers.swift @@ -801,3 +801,40 @@ public func process(path: String, arguments: [String]) -> String? { return output } + +public class SettingsContainerView: NSStackView { + public init(width: CGFloat) { + super.init(frame: NSRect( + x: Constants.Settings.margin, + y: 0, + width: width - (Constants.Settings.margin*2), + height: 0 + )) + + self.orientation = .vertical + self.distribution = .gravityAreas + self.edgeInsets = NSEdgeInsets( + top: Constants.Settings.margin, + left: Constants.Settings.margin, + bottom: Constants.Settings.margin, + right: Constants.Settings.margin + ) + self.spacing = Constants.Settings.margin + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func resize() { + let h = self.arrangedSubviews.map({ $0.bounds.height + self.spacing }).reduce(0, +) - self.spacing + self.edgeInsets.top + self.edgeInsets.bottom + if self.frame.size.height != h { + self.setFrameSize(NSSize(width: self.bounds.width, height: h)) + } + } + + public override func addArrangedSubview(_ view: NSView) { + super.addArrangedSubview(view) + self.resize() + } +}