migrate settings persistence to ~/.swiftly/config.json
This commit is contained in:
parent
ecd01dfb37
commit
c8f883742b
|
|
@ -3,10 +3,10 @@ import SwiftUI
|
|||
struct ContentView: View {
|
||||
@ObservedObject var state: AppState
|
||||
@State private var sidebarVisible: Bool = false
|
||||
@AppStorage("themeMode") private var themeMode: String = "auto"
|
||||
@State private var themeVersion: Int = 0
|
||||
|
||||
var body: some View {
|
||||
let _ = themeMode
|
||||
let _ = themeVersion
|
||||
HSplitView {
|
||||
if sidebarVisible {
|
||||
SidebarView(state: state)
|
||||
|
|
@ -20,6 +20,9 @@ struct ContentView: View {
|
|||
.onReceive(NotificationCenter.default.publisher(for: .toggleSidebar)) { _ in
|
||||
withAnimation { sidebarVisible.toggle() }
|
||||
}
|
||||
.onReceive(NotificationCenter.default.publisher(for: .settingsChanged)) { _ in
|
||||
themeVersion += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1864,7 +1864,7 @@ class LineNumberTextView: NSTextView {
|
|||
let text = string as NSString
|
||||
guard text.length > 0 else { return }
|
||||
|
||||
let lineMode = UserDefaults.standard.string(forKey: "lineIndicatorMode") ?? "on"
|
||||
let lineMode = ConfigManager.shared.lineIndicatorMode
|
||||
|
||||
var containerVisible = visibleRect
|
||||
containerVisible.origin.x -= origin.x
|
||||
|
|
|
|||
|
|
@ -30,8 +30,9 @@ enum LineIndicatorMode: String, CaseIterable {
|
|||
}
|
||||
|
||||
struct SettingsView: View {
|
||||
@AppStorage("themeMode") private var themeMode: String = "auto"
|
||||
@AppStorage("lineIndicatorMode") private var lineIndicatorMode: String = "on"
|
||||
@State private var themeMode: String = ConfigManager.shared.themeMode
|
||||
@State private var lineIndicatorMode: String = ConfigManager.shared.lineIndicatorMode
|
||||
@State private var autoSaveDir: String = ConfigManager.shared.autoSaveDirectory
|
||||
|
||||
var body: some View {
|
||||
let palette = Theme.current
|
||||
|
|
@ -53,26 +54,47 @@ struct SettingsView: View {
|
|||
}
|
||||
.pickerStyle(.segmented)
|
||||
}
|
||||
|
||||
Section("Auto-Save") {
|
||||
HStack {
|
||||
TextField("Directory", text: $autoSaveDir)
|
||||
.textFieldStyle(.roundedBorder)
|
||||
Button("Choose...") {
|
||||
let panel = NSOpenPanel()
|
||||
panel.canChooseFiles = false
|
||||
panel.canChooseDirectories = true
|
||||
panel.allowsMultipleSelection = false
|
||||
if panel.runModal() == .OK, let url = panel.url {
|
||||
autoSaveDir = url.path
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.formStyle(.grouped)
|
||||
.frame(width: 320, height: 180)
|
||||
.frame(width: 400, height: 260)
|
||||
.background(Color(ns: palette.base))
|
||||
.onChange(of: themeMode) {
|
||||
ConfigManager.shared.themeMode = themeMode
|
||||
DispatchQueue.main.async {
|
||||
applyThemeAppearance()
|
||||
NotificationCenter.default.post(name: .settingsChanged, object: nil)
|
||||
}
|
||||
}
|
||||
.onChange(of: lineIndicatorMode) {
|
||||
ConfigManager.shared.lineIndicatorMode = lineIndicatorMode
|
||||
DispatchQueue.main.async {
|
||||
NotificationCenter.default.post(name: .settingsChanged, object: nil)
|
||||
}
|
||||
}
|
||||
.onChange(of: autoSaveDir) {
|
||||
ConfigManager.shared.autoSaveDirectory = autoSaveDir
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func applyThemeAppearance() {
|
||||
let mode = UserDefaults.standard.string(forKey: "themeMode") ?? "auto"
|
||||
let mode = ConfigManager.shared.themeMode
|
||||
switch mode {
|
||||
case "dark":
|
||||
NSApp.appearance = NSAppearance(named: .darkAqua)
|
||||
|
|
@ -98,10 +120,10 @@ class SettingsWindowController {
|
|||
|
||||
let settingsView = SettingsView()
|
||||
let hostingView = NSHostingView(rootView: settingsView)
|
||||
hostingView.frame = NSRect(x: 0, y: 0, width: 320, height: 200)
|
||||
hostingView.frame = NSRect(x: 0, y: 0, width: 400, height: 280)
|
||||
|
||||
let w = NSWindow(
|
||||
contentRect: NSRect(x: 0, y: 0, width: 320, height: 200),
|
||||
contentRect: NSRect(x: 0, y: 0, width: 400, height: 280),
|
||||
styleMask: [.titled, .closable],
|
||||
backing: .buffered,
|
||||
defer: false
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ struct Theme {
|
|||
)
|
||||
|
||||
static var current: CatppuccinPalette {
|
||||
let mode = UserDefaults.standard.string(forKey: "themeMode") ?? "auto"
|
||||
let mode = ConfigManager.shared.themeMode
|
||||
switch mode {
|
||||
case "dark": return mocha
|
||||
case "light": return latte
|
||||
|
|
|
|||
Loading…
Reference in New Issue