From 72f7b3750315cca39fc73c0d56567c6dd878aac8 Mon Sep 17 00:00:00 2001 From: Franck LAURENT <franck.laurent@savoirfairelinux.com> Date: Tue, 4 Apr 2023 15:44:38 -0400 Subject: [PATCH] SettingsPage: dynamically load the individual pages of the settings view Replace StackLayout with StackView. The StackView manages the lifetime of the view. GitLab: #897 Change-Id: I25892310eb83ad70f4b06f91e94ec5ea8b87ef86 --- src/app/settingsview/SettingsView.qml | 132 ++++++++++-------- .../components/AdvancedSettingsPage.qml | 3 - .../components/AppearenceSettingsPage.qml | 3 - .../components/AudioSettingsPage.qml | 3 - .../components/CallRecordingSettingsPage.qml | 3 - .../components/CallSettingsPage.qml | 3 - .../components/CustomizeProfilePage.qml | 4 +- .../components/FileTransferSettingsPage.qml | 3 - .../components/LinkedDevicesPage.qml | 3 - .../LocationSharingSettingsPage.qml | 3 - .../components/ManageAccountPage.qml | 7 +- .../components/ScreenSharingSettingsPage.qml | 2 - .../components/SettingsPageBase.qml | 1 + .../components/SystemSettingsPage.qml | 2 - .../components/TroubleshootSettingsPage.qml | 2 - .../components/UpdatesSettingsPage.qml | 2 - .../components/VideoSettingsPage.qml | 25 ++-- 17 files changed, 94 insertions(+), 107 deletions(-) diff --git a/src/app/settingsview/SettingsView.qml b/src/app/settingsview/SettingsView.qml index 68dbb17b2..1021282aa 100644 --- a/src/app/settingsview/SettingsView.qml +++ b/src/app/settingsview/SettingsView.qml @@ -36,23 +36,24 @@ ListSelectionView { id: viewNode objectName: "SettingsView" - enum SettingsMenu { - ManageAccount, - CustomizeProfile, - LinkedDevices, - AdvancedSettings, - System, - CallSettings, - Appearence, - LocationSharing, - FileTransfer, - CallRecording, - Troubleshoot, - Update, - Audio, - Video, - Screensharing, - Plugin + // A map of view names to file paths for QML files that define each view. + property variant resources: { + "ManageAccountPage": Qt.resolvedUrl("components/ManageAccountPage.qml"), + "CustomizeProfilePage": Qt.resolvedUrl("components/CustomizeProfilePage.qml"), + "LinkedDevicesPage": Qt.resolvedUrl("components/LinkedDevicesPage.qml"), + "CallSettingsPage": Qt.resolvedUrl("components/CallSettingsPage.qml"), + "AdvancedSettingsPage": Qt.resolvedUrl("components/AdvancedSettingsPage.qml"), + "SystemSettingsPage": Qt.resolvedUrl("components/SystemSettingsPage.qml"), + "AppearenceSettingsPage": Qt.resolvedUrl("components/AppearenceSettingsPage.qml"), + "LocationSharingSettingsPage": Qt.resolvedUrl("components/LocationSharingSettingsPage.qml"), + "FileTransferSettingsPage": Qt.resolvedUrl("components/FileTransferSettingsPage.qml"), + "CallRecordingSettingsPage": Qt.resolvedUrl("components/CallRecordingSettingsPage.qml"), + "TroubleshootSettingsPage": Qt.resolvedUrl("components/TroubleshootSettingsPage.qml"), + "UpdatesSettingsPage": Qt.resolvedUrl("components/UpdatesSettingsPage.qml"), + "AudioSettingsPage": Qt.resolvedUrl("components/AudioSettingsPage.qml"), + "VideoSettingsPage": Qt.resolvedUrl("components/VideoSettingsPage.qml"), + "ScreenSharingSettingsPage": Qt.resolvedUrl("components/ScreenSharingSettingsPage.qml"), + "PluginSettingsPage": Qt.resolvedUrl("components/PluginSettingsPage.qml"), } splitViewStateKey: "Main" @@ -83,50 +84,71 @@ ListSelectionView { } } - rightPaneItem: StackLayout { - id: settingsViewRect + rightPaneItem: StackView { + id: settingsView + objectName: "settingsView" - currentIndex: selectedMenu !== -1 ? selectedMenu : 0 + property var currentIndex: selectedMenu !== -1 ? selectedMenu : 0 anchors.fill: parent signal stopBooth - property bool isSIP: CurrentAccount.type === Profile.Type.SIP + initialItem: ManageAccountPage {} + + onCurrentIndexChanged: { + + switch(currentIndex) { + default: + case 0: + replace(currentItem, viewNode.resources["ManageAccountPage"], StackView.Immediate) + break + case 1: + replace(currentItem, viewNode.resources["CustomizeProfilePage"], StackView.Immediate) + break + case 2: + replace(currentItem, viewNode.resources["LinkedDevicesPage"], StackView.Immediate) + break + case 3: + replace(currentItem, viewNode.resources["CallSettingsPage"], StackView.Immediate) + break + case 4: + replace(currentItem, viewNode.resources["AdvancedSettingsPage"], StackView.Immediate) + break + case 5: + replace(currentItem, viewNode.resources["SystemSettingsPage"], StackView.Immediate) + break + case 6: + replace(currentItem, viewNode.resources["AppearenceSettingsPage"], StackView.Immediate) + break + case 7: + replace(currentItem, viewNode.resources["LocationSharingSettingsPage"], StackView.Immediate) + break + case 8: + replace(currentItem, viewNode.resources["FileTransferSettingsPage"], StackView.Immediate) + break + case 9: + replace(currentItem, viewNode.resources["CallRecordingSettingsPage"], StackView.Immediate) + break + case 10: + replace(currentItem, viewNode.resources["TroubleshootSettingsPage"], StackView.Immediate) + break + case 11: + replace(currentItem, viewNode.resources["UpdatesSettingsPage"], StackView.Immediate) + break + case 12: + replace(currentItem, viewNode.resources["AudioSettingsPage"], StackView.Immediate) + break + case 13: + replace(currentItem, viewNode.resources["VideoSettingsPage"], StackView.Immediate) + break + case 14: + replace(currentItem, viewNode.resources["ScreenSharingSettingsPage"], StackView.Immediate) + break + case 15: + replace(currentItem, viewNode.resources["PluginSettingsPage"], StackView.Immediate) + break + } - ManageAccountPage { - isSIP: settingsViewRect.isSIP - onNavigateToMainView: dismiss() - onNavigateToNewWizardView: dismiss() } - - CustomizeProfilePage {} - - LinkedDevicesPage {} - - CallSettingsPage {} - - AdvancedSettingsPage {} - - SystemSettingsPage {} - - AppearenceSettingsPage {} - - LocationSharingSettingsPage {} - - FileTransferSettingsPage{} - - CallRecordingSettingsPage {} - - TroubleshootSettingsPage {} - - UpdatesSettingsPage {} - - AudioSettingsPage {} - - VideoSettingsPage {} - - ScreenSharingSettingsPage {} - - PluginSettingsPage {} } } diff --git a/src/app/settingsview/components/AdvancedSettingsPage.qml b/src/app/settingsview/components/AdvancedSettingsPage.qml index 7d0b31440..f27549db0 100644 --- a/src/app/settingsview/components/AdvancedSettingsPage.qml +++ b/src/app/settingsview/components/AdvancedSettingsPage.qml @@ -33,9 +33,6 @@ SettingsPageBase { property int itemWidth signal showAdvancedSettingsRequest - signal navigateToMainView - signal navigateToNewWizardView - title: JamiStrings.advancedSettingsTitle flickableContent: ColumnLayout { diff --git a/src/app/settingsview/components/AppearenceSettingsPage.qml b/src/app/settingsview/components/AppearenceSettingsPage.qml index 8bfb5e6ee..860daa765 100644 --- a/src/app/settingsview/components/AppearenceSettingsPage.qml +++ b/src/app/settingsview/components/AppearenceSettingsPage.qml @@ -36,9 +36,6 @@ SettingsPageBase { property int itemWidth: 188 - signal navigateToMainView - signal navigateToNewWizardView - title: JamiStrings.appearence flickableContent: ColumnLayout { diff --git a/src/app/settingsview/components/AudioSettingsPage.qml b/src/app/settingsview/components/AudioSettingsPage.qml index 067130fcd..de2e919f3 100644 --- a/src/app/settingsview/components/AudioSettingsPage.qml +++ b/src/app/settingsview/components/AudioSettingsPage.qml @@ -30,9 +30,6 @@ SettingsPageBase { id: root property int itemWidth: 188 - - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.audio flickableContent: ColumnLayout { diff --git a/src/app/settingsview/components/CallRecordingSettingsPage.qml b/src/app/settingsview/components/CallRecordingSettingsPage.qml index d8f72b532..352d164d0 100644 --- a/src/app/settingsview/components/CallRecordingSettingsPage.qml +++ b/src/app/settingsview/components/CallRecordingSettingsPage.qml @@ -38,9 +38,6 @@ SettingsPageBase { property string screenshotPathBestName: UtilsAdapter.dirName(UtilsAdapter.getDirScreenshot()) property int itemWidth: 188 - - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.callRecording onRecordPathChanged: { diff --git a/src/app/settingsview/components/CallSettingsPage.qml b/src/app/settingsview/components/CallSettingsPage.qml index 6c30770da..b23db21ff 100644 --- a/src/app/settingsview/components/CallSettingsPage.qml +++ b/src/app/settingsview/components/CallSettingsPage.qml @@ -37,9 +37,6 @@ SettingsPageBase { property bool isSIP property int itemWidth: 132 - - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.callSettingsTitle function updateAndShowModeratorsSlot() { diff --git a/src/app/settingsview/components/CustomizeProfilePage.qml b/src/app/settingsview/components/CustomizeProfilePage.qml index 932b63b28..dbb053ac2 100644 --- a/src/app/settingsview/components/CustomizeProfilePage.qml +++ b/src/app/settingsview/components/CustomizeProfilePage.qml @@ -30,8 +30,6 @@ import "../../commoncomponents" SettingsPageBase { id: root - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.customizeProfile function stopBooth() { @@ -53,7 +51,7 @@ SettingsPageBase { Layout.preferredWidth: parent.width Connections { - target: settingsViewRect + target: settingsView function onStopBooth() { stopBooth() diff --git a/src/app/settingsview/components/FileTransferSettingsPage.qml b/src/app/settingsview/components/FileTransferSettingsPage.qml index c2c0a7e22..4db804f22 100644 --- a/src/app/settingsview/components/FileTransferSettingsPage.qml +++ b/src/app/settingsview/components/FileTransferSettingsPage.qml @@ -32,9 +32,6 @@ SettingsPageBase { id: root property int itemWidth: 164 - - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.fileTransfer diff --git a/src/app/settingsview/components/LinkedDevicesPage.qml b/src/app/settingsview/components/LinkedDevicesPage.qml index 74c26b95d..f9de7c82f 100644 --- a/src/app/settingsview/components/LinkedDevicesPage.qml +++ b/src/app/settingsview/components/LinkedDevicesPage.qml @@ -32,11 +32,8 @@ import "../../commoncomponents" SettingsPageBase { id: root - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.linkedDevicesSettingsTitle - flickableContent: ColumnLayout { id: currentAccountEnableColumnLayout diff --git a/src/app/settingsview/components/LocationSharingSettingsPage.qml b/src/app/settingsview/components/LocationSharingSettingsPage.qml index 9c5479cdd..0f84707d5 100644 --- a/src/app/settingsview/components/LocationSharingSettingsPage.qml +++ b/src/app/settingsview/components/LocationSharingSettingsPage.qml @@ -36,9 +36,6 @@ SettingsPageBase { id: root property int itemWidth: 578 - - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.locationSharingLabel diff --git a/src/app/settingsview/components/ManageAccountPage.qml b/src/app/settingsview/components/ManageAccountPage.qml index 807cf3a39..f25d2eb28 100644 --- a/src/app/settingsview/components/ManageAccountPage.qml +++ b/src/app/settingsview/components/ManageAccountPage.qml @@ -31,11 +31,12 @@ import "../../commoncomponents" SettingsPageBase { id: root - property bool isSIP + property bool isSIP: CurrentAccount.type === Profile.Type.SIP property int itemWidth: 250 - signal navigateToMainView - signal navigateToNewWizardView + + onNavigateToMainView: viewNode.dismiss() + title: JamiStrings.manageAccountSettingsTitle flickableContent: ColumnLayout { diff --git a/src/app/settingsview/components/ScreenSharingSettingsPage.qml b/src/app/settingsview/components/ScreenSharingSettingsPage.qml index 171d26ca9..756dae08a 100644 --- a/src/app/settingsview/components/ScreenSharingSettingsPage.qml +++ b/src/app/settingsview/components/ScreenSharingSettingsPage.qml @@ -34,8 +34,6 @@ SettingsPageBase { property int itemWidth: 150 - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.screenSharing flickableContent: ColumnLayout { diff --git a/src/app/settingsview/components/SettingsPageBase.qml b/src/app/settingsview/components/SettingsPageBase.qml index 8ddfeaee0..c5adeca43 100644 --- a/src/app/settingsview/components/SettingsPageBase.qml +++ b/src/app/settingsview/components/SettingsPageBase.qml @@ -62,5 +62,6 @@ Page { contentItem.children: [flickableContent] topMargin: JamiTheme.preferredSettingsBottomMarginSize bottomMargin: JamiTheme.preferredSettingsBottomMarginSize + ScrollBar.horizontal.visible: false } } diff --git a/src/app/settingsview/components/SystemSettingsPage.qml b/src/app/settingsview/components/SystemSettingsPage.qml index bed6a358f..17ef1c8e3 100644 --- a/src/app/settingsview/components/SystemSettingsPage.qml +++ b/src/app/settingsview/components/SystemSettingsPage.qml @@ -37,8 +37,6 @@ SettingsPageBase { property bool isSIP - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.system diff --git a/src/app/settingsview/components/TroubleshootSettingsPage.qml b/src/app/settingsview/components/TroubleshootSettingsPage.qml index 7e2332272..8e8154fc9 100644 --- a/src/app/settingsview/components/TroubleshootSettingsPage.qml +++ b/src/app/settingsview/components/TroubleshootSettingsPage.qml @@ -35,8 +35,6 @@ SettingsPageBase { property int itemWidth - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.troubleshootTitle diff --git a/src/app/settingsview/components/UpdatesSettingsPage.qml b/src/app/settingsview/components/UpdatesSettingsPage.qml index ce4fa733a..35155d008 100644 --- a/src/app/settingsview/components/UpdatesSettingsPage.qml +++ b/src/app/settingsview/components/UpdatesSettingsPage.qml @@ -34,8 +34,6 @@ import "../../commoncomponents" SettingsPageBase { id: root - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.updatesTitle function presentInfoDialog(infoText) { diff --git a/src/app/settingsview/components/VideoSettingsPage.qml b/src/app/settingsview/components/VideoSettingsPage.qml index c093404fc..61768b950 100644 --- a/src/app/settingsview/components/VideoSettingsPage.qml +++ b/src/app/settingsview/components/VideoSettingsPage.qml @@ -36,9 +36,6 @@ SettingsPageBase { property int itemWidth: 266 property real aspectRatio: 0.75 - - signal navigateToMainView - signal navigateToNewWizardView title: JamiStrings.video flickableContent: ColumnLayout { @@ -63,17 +60,6 @@ SettingsPageBase { previewWidget.startWithId(VideoDevices.getDefaultDevice(), force) } - onVisibleChanged: { - flipControl.checked = UtilsAdapter.getAppValue(Settings.FlipSelf) - if (visible) { - hardwareAccelControl.checked = AvAdapter.getHardwareAcceleration() - if (previewWidget.visible) - generalSettings.startPreviewing(true) - } else { - previewWidget.startWithId("") - } - } - Connections { target: VideoDevices @@ -114,6 +100,17 @@ SettingsPageBase { } } + Component.onCompleted: { + flipControl.checked = UtilsAdapter.getAppValue(Settings.FlipSelf) + hardwareAccelControl.checked = AvAdapter.getHardwareAcceleration() + if (previewWidget.visible) + startPreviewing(true) + } + + Component.onDestruction: { + previewWidget.startWithId("") + } + // video Preview Rectangle { visible: VideoDevices.listSize !== 0 -- GitLab