/usr/lib/x86_64-linux-gnu/qt5/qml/Ubuntu/Components/1.2/PageTreeNode.qml is in qml-module-ubuntu-components 1.3.1918+16.04.20160404-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | /*
* Copyright 2012 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.4
import Ubuntu.Components 1.2
/*!
\internal
\qmltype PageTreeNode
\inqmlmodule Ubuntu.Components 1.1
\ingroup ubuntu
\brief The common parent of \l Page, \l MainView, \l PageStack and \l Tabs.
It is used to propagate properties such as \l header and \l toolbar from a
\l MainView (the root node) to each \l Page (leaf node) in the tree.
*/
StyledItem {
id: node
/*!
\internal
Used to determine whether an Item is a PageTreeNode
*/
property bool __isPageTreeNode: true
/*! \internal */
onParentChanged: internal.updatePageTree()
/*! \internal */
Component.onCompleted: internal.updatePageTree()
/*!
\deprecated
The header of the node. Propagates down from the root node.
This property is DEPRECATED.
*/
property Item header: node.__propagated ? node.__propagated.header : null
/*!
\deprecated
The toolbar of the node. Propagates down from the root node.
This property is DEPRECATED.
*/
property Toolbar toolbar: node.__propagated && node.__propagated.hasOwnProperty("toolbar")
? node.__propagated.toolbar : null
/*!
\internal
QtObject containing all the properties that are propagated from the
root (MainView) of a page tree to its leafs (Pages).
This object contains properties such as the header and toolbar that are
instantiated by the MainView.
This property is internal because the derived classes (MainView and Page)
need to access it, but other components using those classes should not have
access to it.
*/
property QtObject __propagated: node.parentNode ? node.parentNode.__propagated : null
/*!
At any time, there is exactly one path from the root node to a Page leaf node
where all nodes are active. All other nodes are not active. This is used by
\l Tabs and \l PageStack to determine which of multiple nodes in the Tabs or
PageStack is the currently active one.
*/
property bool active: node.parentNode ? node.parentNode.active : false
/*!
The \l PageStack that this Page has been pushed on, or null if it is not
part of a PageStack. This value is automatically set for pages that are pushed
on a PageStack, and propagates to its child nodes.
*/
// Note: pageStack is not included in the propagated property because there may
// be multiple PageStacks in a single page tree.
property Item pageStack: node.parentNode ? node.parentNode.pageStack : null
/*!
The parent node of the current node in the page tree.
*/
property Item parentNode: null
/*!
The leaf node that is active.
*/
property Item activeLeafNode
/*!
Whether or not this node is a leaf, that is if it has no descendant that are nodes.
Pages are leafs, and they don't have descendants in the PageTree.
*/
property bool isLeaf: false
// turn on focusing
activeFocusOnPress: true
Binding {
target: node.parentNode
property: "activeLeafNode"
value: node.isLeaf ? node : node.activeLeafNode
when: node.active
}
Item {
id: internal
function isPageTreeNode(object) {
// FIXME: Use QuickUtils.className() when it becomes available.
return (object && object.hasOwnProperty("__isPageTreeNode") && object.__isPageTreeNode);
}
/*!
Return the parent node in the page tree, or null if the item is the root node or invalid.
*/
function getParentPageTreeNode(item) {
var node = null;
if (item) {
var i = item.parent;
while (i) {
if (internal.isPageTreeNode(i)) {
if (i.isLeaf) {
// children of a leaf are not part of the tree
node = null;
print("WARNING! " +
"Do not put Page/Tabs/PageStack inside another "+
"Page because that causes confusion which is the "+
"active page that sets the title and actions.");
} else {
// current node is part of the tree with i as its parent.
node = i;
}
break;
}
i = i.parent;
}
}
return node;
}
/*!
Find the parent node.
*/
function updatePageTree() {
node.parentNode = internal.getParentPageTreeNode(node);
}
}
}
|