Warning, /libraries/kirigami-addons/src/components/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 * @since KirigamiAddons 0.10.0
0050 * @inherit QtQuick.Controls.Control
0051 */
0052 T.ToolBar {
0053 id: root
0054
0055 /**
0056 * @brief This signal is emitted when a link is hovered in the message text.
0057 * @param The hovered link.
0058 */
0059 signal linkHovered(string link)
0060
0061 /**
0062 * @brief This signal is emitted when a link is clicked or tapped in the message text.
0063 * @param The clicked or tapped link.
0064 */
0065 signal linkActivated(string link)
0066
0067 /**
0068 * @brief This property holds the link embedded in the message text that the user is hovering over.
0069 */
0070 readonly property alias hoveredLink: label.hoveredLink
0071
0072 /**
0073 * @brief This property holds the message type.
0074 *
0075 * The following values are allowed:
0076 * * ``Kirigami.MessageType.Information``
0077 * * ``Kirigami.MessageType.Positive``
0078 * * ``Kirigami.MessageType.Warning``
0079 * * ``Kirigami.MessageType.Error``
0080 *
0081 * default: ``Kirigami.MessageType.Information``
0082 *
0083 * @property Kirigami.MessageType type
0084 */
0085 property int type: Kirigami.MessageType.Information
0086
0087 /**
0088 * @brief This property holds the message title.
0089 */
0090 property string title
0091
0092 /**
0093 * @brief This property holds the message text.
0094 */
0095 property string text
0096
0097 /**
0098 * @brief This property holds whether the close button is displayed.
0099 *
0100 * default: ``false``
0101 */
0102 property bool showCloseButton: false
0103
0104 /**
0105 * This property holds the list of Kirigami Actions to show in the banner's
0106 * internal kirigami::ActionToolBar.
0107 *
0108 * Actions are added from left to right. If more actions
0109 * are set than can fit, an overflow menu is provided.
0110 */
0111 property list<Kirigami.Action> actions
0112
0113 padding: Kirigami.Units.smallSpacing
0114
0115 implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, contentWidth + leftPadding + rightPadding)
0116 implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, contentHeight + topPadding + bottomPadding)
0117
0118 visible: false
0119
0120 contentItem: GridLayout {
0121 columns: 3
0122 columnSpacing: Kirigami.Units.mediumSpacing
0123 rowSpacing: 0
0124
0125 Item {
0126 Layout.preferredWidth: closeButton.visible ? closeButton.implicitWidth : Kirigami.Units.iconSizes.medium
0127 Layout.preferredHeight: closeButton.visible ? closeButton.implicitWidth : Kirigami.Units.iconSizes.medium
0128 Layout.alignment: Qt.AlignTop
0129 Layout.rowSpan: 2
0130
0131 Kirigami.Icon {
0132 source: {
0133 switch (root.type) {
0134 case Kirigami.MessageType.Positive:
0135 return "emblem-positive";
0136 case Kirigami.MessageType.Warning:
0137 return "data-warning";
0138 case Kirigami.MessageType.Error:
0139 return "data-error";
0140 default:
0141 return "data-information";
0142 }
0143 }
0144
0145 anchors.centerIn: parent
0146 }
0147 }
0148
0149 Kirigami.Heading {
0150 id: heading
0151
0152 level: 2
0153 text: root.title
0154 visible: text.length > 0
0155
0156 Layout.row: visible ? 0 : 1
0157 Layout.column: 1
0158 }
0159
0160 Kirigami.SelectableLabel {
0161 id: label
0162
0163 color: Kirigami.Theme.textColor
0164 wrapMode: Text.WordWrap
0165
0166 text: root.text
0167
0168 verticalAlignment: Text.AlignVCenter
0169
0170 onLinkHovered: link => root.linkHovered(link)
0171 onLinkActivated: link => root.linkActivated(link)
0172
0173 Layout.fillWidth: true
0174 Layout.fillHeight: true
0175 Layout.minimumHeight: closeButton.visible ? closeButton.implicitWidth : Kirigami.Units.iconSizes.medium
0176 Layout.alignment: heading.text.length > 0 || label.lineCount > 1 ? Qt.AlignTop : Qt.AlignBaseline
0177
0178 Layout.row: heading.visible ? 1 : 0
0179 Layout.column: 1
0180 }
0181
0182 QQC2.ToolButton {
0183 id: closeButton
0184
0185 visible: root.showCloseButton
0186 text: i18ndc("kirigami-addons", "@action:button", "Close")
0187
0188 icon.name: "dialog-close"
0189 display: QQC2.ToolButton.IconOnly
0190
0191 onClicked: root.visible = false
0192
0193 Layout.alignment: Qt.AlignTop
0194
0195 QQC2.ToolTip.visible: Kirigami.Settings.tabletMode ? closeButton.pressed : closeButton.hovered
0196 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0197 QQC2.ToolTip.text: text
0198
0199 Layout.rowSpan: 2
0200 Layout.column: 2
0201 }
0202
0203 Kirigami.ActionToolBar {
0204 id: actionsLayout
0205
0206 flat: false
0207 actions: root.actions
0208 visible: root.actions.length > 0
0209 alignment: Qt.AlignRight
0210
0211 Layout.column: 0
0212 Layout.columnSpan: 3
0213 Layout.row: 2
0214 }
0215 }
0216
0217 background: Item {
0218
0219 Rectangle {
0220 color: {
0221 switch (root.type) {
0222 case Kirigami.MessageType.Positive:
0223 return Kirigami.Theme.positiveBackgroundColor;
0224 case Kirigami.MessageType.Warning:
0225 return Kirigami.Theme.neutralBackgroundColor;
0226 case Kirigami.MessageType.Error:
0227 return Kirigami.Theme.negativeBackgroundColor;
0228 default:
0229 return Kirigami.Theme.activeBackgroundColor;
0230 }
0231 }
0232 anchors.fill: parent
0233 }
0234
0235 Rectangle {
0236 id: separator
0237
0238 height: 1
0239 color: {
0240 let separatorColor = Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.backgroundColor, Kirigami.Theme.textColor, 0.15);
0241 let textColor = Kirigami.Theme.activeTextColor;
0242
0243 switch (root.type) {
0244 case Kirigami.MessageType.Positive:
0245 textColor = Kirigami.Theme.positiveTextColor;
0246 break;
0247 case Kirigami.MessageType.Warning:
0248 textColor = Kirigami.Theme.neutralTextColor;
0249 break;
0250 case Kirigami.MessageType.Error:
0251 textColor = Kirigami.Theme.negativeTextColor;
0252 break;
0253 }
0254
0255 return Qt.hsla(textColor.hslHue, textColor.hslSaturation, separatorColor.hslLightness, 1);
0256 }
0257
0258 anchors {
0259 left: parent.left
0260 right: parent.right
0261 top: root.position === QQC2.ToolBar.Header ? parent.bottom : undefined
0262 bottom: root.position === QQC2.ToolBar.Header ? undefined : parent.top
0263 }
0264 }
0265 }
0266 }