Settings: keep tabs fixed, only content scrolls
This commit is contained in:
@@ -7,50 +7,47 @@ struct SettingsRootView: View {
|
|||||||
@State private var selectedTab: SettingsTab = .general
|
@State private var selectedTab: SettingsTab = .general
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView(.vertical) {
|
TabView(selection: self.$selectedTab) {
|
||||||
TabView(selection: self.$selectedTab) {
|
GeneralSettings(state: self.state)
|
||||||
GeneralSettings(state: self.state)
|
.tabItem { Label("General", systemImage: "gearshape") }
|
||||||
.tabItem { Label("General", systemImage: "gearshape") }
|
.tag(SettingsTab.general)
|
||||||
.tag(SettingsTab.general)
|
|
||||||
|
|
||||||
VoiceWakeSettings(state: self.state)
|
VoiceWakeSettings(state: self.state)
|
||||||
.tabItem { Label("Voice Wake", systemImage: "waveform.circle") }
|
.tabItem { Label("Voice Wake", systemImage: "waveform.circle") }
|
||||||
.tag(SettingsTab.voiceWake)
|
.tag(SettingsTab.voiceWake)
|
||||||
|
|
||||||
ConfigSettings()
|
ConfigSettings()
|
||||||
.tabItem { Label("Config", systemImage: "slider.horizontal.3") }
|
.tabItem { Label("Config", systemImage: "slider.horizontal.3") }
|
||||||
.tag(SettingsTab.config)
|
.tag(SettingsTab.config)
|
||||||
|
|
||||||
PermissionsSettings(
|
PermissionsSettings(
|
||||||
status: self.permissionMonitor.status,
|
status: self.permissionMonitor.status,
|
||||||
refresh: self.refreshPerms,
|
refresh: self.refreshPerms,
|
||||||
showOnboarding: { OnboardingController.shared.show() })
|
showOnboarding: { OnboardingController.shared.show() })
|
||||||
.tabItem { Label("Permissions", systemImage: "lock.shield") }
|
.tabItem { Label("Permissions", systemImage: "lock.shield") }
|
||||||
.tag(SettingsTab.permissions)
|
.tag(SettingsTab.permissions)
|
||||||
|
|
||||||
SessionsSettings()
|
SessionsSettings()
|
||||||
.tabItem { Label("Sessions", systemImage: "clock.arrow.circlepath") }
|
.tabItem { Label("Sessions", systemImage: "clock.arrow.circlepath") }
|
||||||
.tag(SettingsTab.sessions)
|
.tag(SettingsTab.sessions)
|
||||||
|
|
||||||
ToolsSettings()
|
ToolsSettings()
|
||||||
.tabItem { Label("Tools", systemImage: "wrench.and.screwdriver") }
|
.tabItem { Label("Tools", systemImage: "wrench.and.screwdriver") }
|
||||||
.tag(SettingsTab.tools)
|
.tag(SettingsTab.tools)
|
||||||
|
|
||||||
if self.state.debugPaneEnabled {
|
if self.state.debugPaneEnabled {
|
||||||
DebugSettings()
|
DebugSettings()
|
||||||
.tabItem { Label("Debug", systemImage: "ant") }
|
.tabItem { Label("Debug", systemImage: "ant") }
|
||||||
.tag(SettingsTab.debug)
|
.tag(SettingsTab.debug)
|
||||||
}
|
|
||||||
|
|
||||||
AboutSettings()
|
|
||||||
.tabItem { Label("About", systemImage: "info.circle") }
|
|
||||||
.tag(SettingsTab.about)
|
|
||||||
}
|
}
|
||||||
.padding(.horizontal, 28)
|
|
||||||
.padding(.vertical, 22)
|
AboutSettings()
|
||||||
.frame(maxWidth: .infinity, alignment: .topLeading)
|
.tabItem { Label("About", systemImage: "info.circle") }
|
||||||
|
.tag(SettingsTab.about)
|
||||||
}
|
}
|
||||||
.frame(minWidth: SettingsTab.windowWidth, minHeight: SettingsTab.windowHeight)
|
.padding(.horizontal, 28)
|
||||||
|
.padding(.vertical, 22)
|
||||||
|
.frame(width: SettingsTab.windowWidth, height: SettingsTab.windowHeight, alignment: .topLeading)
|
||||||
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
|
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
|
||||||
.onReceive(NotificationCenter.default.publisher(for: .clawdisSelectSettingsTab)) { note in
|
.onReceive(NotificationCenter.default.publisher(for: .clawdisSelectSettingsTab)) { note in
|
||||||
if let tab = note.object as? SettingsTab {
|
if let tab = note.object as? SettingsTab {
|
||||||
|
|||||||
Reference in New Issue
Block a user