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 }