9 import QtQuick.Controls 2.5 as QQC2
10 import org.kde.kirigami 2.11 as Kirigami
34 property Kirigami.PagePool pagePool
43 property Item pageStack: typeof applicationWindow !==
'undefined' ? applicationWindow().pageStack :
null
51 property QQC2.Page basePage
72 property var initialProperties
86 property bool useLayers:
false
93 return pagePool.pageForUrl(page)
100 function layerContainsPage() {
101 if (!useLayers || !pageStack.hasOwnProperty(
"layers"))
return false
103 const item = pageStack.layers.find((item, index) => {
104 return item === pagePool.pageForUrl(page)
113 function stackContainsPage() {
114 if (useLayers)
return false
115 return pageStack.columnView.containsItem(pagePool.pageForUrl(page))
121 if (page.length === 0 || !pagePool || !pageStack) {
126 if (layerContainsPage() && pageItem() !== pageStack.layers.currentItem) {
127 pageStack.layers.replace(pageItem(), pageItem())
132 if (stackContainsPage()) {
133 if (pageStack.hasOwnProperty(
"layers")) {
134 pageStack.layers.clear()
138 const pageStack_ = useLayers ? pageStack.layers : pageStack
140 if (initialProperties && typeof(initialProperties) !==
"object") {
141 console.warn(
"initialProperties must be of type object");
145 if (!pageStack_.hasOwnProperty(
"pop") || typeof pageStack_.pop !==
"function" || !pageStack_.hasOwnProperty(
"push") || typeof pageStack_.push !==
"function") {
149 if (pagePool.isLocalUrl(page)) {
151 pageStack_.pop(basePage);
153 }
else if (!useLayers) {
157 pageStack_.push(initialProperties ?
158 pagePool.loadPageWithProperties(page, initialProperties) :
159 pagePool.loadPage(page));
161 const callback =
function(item) {
163 pageStack_.pop(basePage);
165 }
else if (!useLayers) {
168 pageStack_.push(item);
171 if (initialProperties) {
172 pagePool.loadPage(page, initialProperties, callback);
175 pagePool.loadPage(page, callback);
181 property QtObject _private: QtObject {
184 function setChecked(checked) {
185 root.checked = checked
188 function clearLayers() {
189 pageStack.layers.clear()
192 property list<Connections> connections: [
196 function onCurrentItemChanged() {
197 if (root.useLayers) {
198 if (root.layerContainsPage()) {
199 _private.clearLayers()
202 _private.setChecked(
false);
206 _private.setChecked(root.stackContainsPage());
211 enabled: pageStack.hasOwnProperty(
"layers")
212 target: pageStack.layers
214 function onCurrentItemChanged() {
215 if (root.useLayers && root.checkable) {
216 _private.setChecked(root.layerContainsPage());
219 if (pageStack.layers.depth === 1 && root.stackContainsPage()) {
220 _private.setChecked(
true)