Warning, /pim/mimetreeparser/src/quick/qml/private/Banner.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
0002 // SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0003 
0004 import QtQuick 2.15
0005 import QtQuick.Controls 2.15 as QQC2
0006 import QtQuick.Templates 2.15 as T
0007 import QtQuick.Layouts 1.15
0008 import org.kde.kirigami 2.20 as Kirigami
0009 
0010 /**
0011  * @brief An banner Item with support for informational, positive,
0012  * warning and error types, and with support for associated actions.
0013  *
0014  * Banner can be used to inform or interact with the user
0015  * without requiring the use of a dialog and are positionned in the footer
0016  * or header of a page. For inline content, see org::kde::kirigami::InlineMessage.
0017  *
0018  * The Banner is hidden by default.
0019  *
0020  * Optionally, actions can be added which are shown alongside an
0021  * optional close button on the right side of the Item. If more
0022  * actions are set than can fit, an overflow menu is provided.
0023  *
0024  * Example usage:
0025  * @code{.qml}
0026  * Banner {
0027  *     type: Kirigami.MessageType.Error
0028  *
0029  *     text: "My error message"
0030  *
0031  *     actions: [
0032  *         Kirigami.Action {
0033  *             icon.name: "edit"
0034  *             text: "Action text"
0035  *             onTriggered: {
0036  *                 // do stuff
0037  *             }
0038  *         },
0039  *         Kirigami.Action {
0040  *             icon.name: "edit"
0041  *             text: "Action text"
0042  *             onTriggered: {
0043  *                 // do stuff
0044  *             }
0045  *         }
0046  *     ]
0047  * }
0048  * @endcode
0049  */
0050 T.ToolBar {
0051     id: root
0052 
0053     /**
0054      * @brief This signal is emitted when a link is hovered in the message text.
0055      * @param The hovered link.
0056      */
0057     signal linkHovered(string link)
0058 
0059     /**
0060      * @brief This signal is emitted when a link is clicked or tapped in the message text.
0061      * @param The clicked or tapped link.
0062      */
0063     signal linkActivated(string link)
0064 
0065     /**
0066      * @brief This property holds the link embedded in the message text that the user is hovering over.
0067      */
0068     readonly property alias hoveredLink: label.hoveredLink
0069 
0070     /**
0071      * @brief This property holds the message type.
0072      *
0073      * The following values are allowed:
0074      * * ``Kirigami.MessageType.Information``
0075      * * ``Kirigami.MessageType.Positive``
0076      * * ``Kirigami.MessageType.Warning``
0077      * * ``Kirigami.MessageType.Error``
0078      *
0079      * default: ``Kirigami.MessageType.Information``
0080      *
0081      * @property Kirigami.MessageType type
0082      */
0083     property int type: Kirigami.MessageType.Information
0084 
0085     /**
0086      * @brief This property holds the message title.
0087      */
0088     property string title
0089 
0090     /**
0091      * @brief This property holds the message text.
0092      */
0093     property string text
0094 
0095     /**
0096      * @brief This property holds the icon name (default to predefined icons
0097      * depending on the title if not set).
0098      */
0099     property string iconName
0100 
0101     /**
0102      * @brief This property holds whether the close button is displayed.
0103      *
0104      * default: ``false``
0105      */
0106     property bool showCloseButton: false
0107 
0108     /**
0109      * This property holds the list of Kirigami Actions to show in the banner's
0110      * internal kirigami::ActionToolBar.
0111      *
0112      * Actions are added from left to right. If more actions
0113      * are set than can fit, an overflow menu is provided.
0114      */
0115     property list<Kirigami.Action> actions
0116 
0117     padding: Kirigami.Units.smallSpacing
0118 
0119     implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, contentWidth + leftPadding + rightPadding)
0120     implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, contentHeight + topPadding + bottomPadding)
0121 
0122     visible: false
0123 
0124     contentItem: GridLayout {
0125         columns: 3
0126         columnSpacing: Kirigami.Units.mediumSpacing
0127 
0128         Item {
0129             Layout.preferredWidth: closeButton.visible ? closeButton.implicitWidth : Kirigami.Units.iconSizes.medium
0130             Layout.preferredHeight: closeButton.visible ? closeButton.implicitWidth : Kirigami.Units.iconSizes.medium
0131             Layout.alignment: Qt.AlignTop
0132             Layout.rowSpan: 2
0133 
0134             Kirigami.Icon {
0135                 source: {
0136                     if (root.iconName.length > 0) {
0137                         return root.iconName
0138                     }
0139                     switch (root.type) {
0140                     case Kirigami.MessageType.Positive:
0141                         return "emblem-positive";
0142                     case Kirigami.MessageType.Warning:
0143                         return "data-warning";
0144                     case Kirigami.MessageType.Error:
0145                         return "data-error";
0146                     default:
0147                         return "data-information";
0148                     }
0149                 }
0150 
0151                 anchors.centerIn: parent
0152             }
0153         }
0154 
0155         Kirigami.Heading {
0156             id: heading
0157 
0158             level: 2
0159             text: root.title
0160             visible: text.length > 0
0161 
0162             Layout.row: visible ? 0 : 1
0163             Layout.column: 1
0164         }
0165 
0166         Kirigami.SelectableLabel {
0167             id: label
0168 
0169             color: Kirigami.Theme.textColor
0170             wrapMode: Text.WordWrap
0171 
0172             text: root.text
0173 
0174             onLinkHovered: link => root.linkHovered(link)
0175             onLinkActivated: link => root.linkActivated(link)
0176 
0177             Layout.fillWidth: true
0178             Layout.alignment: Qt.AlignTop
0179 
0180             Layout.row: heading.visible ? 1 : 0
0181             Layout.column: 1
0182         }
0183 
0184         QQC2.ToolButton {
0185             id: closeButton
0186 
0187             visible: root.showCloseButton
0188             text: i18ndc("mimetreeparser", "@action:button", "Close")
0189 
0190             icon.name: "dialog-close"
0191             display: QQC2.ToolButton.IconOnly
0192 
0193             onClicked: root.visible = false
0194 
0195             Layout.alignment: Qt.AlignTop
0196 
0197             QQC2.ToolTip.visible: Kirigami.Settings.tabletMode ? closeButton.pressed : closeButton.hovered
0198             QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0199             QQC2.ToolTip.text: text
0200 
0201             Layout.rowSpan: 2
0202             Layout.column: 2
0203         }
0204 
0205         Kirigami.ActionToolBar {
0206             id: actionsLayout
0207 
0208             flat: false
0209             actions: root.actions
0210             visible: root.actions.length > 0
0211             alignment: Qt.AlignRight
0212 
0213             Layout.column: 0
0214             Layout.columnSpan: 3
0215             Layout.row: 2
0216         }
0217     }
0218 
0219     background: Item {
0220         id: backgroundItem
0221 
0222         readonly property color color: switch (root.type) {
0223         case Kirigami.MessageType.Positive:
0224             return Kirigami.Theme.positiveTextColor;
0225         case Kirigami.MessageType.Warning:
0226             return Kirigami.Theme.neutralTextColor;
0227         case Kirigami.MessageType.Error:
0228             return Kirigami.Theme.negativeTextColor;
0229         default:
0230             return Kirigami.Theme.activeTextColor;
0231         }
0232 
0233         Rectangle {
0234             opacity: 0.2
0235             color: backgroundItem.color
0236             radius: Kirigami.Units.smallSpacing
0237             anchors.fill: parent
0238         }
0239     }
0240 }