aboutsummaryrefslogtreecommitdiff
path: root/Hotline/macOS/SettingsView.swift
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2023-12-24 12:10:02 -0800
committerDustin Mierau <dustin@mierau.me>2023-12-24 12:10:02 -0800
commita4cbaea0b12b7dd42133b4bd14f1371f1000fcc0 (patch)
treee09e601d0d41024e9ed8c49c2b2c53a996cb7297 /Hotline/macOS/SettingsView.swift
parente2eccde99075d2ca355a80bbbb7a3160d766b920 (diff)
New Preferences window on macOS with support for changing some basic moderation settings, plus username (finally) and user icon.1.0beta
Diffstat (limited to 'Hotline/macOS/SettingsView.swift')
-rw-r--r--Hotline/macOS/SettingsView.swift94
1 files changed, 94 insertions, 0 deletions
diff --git a/Hotline/macOS/SettingsView.swift b/Hotline/macOS/SettingsView.swift
new file mode 100644
index 0000000..2b11ecc
--- /dev/null
+++ b/Hotline/macOS/SettingsView.swift
@@ -0,0 +1,94 @@
+import SwiftUI
+
+struct GeneralSettingsView: View {
+ @Environment(Prefs.self) private var preferences: Prefs
+
+ var body: some View {
+ @Bindable var preferences = preferences
+
+ Form {
+ TextField("Your Name", text: $preferences.username, prompt: Text("guest"))
+ Toggle("Refuse private messages", isOn: $preferences.refusePrivateMessages)
+ Toggle("Refuse private chat", isOn: $preferences.refusePrivateChat)
+ Toggle("Automatic Response", isOn: $preferences.enableAutomaticMessage)
+ if preferences.enableAutomaticMessage {
+ TextField("", text: $preferences.automaticMessage, prompt: Text("Write a response message"))
+ .lineLimit(2)
+ .multilineTextAlignment(.leading)
+// .fixedSize(horizontal: true, vertical: false)
+ .frame(maxWidth: .infinity)
+// .lineLimit(2, reservesSpace: true)
+ }
+ }
+ .padding(20)
+ .frame(width: 350)
+ }
+}
+
+struct IconSettingsView: View {
+ @Environment(Prefs.self) private var preferences: Prefs
+
+// @AppStorage(Prefs.userIconID) private var userIconID: Int = Prefs.defaultIconID
+
+ var body: some View {
+ @Bindable var preferences = preferences
+
+ Form {
+ ScrollView {
+ LazyVGrid(columns: [
+ GridItem(.flexible(minimum: 20, maximum: 50)),
+ GridItem(.flexible(minimum: 20, maximum: 50)),
+ GridItem(.flexible(minimum: 20, maximum: 50)),
+ GridItem(.flexible(minimum: 20, maximum: 50)),
+ GridItem(.flexible(minimum: 20, maximum: 50)),
+ GridItem(.flexible(minimum: 20, maximum: 50)),
+ GridItem(.flexible(minimum: 20, maximum: 50))
+ ]) {
+ ForEach(Hotline.defaultIconSet.sorted(by: >), id: \.key) { iconID, iconText in
+ Text(iconText)
+ .font(.largeTitle)
+ .frame(maxWidth: .infinity)
+ .padding(4)
+ .background(iconID == preferences.userIconID ? .blue : .clear)
+ .clipShape(RoundedRectangle(cornerRadius: 5))
+ .onTapGesture {
+ preferences.userIconID = iconID
+ }
+ }
+ }
+ .padding()
+ }
+// for (iconID, iconText) in Hotline.defaultIconSet {
+
+// Text(iconText)
+// }
+ }
+ .frame(width: 350, height: 300)
+
+ }
+}
+
+struct SettingsView: View {
+ private enum Tabs: Hashable {
+ case general, icon
+ }
+
+ var body: some View {
+ TabView {
+ GeneralSettingsView()
+ .tabItem {
+ Label("General", systemImage: "gear")
+ }
+ .tag(Tabs.general)
+ IconSettingsView()
+ .tabItem {
+ Label("Icon", systemImage: "person.crop.circle")
+ }
+ .tag(Tabs.icon)
+ }
+ }
+}
+
+#Preview {
+ SettingsView()
+}