Warning, /frameworks/kirigami/src/controls/ContextDrawer.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2015 Marco Martin <mart@kde.org> 0003 * SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 import QtQuick 0009 import QtQuick.Controls as QQC2 0010 import QtQuick.Templates as T 0011 import org.kde.kirigami as Kirigami 0012 import "private" as KP 0013 0014 /** 0015 * A specialized type of drawer that will show a list of actions 0016 * relevant to the application's current page. 0017 * 0018 * Example usage: 0019 * 0020 * @code 0021 * import org.kde.kirigami as Kirigami 0022 * 0023 * Kirigami.ApplicationWindow { 0024 * contextDrawer: Kirigami.ContextDrawer { 0025 * enabled: true 0026 * actions: [ 0027 * Kirigami.Action { 0028 * icon.name: "edit" 0029 * text: "Action text" 0030 * onTriggered: { 0031 * // do stuff 0032 * } 0033 * }, 0034 * Kirigami.Action { 0035 * icon.name: "edit" 0036 * text: "Action text" 0037 * onTriggered: { 0038 * // do stuff 0039 * } 0040 * } 0041 * ] 0042 * } 0043 * } 0044 * @endcode 0045 * 0046 * @inherit OverlayDrawer 0047 */ 0048 Kirigami.OverlayDrawer { 0049 id: root 0050 0051 handleClosedIcon.source: null 0052 handleOpenIcon.source: null 0053 0054 /** 0055 * @brief A title for the action list that will be shown to the user when opens the drawer 0056 * 0057 * default: ``qsTr("Actions")`` 0058 */ 0059 property string title: qsTr("Actions") 0060 0061 /** 0062 * List of contextual actions to be displayed in a ListView. 0063 * 0064 * @see QtQuick.Action 0065 * @see org::kde::kirigami::Action 0066 * @property list<T.Action> actions 0067 */ 0068 property list<T.Action> actions 0069 0070 /** 0071 * @brief Arbitrary content to show above the list view. 0072 * 0073 * default: `an Item containing a Kirigami.Heading that displays a title whose text is 0074 * controlled by the title property.` 0075 * 0076 * @property Component header 0077 * @since 2.7 0078 */ 0079 property alias header: menu.header 0080 0081 /** 0082 * @brief Arbitrary content to show below the list view. 0083 * @property Component footer 0084 * @since 2.7 0085 */ 0086 property alias footer: menu.footer 0087 0088 // Not stored in a property, so we don't have to waste memory on an extra list. 0089 function visibleActions() { 0090 return actions.filter( 0091 action => !(action instanceof Kirigami.Action) || action.visible 0092 ); 0093 } 0094 0095 // Disable for empty menus or when we have a global toolbar 0096 enabled: { 0097 const pageStack = typeof applicationWindow !== "undefined" ? applicationWindow().pageStack : null; 0098 const itemExistsButStyleIsNotToolBar = item => item && item.globalToolBarStyle !== Kirigami.ApplicationHeaderStyle.ToolBar; 0099 return menu.count > 0 0100 && (!pageStack 0101 || !pageStack.globalToolBar 0102 || (pageStack.layers.depth > 1 0103 && itemExistsButStyleIsNotToolBar(pageStack.layers.currentItem)) 0104 || itemExistsButStyleIsNotToolBar(pageStack.trailingVisibleItem)); 0105 } 0106 0107 edge: Qt.application.layoutDirection === Qt.RightToLeft ? Qt.LeftEdge : Qt.RightEdge 0108 drawerOpen: false 0109 0110 // list items go to edges, have their own padding 0111 topPadding: 0 0112 leftPadding: 0 0113 rightPadding: 0 0114 bottomPadding: 0 0115 0116 property bool handleVisible: { 0117 if (typeof applicationWindow === "function") { 0118 const w = applicationWindow(); 0119 if (w) { 0120 return w.controlsVisible; 0121 } 0122 } 0123 // For a ContextDrawer its handle is hidden by default 0124 return false; 0125 } 0126 0127 contentItem: QQC2.ScrollView { 0128 // this just to create the attached property 0129 Kirigami.Theme.inherit: true 0130 implicitWidth: Kirigami.Units.gridUnit * 20 0131 ListView { 0132 id: menu 0133 interactive: contentHeight > height 0134 0135 model: root.visibleActions() 0136 0137 topMargin: root.handle.y > 0 ? menu.height - menu.contentHeight : 0 0138 header: QQC2.ToolBar { 0139 height: pageStack.globalToolBar.preferredHeight 0140 width: parent.width 0141 0142 Kirigami.Heading { 0143 id: heading 0144 elide: Text.ElideRight 0145 text: root.title 0146 0147 anchors { 0148 verticalCenter: parent.verticalCenter 0149 left: parent.left 0150 right: parent.right 0151 leftMargin: Kirigami.Units.largeSpacing 0152 rightMargin: Kirigami.Units.largeSpacing 0153 } 0154 } 0155 } 0156 0157 delegate: Column { 0158 id: delegate 0159 0160 required property T.Action modelData 0161 0162 width: parent.width 0163 0164 KP.ContextDrawerActionItem { 0165 tAction: delegate.modelData 0166 width: parent.width 0167 } 0168 0169 Repeater { 0170 model: delegate.modelData instanceof Kirigami.Action && delegate.modelData.expandible 0171 ? delegate.modelData.children : null 0172 0173 delegate: KP.ContextDrawerActionItem { 0174 width: parent.width 0175 leftPadding: Kirigami.Units.gridUnit 0176 opacity: !root.collapsed 0177 } 0178 } 0179 } 0180 } 0181 } 0182 }