From a13ce80d26948daa235ea3029e7f3db66e13094d Mon Sep 17 00:00:00 2001 From: LMZ Date: Mon, 20 Apr 2026 17:09:31 +0800 Subject: [PATCH] feat: wire SettingsView to the Settings scene (#17) --- .../ProcessBarMonitorApp.swift | 2 +- .../Resources/en.lproj/Localizable.strings | 2 + .../zh-Hans.lproj/Localizable.strings | 2 + Sources/ProcessBarMonitor/SettingsView.swift | 59 +++++++++++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 Sources/ProcessBarMonitor/SettingsView.swift diff --git a/Sources/ProcessBarMonitor/ProcessBarMonitorApp.swift b/Sources/ProcessBarMonitor/ProcessBarMonitorApp.swift index 9865caf..2cc887f 100644 --- a/Sources/ProcessBarMonitor/ProcessBarMonitorApp.swift +++ b/Sources/ProcessBarMonitor/ProcessBarMonitorApp.swift @@ -22,7 +22,7 @@ struct ProcessBarMonitorApp: App { .menuBarExtraStyle(.window) Settings { - EmptyView() + SettingsView(viewModel: viewModel) } } } diff --git a/Sources/ProcessBarMonitor/Resources/en.lproj/Localizable.strings b/Sources/ProcessBarMonitor/Resources/en.lproj/Localizable.strings index 76268fa..bcb93f9 100644 --- a/Sources/ProcessBarMonitor/Resources/en.lproj/Localizable.strings +++ b/Sources/ProcessBarMonitor/Resources/en.lproj/Localizable.strings @@ -62,3 +62,5 @@ "button.copy_diagnostics" = "Copy Diagnostics"; "status.diagnostics_copied" = "Diagnostics copied to clipboard."; "status.diagnostics_copy_failed" = "Failed to copy diagnostics."; +"settings.section.display" = "Display"; +"settings.section.startup" = "Startup"; diff --git a/Sources/ProcessBarMonitor/Resources/zh-Hans.lproj/Localizable.strings b/Sources/ProcessBarMonitor/Resources/zh-Hans.lproj/Localizable.strings index 88c1eb6..41069a1 100644 --- a/Sources/ProcessBarMonitor/Resources/zh-Hans.lproj/Localizable.strings +++ b/Sources/ProcessBarMonitor/Resources/zh-Hans.lproj/Localizable.strings @@ -62,3 +62,5 @@ "button.copy_diagnostics" = "复制诊断信息"; "status.diagnostics_copied" = "诊断信息已复制到剪贴板。"; "status.diagnostics_copy_failed" = "复制诊断信息失败。"; +"settings.section.display" = "显示"; +"settings.section.startup" = "启动"; diff --git a/Sources/ProcessBarMonitor/SettingsView.swift b/Sources/ProcessBarMonitor/SettingsView.swift new file mode 100644 index 0000000..9c8b755 --- /dev/null +++ b/Sources/ProcessBarMonitor/SettingsView.swift @@ -0,0 +1,59 @@ +import SwiftUI + +struct SettingsView: View { + @ObservedObject var viewModel: MonitorViewModel + + var body: some View { + Form { + Section { + Picker(L10n.string("picker.menu_bar"), selection: $viewModel.menuBarDisplayMode) { + ForEach(MenuBarDisplayMode.allCases) { mode in + Text(mode.title).tag(mode) + } + } + + Picker(L10n.string("picker.temperature"), selection: $viewModel.temperatureMode) { + ForEach(TemperatureMode.allCases) { mode in + Text(mode.title).tag(mode) + } + } + + Picker(L10n.string("picker.rows"), selection: $viewModel.processLimit) { + Text("5").tag(5) + Text("8").tag(8) + Text("12").tag(12) + Text("20").tag(20) + } + .onChange(of: viewModel.processLimit) { _ in + viewModel.recomputeVisibleProcesses() + } + } header: { + Text(L10n.string("settings.section.display")) + } + + Section { + Toggle(L10n.string("toggle.launch_at_login"), isOn: Binding( + get: { viewModel.launchAtLogin.isEnabled }, + set: { newValue in + viewModel.setLaunchAtLogin(newValue) + } + )) + } header: { + Text(L10n.string("settings.section.startup")) + } + + if let statusMessage = viewModel.statusMessage { + Section { + Text(statusMessage) + .font(.caption) + .foregroundStyle(.secondary) + .onTapGesture { + viewModel.clearStatusMessage() + } + } + } + } + .formStyle(.grouped) + .frame(minWidth: 420, minHeight: 300) + } +} \ No newline at end of file