Warning, /frameworks/kirigami/src/controls/OverlayDrawer.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2016 Marco Martin <mart@kde.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Templates as T 0009 import org.kde.kirigami as Kirigami 0010 import "private" as KP 0011 import "templates" as KT 0012 0013 /** 0014 * Overlay Drawers are used to expose additional UI elements needed for 0015 * small secondary tasks for which the main UI elements are not needed. 0016 * For example in Okular Mobile, an Overlay Drawer is used to display 0017 * thumbnails of all pages within a document along with a search field. 0018 * This is used for the distinct task of navigating to another page. 0019 * 0020 * @inherit org::kde::kirigami::templates::OverlayDrawer 0021 */ 0022 KT.OverlayDrawer { 0023 id: root 0024 0025 //BEGIN Properties 0026 focus: false 0027 modal: true 0028 drawerOpen: !modal 0029 closePolicy: modal ? T.Popup.CloseOnEscape | T.Popup.CloseOnReleaseOutside : T.Popup.NoAutoClose 0030 handleVisible: interactive && (modal || !drawerOpen) && (typeof(applicationWindow)===typeof(Function) && applicationWindow() ? applicationWindow().controlsVisible : true) 0031 0032 // FIXME: set to false when it does not lead to blocking closePolicy. 0033 // See Kirigami bug: 454119 0034 interactive: true 0035 0036 onPositionChanged: { 0037 if (!modal && !root.peeking && !root.animating) { 0038 position = 1; 0039 } 0040 } 0041 0042 background: Rectangle { 0043 color: Kirigami.Theme.backgroundColor 0044 0045 Item { 0046 parent: root.handle 0047 anchors.fill: parent 0048 0049 Kirigami.ShadowedRectangle { 0050 id: handleGraphics 0051 anchors.centerIn: parent 0052 0053 Kirigami.Theme.colorSet: parent.parent.handleAnchor && parent.parent.handleAnchor.visible ? parent.parent.handleAnchor.Kirigami.Theme.colorSet : Kirigami.Theme.Button 0054 0055 Kirigami.Theme.backgroundColor: parent.parent.handleAnchor && parent.parent.handleAnchor.visible ? parent.parent.handleAnchor.Kirigami.Theme.backgroundColor : undefined 0056 0057 Kirigami.Theme.textColor: parent.parent.handleAnchor && parent.parent.handleAnchor.visible ? parent.parent.handleAnchor.Kirigami.Theme.textColor : undefined 0058 0059 Kirigami.Theme.inherit: false 0060 color: root.handle.pressed ? Kirigami.Theme.highlightColor : Kirigami.Theme.backgroundColor 0061 0062 visible: !parent.parent.handleAnchor || !parent.parent.handleAnchor.visible || root.handle.pressed || (root.modal && root.position > 0) 0063 0064 shadow.color: Qt.rgba(0, 0, 0, root.handle.pressed ? 0.6 : 0.4) 0065 shadow.yOffset: 1 0066 shadow.size: Kirigami.Units.gridUnit / 2 0067 0068 width: Kirigami.Units.iconSizes.smallMedium + Kirigami.Units.smallSpacing * 2 0069 height: width 0070 radius: 2 0071 Behavior on color { 0072 ColorAnimation { 0073 duration: Kirigami.Units.longDuration 0074 easing.type: Easing.InOutQuad 0075 } 0076 } 0077 } 0078 Loader { 0079 anchors.centerIn: handleGraphics 0080 width: height 0081 height: Kirigami.Units.iconSizes.smallMedium 0082 0083 Kirigami.Theme.colorSet: handleGraphics.Kirigami.Theme.colorSet 0084 Kirigami.Theme.backgroundColor: handleGraphics.Kirigami.Theme.backgroundColor 0085 Kirigami.Theme.textColor: handleGraphics.Kirigami.Theme.textColor 0086 0087 asynchronous: true 0088 0089 source: { 0090 let edge = root.edge; 0091 if (Qt.application.layoutDirection === Qt.RightToLeft) { 0092 if (edge === Qt.LeftEdge) { 0093 edge = Qt.RightEdge; 0094 } else { 0095 edge = Qt.LeftEdge; 0096 } 0097 } 0098 0099 if ((root.handleClosedIcon.source || root.handleClosedIcon.name) 0100 && (root.handleOpenIcon.source || root.handleOpenIcon.name)) { 0101 return Qt.resolvedUrl("templates/private/GenericDrawerIcon.qml"); 0102 } else if (edge === Qt.LeftEdge) { 0103 return Qt.resolvedUrl("templates/private/MenuIcon.qml"); 0104 } else if (edge === Qt.RightEdge && root instanceof Kirigami.ContextDrawer) { 0105 return Qt.resolvedUrl("templates/private/ContextIcon.qml"); 0106 } else { 0107 return ""; 0108 } 0109 } 0110 onItemChanged: { 0111 if (item) { 0112 item.drawer = root; 0113 item.color = Qt.binding(() => root.handle.pressed 0114 ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor); 0115 } 0116 } 0117 } 0118 } 0119 0120 Kirigami.Separator { 0121 LayoutMirroring.enabled: false 0122 // LayoutMirroring.childrenInherit: true 0123 anchors { 0124 right: root.edge === Qt.RightEdge ? parent.left : (root.edge === Qt.LeftEdge ? undefined : parent.right) 0125 left: root.edge === Qt.LeftEdge ? parent.right : (root.edge === Qt.RightEdge ? undefined : parent.left) 0126 top: root.edge === Qt.TopEdge ? parent.bottom : (root.edge === Qt.BottomEdge ? undefined : parent.top) 0127 bottom: root.edge === Qt.BottomEdge ? parent.top : (root.edge === Qt.TopEdge ? undefined : parent.bottom) 0128 } 0129 visible: !root.modal 0130 Kirigami.Theme.inherit: false 0131 Kirigami.Theme.colorSet: Kirigami.Theme.Header 0132 } 0133 KP.EdgeShadow { 0134 z: -2 0135 visible: root.modal 0136 edge: root.edge 0137 anchors { 0138 right: root.edge === Qt.RightEdge ? parent.left : (root.edge === Qt.LeftEdge ? undefined : parent.right) 0139 left: root.edge === Qt.LeftEdge ? parent.right : (root.edge === Qt.RightEdge ? undefined : parent.left) 0140 top: root.edge === Qt.TopEdge ? parent.bottom : (root.edge === Qt.BottomEdge ? undefined : parent.top) 0141 bottom: root.edge === Qt.BottomEdge ? parent.top : (root.edge === Qt.TopEdge ? undefined : parent.bottom) 0142 } 0143 0144 opacity: root.position === 0 ? 0 : 1 0145 0146 Behavior on opacity { 0147 NumberAnimation { 0148 duration: Kirigami.Units.longDuration 0149 easing.type: Easing.InOutQuad 0150 } 0151 } 0152 } 0153 } 0154 }