Warning, /utilities/powerplant/src/contents/ui/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 2.15
0006 import QtQuick.Controls 2.15 as QQC2
0007 import org.kde.kirigami 2.20 as Kirigami
0008 import QtQuick.Layouts 1.15
0009 import org.kde.powerplant 1.0
0010 
0011 /**
0012 * @brief A bottom drawer component with a drag indicator.
0013 *
0014 * Example:
0015 * @code
0016 * Components.BottomDrawer {
0017 *   id: drawer
0018 *   headerContentItem: Kirigami.Heading {
0019 *       text: "Drawer"
0020 *   }
0021 *
0022 *   drawerContentItem: ColumnLayout {
0023 *       Kirigami.BasicListItem {
0024 *           label: "Action 1"
0025 *           icon: "list-add"
0026 *           onClicked: {
0027 *               doSomething()
0028 *               drawer.close()
0029 *           }
0030 *       }
0031 *       Kirigami.BasicListItem{
0032 *           label: "Action 2"
0033 *           icon: "list-add"
0034 *           onClicked: {
0035 *               doSomething()
0036 *               drawer.close()
0037 *           }
0038 *       }
0039 *   }
0040 * }
0041 * @endcode
0042 */
0043 QQC2.Drawer {
0044     id: root
0045 
0046     /**
0047     * @brief This property holds the content item of the drawer
0048     */
0049     property alias drawerContentItem: drawerContent.contentItem
0050 
0051     /**
0052     * @brief This property holds the content item of the drawer header
0053     *
0054     * when no headerContentItem is set, the header will not be displayed
0055     */
0056     property alias headerContentItem: headerContent.contentItem
0057 
0058 
0059 
0060     edge: Qt.BottomEdge
0061     height:contents.implicitHeight
0062     width: applicationWindow().width
0063 
0064     // makes sure the drawer is not able to be opened when not trigered
0065     interactive : false
0066 
0067     background: Kirigami.ShadowedRectangle {
0068         corners {
0069             topRightRadius: 10
0070             topLeftRadius: 10
0071         }
0072 
0073         shadow {
0074             size: 20
0075             color: Qt.rgba(0, 0, 0, 0.5)
0076         }
0077 
0078         color: Kirigami.Theme.backgroundColor
0079     }
0080 
0081     onAboutToShow: root.interactive = true
0082     onClosed: root.interactive = false
0083 
0084     ColumnLayout {
0085         id: contents
0086 
0087         spacing: 0
0088         anchors.fill: parent
0089 
0090         Kirigami.ShadowedRectangle {
0091             id: headerBackground
0092 
0093             visible: headerContentItem
0094             height: header.implicitHeight
0095 
0096             Kirigami.Theme.colorSet: Kirigami.Theme.Header
0097             color: Kirigami.Theme.backgroundColor
0098 
0099             Layout.fillWidth: true
0100 
0101             corners {
0102                 topRightRadius: 10
0103                 topLeftRadius: 10
0104             }
0105 
0106             ColumnLayout{
0107                 id:header
0108 
0109                 anchors.fill: parent
0110                 spacing:0
0111                 clip: true
0112 
0113                 Handle {
0114                     // drag indicator displayed when there is a headerContentItem
0115                     id: handle
0116 
0117                     Layout.bottomMargin: 0
0118                 }
0119 
0120                 QQC2.Control {
0121                     id: headerContent
0122 
0123                     topPadding: 0
0124                     leftPadding: Kirigami.Units.mediumSpacing + handle.height
0125                     rightPadding: Kirigami.Units.mediumSpacing + handle.height
0126                     bottomPadding: Kirigami.Units.mediumSpacing + handle.height
0127 
0128                     Layout.fillHeight: true
0129                     Layout.fillWidth: true
0130                 }
0131 
0132                 Kirigami.Separator {
0133                     Layout.fillWidth: true
0134                 }
0135             }
0136         }
0137 
0138         Handle {
0139             // drag indecator displayed when there is no headerContentItem
0140             visible: !headerContentItem
0141         }
0142 
0143         QQC2.Control {
0144             id: drawerContent
0145 
0146             topPadding: 0
0147             leftPadding: 0
0148             rightPadding: 0
0149             bottomPadding: 0
0150 
0151             Layout.fillWidth: true
0152         }
0153     }
0154     component Handle: Rectangle {
0155         color: Kirigami.Theme.textColor
0156         radius: height / 2
0157         opacity: 0.5
0158         width: Kirigami.Units.gridUnit * 2.5
0159         height: Kirigami.Units.gridUnit / 4
0160 
0161         Layout.margins: Kirigami.Units.mediumSpacing
0162         Layout.alignment: Qt.AlignHCenter
0163     }
0164 }