Files
SnipMC/Sources/SettingsView.swift
2026-07-02 09:08:34 +02:00

77 lines
2.7 KiB
Swift

import AppKit
import ServiceManagement
import SwiftUI
struct SettingsView: View {
@EnvironmentObject var coordinator: AppCoordinator
@State private var launchAtLogin = SMAppService.mainApp.status == .enabled
var body: some View {
Form {
Section("Allgemein") {
Toggle("Mit dem System starten", isOn: $launchAtLogin)
.onChange(of: launchAtLogin) { _, newValue in
do {
if newValue {
try SMAppService.mainApp.register()
} else {
try SMAppService.mainApp.unregister()
}
} catch {
launchAtLogin = SMAppService.mainApp.status == .enabled
}
}
}
Section("Nach der Aufnahme") {
Picker("Aktion:", selection: $coordinator.outputAction) {
ForEach(OutputAction.allCases) { action in
Text(action.label).tag(action)
}
}
.pickerStyle(.radioGroup)
Picker("Format:", selection: $coordinator.imageFormat) {
ForEach(ImageFormat.allCases) { format in
Text(format.label).tag(format)
}
}
.pickerStyle(.segmented)
.frame(width: 160)
HStack {
Text("Speicherort:")
Text(coordinator.saveFolder.path)
.foregroundStyle(.secondary)
.lineLimit(1)
.truncationMode(.middle)
Spacer()
Button("Ändern…") { chooseFolder() }
}
}
Section("Tastenkürzel") {
HotKeyRecorderView(title: "Ganzer Bildschirm", combo: $coordinator.hotKeyFullScreen)
HotKeyRecorderView(title: "Fenster", combo: $coordinator.hotKeyWindow)
HotKeyRecorderView(title: "Bereich auswählen", combo: $coordinator.hotKeyRegion)
}
}
.padding(20)
.frame(width: 440)
}
private func chooseFolder() {
let panel = NSOpenPanel()
panel.canChooseDirectories = true
panel.canChooseFiles = false
panel.canCreateDirectories = true
panel.allowsMultipleSelection = false
panel.directoryURL = coordinator.saveFolder
panel.prompt = "Auswählen"
if panel.runModal() == .OK, let url = panel.url {
coordinator.saveFolder = url
}
}
}