diff --git a/Multiplatform/Shared/MainApp.swift b/Multiplatform/Shared/MainApp.swift index 58ec7f342..5b1f7a603 100644 --- a/Multiplatform/Shared/MainApp.swift +++ b/Multiplatform/Shared/MainApp.swift @@ -13,6 +13,7 @@ struct MainApp: App { #if os(macOS) @NSApplicationDelegateAdaptor(AppDelegate.self) private var delegate + @State private var selectedPane: MacPreferencePane = .general #endif #if os(iOS) @UIApplicationDelegateAdaptor(AppDelegate.self) private var delegate @@ -20,7 +21,7 @@ struct MainApp: App { @StateObject private var refreshProgress = RefreshProgressModel() @StateObject private var defaults = AppDefaults.shared - + @SceneBuilder var body: some Scene { #if os(macOS) WindowGroup { @@ -76,12 +77,41 @@ struct MainApp: App { // Mac Preferences Settings { - MacPreferencesView() - .padding() + TabView(selection: $selectedPane) { + GeneralPreferencesView() + .tabItem { + Image(systemName: "gearshape") + .font(.title2) + Text("General") + } + .tag(MacPreferencePane.general) + + AccountsPreferencesView() + .tabItem { + Image(systemName: "at") + .font(.title2) + Text("Accounts") + } + .tag(MacPreferencePane.accounts) + + LayoutPreferencesView() + .tabItem { + Image(systemName: "eyeglasses") + .font(.title2) + Text("Viewing") + } + .tag(MacPreferencePane.viewing) + + AdvancedPreferencesView() + .tabItem { + Image(systemName: "scale.3d") + .font(.title2) + Text("Advanced") + } + .tag(MacPreferencePane.advanced) + } .frame(width: 500) - .navigationTitle("Preferences") - .environmentObject(defaults) - .preferredColorScheme(AppDefaults.userInterfaceColorScheme) + .padding() } #endif diff --git a/Multiplatform/macOS/Preferences/MacPreferencePanes.swift b/Multiplatform/macOS/Preferences/MacPreferencePanes.swift new file mode 100644 index 000000000..6a5624365 --- /dev/null +++ b/Multiplatform/macOS/Preferences/MacPreferencePanes.swift @@ -0,0 +1,28 @@ +// +// MacPreferencesView.swift +// macOS +// +// Created by Stuart Breckenridge on 27/6/20. +// + +import SwiftUI + +enum MacPreferencePane: Int, CaseIterable { + case general = 1 + case accounts = 2 + case viewing = 3 + case advanced = 4 + + var description: String { + switch self { + case .general: + return "General" + case .accounts: + return "Accounts" + case .viewing: + return "Appearance" + case .advanced: + return "Advanced" + } + } +} diff --git a/Multiplatform/macOS/Preferences/MacPreferencesView.swift b/Multiplatform/macOS/Preferences/MacPreferencesView.swift deleted file mode 100644 index 3a35ab725..000000000 --- a/Multiplatform/macOS/Preferences/MacPreferencesView.swift +++ /dev/null @@ -1,113 +0,0 @@ -// -// MacPreferencesView.swift -// macOS -// -// Created by Stuart Breckenridge on 27/6/20. -// - -import SwiftUI - -enum PreferencePane: Int, CaseIterable { - case general = 0 - case accounts = 1 - case viewing = 2 - case advanced = 3 - - var description: String { - switch self { - case .general: - return "General" - case .accounts: - return "Accounts" - case .viewing: - return "Appearance" - case .advanced: - return "Advanced" - } - } -} - -struct MacPreferencesView: View { - - @EnvironmentObject var defaults: AppDefaults - @State private var preferencePane: PreferencePane = .general - - var body: some View { - VStack { - switch preferencePane { - case .general: - GeneralPreferencesView() - .environmentObject(defaults) - case .accounts: - AccountsPreferencesView() - .environmentObject(defaults) - case .viewing: - LayoutPreferencesView() - .environmentObject(defaults) - case .advanced: - AdvancedPreferencesView() - .environmentObject(defaults) - } - } - .toolbar { - ToolbarItem { - HStack { - Button(action: { - preferencePane = .general - }, label: { - VStack { - Image(systemName: "gearshape") - .font(.title2) - Text("General") - }.foregroundColor( - preferencePane == .general ? Color("AccentColor") : Color.gray - ) - }).frame(width: 70, height: 50) - Button(action: { - preferencePane = .accounts - }, label: { - VStack { - Image(systemName: "at") - .font(.title2) - Text("Accounts") - }.foregroundColor( - preferencePane == .accounts ? Color("AccentColor") : Color.gray - ) - }).frame(width: 70, height: 50) - Button(action: { - preferencePane = .viewing - }, label: { - VStack { - Image(systemName: "eyeglasses") - .font(.title2) - Text("Viewing") - }.foregroundColor( - preferencePane == .viewing ? Color("AccentColor") : Color.gray - ) - }).frame(width: 70, height: 50) - Button(action: { - preferencePane = .advanced - }, label: { - VStack { - Image(systemName: "scale.3d") - .font(.title2) - Text("Advanced") - }.foregroundColor( - preferencePane == .advanced ? Color("AccentColor") : Color.gray - ) - }).frame(width: 70, height: 50) - } - } - } - - } -} - - - - -struct MacPreferencesView_Previews: PreviewProvider { - static var previews: some View { - MacPreferencesView() - } -} diff --git a/Multiplatform/macOS/Preferences/Preference Panes/Advanced/AdvancedPreferencesView.swift b/Multiplatform/macOS/Preferences/Preference Panes/Advanced/AdvancedPreferencesView.swift index 7159341b5..44e93770b 100644 --- a/Multiplatform/macOS/Preferences/Preference Panes/Advanced/AdvancedPreferencesView.swift +++ b/Multiplatform/macOS/Preferences/Preference Panes/Advanced/AdvancedPreferencesView.swift @@ -9,7 +9,7 @@ import SwiftUI struct AdvancedPreferencesView: View { - @EnvironmentObject private var preferences: AppDefaults + @StateObject private var preferences = AppDefaults.shared @StateObject private var viewModel = AdvancedPreferencesModel() var body: some View { diff --git a/Multiplatform/macOS/Preferences/Preference Panes/General/GeneralPreferencesView.swift b/Multiplatform/macOS/Preferences/Preference Panes/General/GeneralPreferencesView.swift index d32441432..3d88312c1 100644 --- a/Multiplatform/macOS/Preferences/Preference Panes/General/GeneralPreferencesView.swift +++ b/Multiplatform/macOS/Preferences/Preference Panes/General/GeneralPreferencesView.swift @@ -9,7 +9,7 @@ import SwiftUI struct GeneralPreferencesView: View { - @EnvironmentObject private var defaults: AppDefaults + @StateObject private var defaults = AppDefaults.shared @StateObject private var preferences = GeneralPreferencesModel() var body: some View { diff --git a/Multiplatform/macOS/Preferences/Preference Panes/Viewing/LayoutPreferencesView.swift b/Multiplatform/macOS/Preferences/Preference Panes/Viewing/LayoutPreferencesView.swift index 0d7e0cc95..b5c1f72e6 100644 --- a/Multiplatform/macOS/Preferences/Preference Panes/Viewing/LayoutPreferencesView.swift +++ b/Multiplatform/macOS/Preferences/Preference Panes/Viewing/LayoutPreferencesView.swift @@ -10,7 +10,7 @@ import SwiftUI struct LayoutPreferencesView: View { - @EnvironmentObject var defaults: AppDefaults + @StateObject private var defaults = AppDefaults.shared private let colorPalettes = UserInterfaceColorPalette.allCases private let sampleTitle = "Lorem dolor sed viverra ipsum. Gravida rutrum quisque non tellus. Rutrum tellus pellentesque eu tincidunt tortor. Sed blandit libero volutpat sed cras ornare. Et netus et malesuada fames ac. Ultrices eros in cursus turpis massa tincidunt dui ut ornare. Lacus sed viverra tellus in. Sollicitudin ac orci phasellus egestas. Purus in mollis nunc sed. Sollicitudin ac orci phasellus egestas tellus rutrum tellus pellentesque. Interdum consectetur libero id faucibus nisl tincidunt eget." diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index d82338d49..58c625753 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -19,7 +19,7 @@ 1729529324AA1CAA00D65E66 /* AccountsPreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729529024AA1CAA00D65E66 /* AccountsPreferencesView.swift */; }; 1729529424AA1CAA00D65E66 /* AdvancedPreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729529124AA1CAA00D65E66 /* AdvancedPreferencesView.swift */; }; 1729529524AA1CAA00D65E66 /* GeneralPreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729529224AA1CAA00D65E66 /* GeneralPreferencesView.swift */; }; - 1729529724AA1CD000D65E66 /* MacPreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729529624AA1CD000D65E66 /* MacPreferencesView.swift */; }; + 1729529724AA1CD000D65E66 /* MacPreferencePanes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729529624AA1CD000D65E66 /* MacPreferencePanes.swift */; }; 1729529B24AA1FD200D65E66 /* MacSearchField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1729529A24AA1FD200D65E66 /* MacSearchField.swift */; }; 175942AA24AD533200585066 /* RefreshInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCE4226F4DFA0010922C /* RefreshInterval.swift */; }; 175942AB24AD533200585066 /* RefreshInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCE4226F4DFA0010922C /* RefreshInterval.swift */; }; @@ -1395,7 +1395,7 @@ 1729529024AA1CAA00D65E66 /* AccountsPreferencesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountsPreferencesView.swift; sourceTree = ""; }; 1729529124AA1CAA00D65E66 /* AdvancedPreferencesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdvancedPreferencesView.swift; sourceTree = ""; }; 1729529224AA1CAA00D65E66 /* GeneralPreferencesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneralPreferencesView.swift; sourceTree = ""; }; - 1729529624AA1CD000D65E66 /* MacPreferencesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MacPreferencesView.swift; sourceTree = ""; }; + 1729529624AA1CD000D65E66 /* MacPreferencePanes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MacPreferencePanes.swift; sourceTree = ""; }; 1729529A24AA1FD200D65E66 /* MacSearchField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacSearchField.swift; sourceTree = ""; }; 1769E32124BC5925000E1E8E /* AccountsPreferencesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsPreferencesModel.swift; sourceTree = ""; }; 1769E32424BC5A65000E1E8E /* AddAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAccountView.swift; sourceTree = ""; }; @@ -2100,7 +2100,7 @@ 1729528F24AA1A4F00D65E66 /* Preferences */ = { isa = PBXGroup; children = ( - 1729529624AA1CD000D65E66 /* MacPreferencesView.swift */, + 1729529624AA1CD000D65E66 /* MacPreferencePanes.swift */, 1729529924AA1CE100D65E66 /* Preference Panes */, ); path = Preferences; @@ -4571,7 +4571,7 @@ 51E4995B24A875D500B667CB /* ArticlePasteboardWriter.swift in Sources */, 51E4993424A867E700B667CB /* UserInfoKey.swift in Sources */, 1776E88F24AC5F8A00E78166 /* AppDefaults.swift in Sources */, - 1729529724AA1CD000D65E66 /* MacPreferencesView.swift in Sources */, + 1729529724AA1CD000D65E66 /* MacPreferencePanes.swift in Sources */, 51E4994C24A8734C00B667CB /* RedditFeedProvider-Extensions.swift in Sources */, 1729529324AA1CAA00D65E66 /* AccountsPreferencesView.swift in Sources */, 171BCB8D24CB08A3006E22D9 /* FixAccountCredentialView.swift in Sources */,