Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Sources/ProcessBarMonitor/ProcessBarMonitorApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ struct ProcessBarMonitorApp: App {
.menuBarExtraStyle(.window)

Settings {
EmptyView()
SettingsView(viewModel: viewModel)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,5 @@
"button.copy_diagnostics" = "复制诊断信息";
"status.diagnostics_copied" = "诊断信息已复制到剪贴板。";
"status.diagnostics_copy_failed" = "复制诊断信息失败。";
"settings.section.display" = "显示";
"settings.section.startup" = "启动";
59 changes: 59 additions & 0 deletions Sources/ProcessBarMonitor/SettingsView.swift
Original file line number Diff line number Diff line change
@@ -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)
}
}