Warning, /libraries/kirigami-addons/src/components/BottomDrawer.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 Mathis BrĂ¼chert <mbb@kaidan.im>
0002 //
0003 // SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 import QtQuick
0006 import QtQuick.Controls as QQC2
0007 import org.kde.kirigami as Kirigami
0008 import QtQuick.Layouts
0009 
0010 /**
0011 * @brief A bottom drawer component with a drag indicator.
0012 *
0013 * Example:
0014 * @code{.qml}
0015 * import org.kde.kirigamiaddons.delegates 1.0 as Delegates
0016 * import org.kde.kirigamiaddons.components 1.0 as Components
0017 *
0018 * Components.BottomDrawer {
0019 *     id: drawer
0020 *
0021 *     headerContentItem: Kirigami.Heading {
0022 *         text: "Drawer"
0023 *     }
0024 *
0025 *     Delegates.RoundedItemDelegate {
0026 *         text: "Action 1"
0027 *         icon.name: "list-add"
0028 *         onClicked: {
0029 *             doSomething()
0030 *             drawer.close()
0031 *         }
0032 *     }
0033 
0034 *     Delegates.RoundedItemDelegate {
0035 *         text: "Action 1"
0036 *         icon.name: "list-add"
0037 *         onClicked: {
0038 *             doSomething()
0039 *             drawer.close()
0040 *         }
0041 *     }
0042 * }
0043 * @endcode
0044 *
0045 * @image html bottomdrawer.png
0046 *
0047 * @since KirigamiAddons 0.12.0
0048 */
0049 QQC2.Drawer {
0050     id: root
0051 
0052     /**
0053     * @brief This property holds the content item of the drawer
0054     */
0055     default property alias drawerContentItem: drawerContent.contentItem
0056 
0057     /**
0058     * @brief This property holds the content item of the drawer header
0059     *
0060     * when no headerContentItem is set, the header will not be displayed
0061     */
0062     property alias headerContentItem: headerContent.contentItem
0063 
0064     component Handle: Rectangle {
0065         color: Kirigami.Theme.textColor
0066         radius: height
0067         opacity: 0.5
0068 
0069         implicitWidth: Math.round(Kirigami.Units.gridUnit * 2.5)
0070         implicitHeight: Math.round(Kirigami.Units.gridUnit / 4)
0071 
0072         Layout.margins: Kirigami.Units.mediumSpacing
0073         Layout.alignment: Qt.AlignHCenter
0074     }
0075 
0076     edge: Qt.BottomEdge
0077     width: applicationWindow().width
0078     height: Math.min(contentItem.implicitHeight, Math.round(applicationWindow().height * 0.8))
0079 
0080     // makes sure the drawer is not able to be opened when not trigered
0081     interactive : false
0082 
0083     background: Kirigami.ShadowedRectangle {
0084         corners {
0085             topRightRadius: Kirigami.Units.largeSpacing
0086             topLeftRadius: Kirigami.Units.largeSpacing
0087         }
0088 
0089         shadow {
0090             size: Kirigami.Units.gridUnit
0091             color: Qt.rgba(0, 0, 0, 0.5)
0092         }
0093 
0094         color: Kirigami.Theme.backgroundColor
0095     }
0096 
0097     onAboutToShow: root.interactive = true
0098     onClosed: root.interactive = false
0099 
0100     contentItem: ColumnLayout {
0101         spacing: 0
0102 
0103         Kirigami.ShadowedRectangle {
0104             id: headerBackground
0105 
0106             visible: headerContentItem
0107             height: header.implicitHeight
0108 
0109             Kirigami.Theme.colorSet: Kirigami.Theme.Window
0110             color: Kirigami.Theme.backgroundColor
0111 
0112             Layout.fillWidth: true
0113 
0114             corners {
0115                 topRightRadius: 10
0116                 topLeftRadius: 10
0117             }
0118 
0119             ColumnLayout{
0120                 id:header
0121 
0122                 anchors.fill: parent
0123                 spacing:0
0124                 clip: true
0125 
0126                 Handle {
0127                     // drag indicator displayed when there is a headerContentItem
0128                     id: handle
0129                 }
0130 
0131                 QQC2.Control {
0132                     id: headerContent
0133 
0134                     topPadding: 0
0135                     leftPadding: Kirigami.Units.mediumSpacing + handle.height
0136                     rightPadding: Kirigami.Units.mediumSpacing + handle.height
0137                     bottomPadding: Kirigami.Units.mediumSpacing + handle.height
0138 
0139                     Layout.fillHeight: true
0140                     Layout.fillWidth: true
0141                 }
0142             }
0143         }
0144 
0145         Handle {
0146             // drag indecator displayed when there is no headerContentItem
0147             visible: !headerContentItem
0148             Layout.topMargin: Kirigami.Units.largeSpacing
0149             Layout.bottomMargin: Kirigami.Units.largeSpacing
0150         }
0151 
0152         Kirigami.Separator {
0153             Layout.fillWidth: true
0154         }
0155 
0156         QQC2.Control {
0157             id: drawerContent
0158 
0159             Layout.fillWidth: true
0160             Layout.fillHeight: true
0161 
0162             leftPadding: 0
0163             rightPadding: 0
0164             topPadding: 0
0165             bottomPadding: 0
0166 
0167             background: Rectangle {
0168                 Kirigami.Theme.colorSet: Kirigami.Theme.View
0169                 Kirigami.Theme.inherit: false
0170                 color: Kirigami.Theme.backgroundColor
0171             }
0172         }
0173     }
0174 }