Warning, /plasma-mobile/plasma-settings/src/qml/main.qml is written in an unsupported language. File is not indexed.

0001 /*
0002 
0003     SPDX-FileCopyrightText: 2017 Marco Martin <mart@kde.org>
0004     SPDX-FileCopyrightText: 2011-2014 Sebastian Kügler <sebas@kde.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 import QtQuick
0010 import QtQuick.Controls as Controls
0011 import org.kde.kirigami as Kirigami
0012 
0013 import org.kde.plasma.settings 0.1
0014 
0015 Kirigami.ApplicationWindow {
0016     id: root
0017     
0018     pageStack.defaultColumnWidth: Kirigami.Units.gridUnit * 35
0019     pageStack.globalToolBar.style: Kirigami.ApplicationHeaderStyle.ToolBar
0020     pageStack.globalToolBar.showNavigationButtons: Kirigami.ApplicationHeaderStyle.ShowBackButton;
0021     pageStack.popHiddenPages: true
0022 
0023     property alias currentModule: module
0024     property string currentModuleName
0025     
0026     // initialize context drawer
0027     contextDrawer: Kirigami.ContextDrawer {
0028         id: contextDrawer
0029     }
0030 
0031     readonly property real widescreenThreshold: 720
0032     property bool isWidescreen: width >= widescreenThreshold
0033     onIsWidescreenChanged: changeNav(isWidescreen);
0034 
0035     property var loadedKCMPage: null
0036     
0037     // change between sidebar and single page listview
0038     function changeNav(toWidescreen) {
0039         if (SettingsApp.singleModule) return;
0040 
0041         if (toWidescreen) {
0042             sidebarLoader.active = true;
0043             root.globalDrawer = sidebarLoader.item;
0044 
0045             // remove the listview page, and restore all other pages
0046             listViewPageLoader.active = false;
0047             if (pageStack.currentItem == defaultPage) return;
0048 
0049             if (pageStack.depth == 0) {
0050                 pageStack.push(defaultPage);
0051             }
0052         } else {
0053             sidebarLoader.active = false;
0054             root.globalDrawer = null;
0055 
0056             // prevent kcm page from getting deleted when popped
0057             if (root.loadedKCMPage) {
0058                 root.loadedKCMPage.suppressDeletion = true;
0059             }
0060 
0061             // pop all pages
0062             while (pageStack.depth > 0) {
0063                 pageStack.pop()
0064             }
0065 
0066             if (root.loadedKCMPage) {
0067                 root.loadedKCMPage.suppressDeletion = false;
0068             }
0069 
0070             // insert listview page at beginning
0071             listViewPageLoader.active = true;
0072             pageStack.push(listViewPageLoader.item);
0073 
0074             // restore the kcm page
0075             if (module.name) {
0076                 root.pageStack.push(root.loadedKCMPage);
0077             }
0078         }
0079     }
0080 
0081     // HACK: there seems to be a race condition that causes the start
0082     //       module page to be popped immediately at app start in non-widescreen mode...
0083     Timer {
0084         id: startModuleTimer
0085         running: false
0086         interval: 200
0087         repeat: false
0088         onTriggered: {
0089             openModule(SettingsApp.startModule);
0090         }
0091     }
0092     
0093     Loader {
0094         id: listViewPageLoader
0095         active: false
0096         sourceComponent: ModulesListPage {
0097             model: proxyModel
0098         }
0099     }
0100 
0101     Loader {
0102         id: sidebarLoader
0103         active: false
0104         sourceComponent: Sidebar {
0105             model: proxyModel
0106         }
0107     }
0108     
0109     function openModule(path) {
0110         module.path = path;
0111         while (pageStack.depth > ((isWidescreen || SettingsApp.singleModule) ? 0 : 1)) {
0112             pageStack.pop();
0113         }
0114 
0115         // only add the page if it is valid
0116         if (module.valid) {
0117             loadedKCMPage = kcmContainer.createObject(pageStack, {"kcm": module.kcm, "internalPage": module.kcm.mainUi});
0118             pageStack.push(loadedKCMPage);
0119             currentModuleName = module.name;
0120         } else if (isWidescreen) {
0121             pageStack.push(defaultPage);
0122         }
0123     }
0124     
0125     // if module is specified to be opened, load it
0126     Component.onCompleted: {
0127         if (SettingsApp.startModule.length > 0) {
0128             startModuleTimer.restart();
0129         }
0130         changeNav(isWidescreen);
0131     }
0132 
0133     Connections {
0134         target: SettingsApp
0135         function onModuleRequested(moduleName) {
0136             openModule(moduleName);
0137         }
0138 
0139         function onActivateRequested() {
0140             // HACK: raise window when module is requested; 
0141             // requestActivate() by itself doesn't seem to work
0142             applicationWindow().hide();
0143             applicationWindow().show();
0144             applicationWindow().requestActivate();
0145         }
0146     }
0147     
0148     Module {
0149         id: module
0150     }
0151     
0152     ModulesProxyModel {
0153         id: proxyModel
0154     }
0155     
0156     DefaultPage {
0157         id: defaultPage
0158         visible: false
0159     }
0160 
0161     Component {
0162         id: kcmContainer
0163         KCMContainer {}
0164     }
0165 }