From 41171c31dbe3bcad5481a2602ff696ff6383e63f Mon Sep 17 00:00:00 2001 From: Christoph Hagen Date: Wed, 5 Feb 2025 21:21:41 +0100 Subject: [PATCH] Fix settings reacting to language change --- CHDataManagement/Main/MainView.swift | 6 +-- .../Audio/AudioSettingsDetailView.swift | 6 +-- .../NavigationBarSettingsView.swift | 24 ++++++----- .../Pages/PageSettingsDetailView.swift | 8 ++-- .../Settings/Posts/PostFeedSettingsView.swift | 10 +++-- .../Views/Settings/SettingsContentView.swift | 20 +++++---- .../Views/Settings/SettingsSheet.swift | 41 +++++++++++-------- .../Settings/Tags/TagOverviewDetailView.swift | 4 +- 8 files changed, 70 insertions(+), 49 deletions(-) diff --git a/CHDataManagement/Main/MainView.swift b/CHDataManagement/Main/MainView.swift index 708d25f..1ef843a 100644 --- a/CHDataManagement/Main/MainView.swift +++ b/CHDataManagement/Main/MainView.swift @@ -211,11 +211,9 @@ struct MainView: App { switch content.saveState { case .storageNotInitialized: showInitialSheet() - case .isSaved: + case .isSaved, .needsSave: content.saveUnconditionally() - case .needsSave: - content.saveUnconditionally() - case .failedToSave: + case .failedToSave, .savingPausedDueToLoadErrors: showStorageErrorSheet = true } } diff --git a/CHDataManagement/Views/Settings/Audio/AudioSettingsDetailView.swift b/CHDataManagement/Views/Settings/Audio/AudioSettingsDetailView.swift index 69e8d8f..87557d7 100644 --- a/CHDataManagement/Views/Settings/Audio/AudioSettingsDetailView.swift +++ b/CHDataManagement/Views/Settings/Audio/AudioSettingsDetailView.swift @@ -2,9 +2,9 @@ import SwiftUI struct AudioSettingsDetailView: View { - @Environment(\.language) - private var language - + @Binding + var language: ContentLanguage + @ObservedObject var audioPlayer: AudioPlayerSettings diff --git a/CHDataManagement/Views/Settings/Navigation Bar/NavigationBarSettingsView.swift b/CHDataManagement/Views/Settings/Navigation Bar/NavigationBarSettingsView.swift index 6e18f8f..2354df4 100644 --- a/CHDataManagement/Views/Settings/Navigation Bar/NavigationBarSettingsView.swift +++ b/CHDataManagement/Views/Settings/Navigation Bar/NavigationBarSettingsView.swift @@ -3,8 +3,8 @@ import SFSafeSymbols struct NavigationBarSettingsView: View { - @Environment(\.language) - private var language + @Binding + var language: ContentLanguage @EnvironmentObject private var content: Content @@ -30,16 +30,17 @@ struct NavigationBarSettingsView: View { } .buttonStyle(.plain) } - - ForEach(content.settings.navigation.navigationItems) { tag in - TagView(text: tag.title(in: language)) - .foregroundStyle(.white) + FlowHStack { + ForEach(content.settings.navigation.navigationItems) { tag in + TagView(text: tag.title(in: language)) + .foregroundStyle(.white) + } } - Text("Select the tags to show in the navigation bar. The number should be even.") + Text("Select the tags to show in the navigation bar.") .foregroundStyle(.secondary) . padding(.bottom) - - LocalizedNavigationBarSettingsView(settings: content.settings.navigation.localized(in: language)) + let localized = content.settings.navigation.localized(in: language) + LocalizedNavigationBarSettingsView(settings: localized) } .padding() } @@ -48,11 +49,14 @@ struct NavigationBarSettingsView: View { isPresented: $showItemPicker, selectedItems: $content.settings.navigation.navigationItems) } + .onChange(of: language) { oldValue, newValue in + print("Language changed from \(oldValue) to \(newValue)") + } } } #Preview { - NavigationBarSettingsView() + NavigationBarSettingsView(language: .constant(.english)) .environmentObject(Content.mock) .padding() } diff --git a/CHDataManagement/Views/Settings/Pages/PageSettingsDetailView.swift b/CHDataManagement/Views/Settings/Pages/PageSettingsDetailView.swift index b518099..a020d4f 100644 --- a/CHDataManagement/Views/Settings/Pages/PageSettingsDetailView.swift +++ b/CHDataManagement/Views/Settings/Pages/PageSettingsDetailView.swift @@ -2,8 +2,8 @@ import SwiftUI struct PageSettingsDetailView: View { - @Environment(\.language) - private var language + @Binding + var language: ContentLanguage @ObservedObject var pageSettings: PageSettings @@ -67,6 +67,8 @@ struct PageSettingsDetailView: View { #Preview { - PageSettingsDetailView(pageSettings: .default) + PageSettingsDetailView( + language: .constant(.english), + pageSettings: .default) .padding() } diff --git a/CHDataManagement/Views/Settings/Posts/PostFeedSettingsView.swift b/CHDataManagement/Views/Settings/Posts/PostFeedSettingsView.swift index d8b9727..7017776 100644 --- a/CHDataManagement/Views/Settings/Posts/PostFeedSettingsView.swift +++ b/CHDataManagement/Views/Settings/Posts/PostFeedSettingsView.swift @@ -2,8 +2,8 @@ import SwiftUI struct PostFeedSettingsView: View { - @Environment(\.language) - private var language + @Binding + var language: ContentLanguage @ObservedObject var postSettings: PostSettings @@ -54,6 +54,8 @@ struct PostFeedSettingsView: View { #Preview { - PostFeedSettingsView(postSettings: .default) - .padding() + PostFeedSettingsView( + language: .constant(.english), + postSettings: .default) + .padding() } diff --git a/CHDataManagement/Views/Settings/SettingsContentView.swift b/CHDataManagement/Views/Settings/SettingsContentView.swift index 2d2b2b8..caecab5 100644 --- a/CHDataManagement/Views/Settings/SettingsContentView.swift +++ b/CHDataManagement/Views/Settings/SettingsContentView.swift @@ -2,7 +2,11 @@ import SwiftUI struct SettingsContentView: View { - let section: SettingsSection + @Binding + var language: ContentLanguage + + @Binding + var section: SettingsSection @EnvironmentObject private var content: Content @@ -14,19 +18,21 @@ struct SettingsContentView: View { case .paths: PathSettingsView() case .navigationBar: - NavigationBarSettingsView() + NavigationBarSettingsView(language: $language) case .postFeed: - PostFeedSettingsView(postSettings: content.settings.posts) + PostFeedSettingsView(language: $language, postSettings: content.settings.posts) case .pages: - PageSettingsDetailView(pageSettings: content.settings.pages) + PageSettingsDetailView(language: $language, pageSettings: content.settings.pages) case .tagOverview: - TagOverviewDetailView() + TagOverviewDetailView(language: $language) case .audioPlayer: - AudioSettingsDetailView(audioPlayer: content.settings.audioPlayer) + AudioSettingsDetailView(language: $language, audioPlayer: content.settings.audioPlayer) } } } #Preview { - SettingsContentView(section: .paths) + SettingsContentView( + language: .constant(.english), + section: .constant(.paths)) } diff --git a/CHDataManagement/Views/Settings/SettingsSheet.swift b/CHDataManagement/Views/Settings/SettingsSheet.swift index a72abfe..6a0e89d 100644 --- a/CHDataManagement/Views/Settings/SettingsSheet.swift +++ b/CHDataManagement/Views/Settings/SettingsSheet.swift @@ -41,30 +41,39 @@ struct SettingsSheet: View { var body: some View { VStack(spacing: 0) { - HStack(alignment: .top) { - DetailTitle( - title: title, - text: text) - Spacer() - Picker("", selection: $language) { - Text("English") - .tag(ContentLanguage.english) - Text("German") - .tag(ContentLanguage.german) - } - .pickerStyle(.segmented) - Button(action: { dismiss() }) { - Text("Close") + VStack(alignment: .leading) { + HStack(alignment: .top) { + Text(title) + .font(.largeTitle) + .bold() + Spacer() + HStack(alignment: .center) { + Picker("", selection: $language) { + Text("English") + .tag(ContentLanguage.english) + Text("German") + .tag(ContentLanguage.german) + } + .pickerStyle(.segmented) + Button(action: { dismiss() }) { + Text("Close") + } + }.frame(width: 200) } + Text(text) + .foregroundStyle(.secondary) + .padding(.bottom, 30) + } + .frame(height: 100) .padding() .background(Color(NSColor.windowBackgroundColor)) NavigationSplitView { SettingsListView(section: $section) .navigationSplitViewColumnWidth(min: sidebarWidth, ideal: sidebarWidth, max: sidebarWidth) } detail: { - SettingsContentView(section: section) + SettingsContentView(language: $language, section: $section) } - }.frame(width: 550, height: 600) + }.frame(width: 600, height: 600) } } diff --git a/CHDataManagement/Views/Settings/Tags/TagOverviewDetailView.swift b/CHDataManagement/Views/Settings/Tags/TagOverviewDetailView.swift index f5c2e2b..d5155ee 100644 --- a/CHDataManagement/Views/Settings/Tags/TagOverviewDetailView.swift +++ b/CHDataManagement/Views/Settings/Tags/TagOverviewDetailView.swift @@ -2,8 +2,8 @@ import SwiftUI struct TagOverviewDetailView: View { - @Environment(\.language) - private var language + @Binding + var language: ContentLanguage @EnvironmentObject private var content: Content