Warning, /libraries/kirigami-addons/src/components/AbstractMaximizeComponent.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2023 James Graham <james.h.graham@protonmail.com>
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.Layouts 1.15
0007 import Qt.labs.qmlmodels 1.0
0008
0009 import org.kde.kirigami 2.15 as Kirigami
0010
0011 /**
0012 * @brief A popup that covers the entire window to show a content item.
0013 *
0014 * This component is designed to show a content item at the maximum size the
0015 * application window will allow. The typical use is for showing a maximized image
0016 * or other piece of media in an application, but it could be any item if desired.
0017 *
0018 * The popup also has a header bar which has a writable title, an optional leading
0019 * item to the left, a list of custom actions specified by the actions property
0020 * and an optional footer item.
0021 */
0022 QQC2.Popup {
0023 id: root
0024
0025 /**
0026 * @brief The title of the overlay window.
0027 */
0028 property alias title: titleLabel.text
0029
0030 /**
0031 * @brief The subtitle of the overlay window.
0032 *
0033 * The label will be hidden and the title centered if this is not provided.
0034 */
0035 property alias subtitle: subtitleLabel.text
0036
0037 /**
0038 * @brief List of top row actions.
0039 *
0040 * Each action will be allocated a QQC2.ToolButton on the top row. All actions
0041 * are right aligned and appear next to the close button which is always present
0042 * so does not require specifying.
0043 */
0044 property alias actions: actionToolBar.actions
0045
0046 /**
0047 * @brief The main content item in the view.
0048 *
0049 * The item will be the sized to fit the available space. If the item is
0050 * larger than the available space it will be shrunk to fit.
0051 *
0052 * @note If stretching the item isn't desirable the user needs to manage this,
0053 * e.g. with a holding item. See ImageMaximizeDelegate.qml for an example.
0054 *
0055 * @sa ImageMaximizeDelegate.qml
0056 */
0057 property Item content
0058
0059 /**
0060 * @brief Item to the left of the overlay title.
0061 */
0062 property Item leading
0063
0064 /**
0065 * @brief Item at the bottom under the content.
0066 */
0067 property Item footer
0068
0069 parent: applicationWindow().overlay
0070 closePolicy: QQC2.Popup.CloseOnEscape
0071 width: parent.width
0072 height: parent.height
0073 modal: true
0074 padding: 0
0075 background: Item {}
0076
0077 ColumnLayout {
0078 anchors.fill: parent
0079 spacing: 0
0080
0081 QQC2.Control {
0082 Layout.fillWidth: true
0083 contentItem: RowLayout {
0084 spacing: Kirigami.Units.largeSpacing
0085
0086 Item {
0087 id: leadingParent
0088 Layout.preferredWidth: root.leading ? root.leading.implicitWidth : 0
0089 Layout.preferredHeight: root.leading ? root.leading.implicitHeight : 0
0090 visible: root.leading
0091 }
0092 ColumnLayout {
0093 Layout.fillWidth: true
0094 spacing: Kirigami.Units.smallSpacing
0095
0096 QQC2.Label {
0097 id: titleLabel
0098 Layout.fillWidth: true
0099 Layout.maximumWidth: implicitWidth + Kirigami.Units.largeSpacing
0100 font.weight: Font.Bold
0101 elide: Text.ElideRight
0102 textFormat: Text.PlainText
0103 }
0104 QQC2.Label {
0105 id: subtitleLabel
0106 Layout.fillWidth: true
0107 Layout.maximumWidth: implicitWidth + Kirigami.Units.largeSpacing
0108 visible: text !== ""
0109 color: Kirigami.Theme.disabledTextColor
0110 elide: Text.ElideRight
0111 textFormat: Text.PlainText
0112 }
0113 }
0114 Kirigami.ActionToolBar {
0115 id: actionToolBar
0116 alignment: Qt.AlignRight
0117 display: QQC2.AbstractButton.IconOnly
0118 }
0119 QQC2.ToolButton {
0120 Layout.preferredWidth: Kirigami.Units.gridUnit * 2
0121 Layout.preferredHeight: Kirigami.Units.gridUnit * 2
0122 display: QQC2.AbstractButton.IconOnly
0123
0124 action: Kirigami.Action {
0125 text: i18nd("kirigami-addons", "Close")
0126 icon.name: "dialog-close"
0127 onTriggered: root.close()
0128 }
0129
0130 QQC2.ToolTip.text: text
0131 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0132 QQC2.ToolTip.visible: hovered
0133 }
0134 }
0135
0136 background: Rectangle {
0137 color: Kirigami.Theme.alternateBackgroundColor
0138 }
0139
0140 Kirigami.Separator {
0141 anchors {
0142 left: parent.left
0143 right: parent.right
0144 bottom: parent.bottom
0145 }
0146 height: 1
0147 }
0148 }
0149 Item {
0150 id: contentParent
0151 Layout.fillWidth: true
0152 Layout.fillHeight: true
0153 }
0154 Item {
0155 id: footerParent
0156 Layout.fillWidth: true
0157 Layout.preferredHeight: root.footer ? root.footer.implicitHeight > Kirigami.Units.gridUnit * 12 ? Kirigami.Units.gridUnit * 12 : root.footer.implicitHeight : 0
0158 visible: root.footer && !root.hideCaption
0159 }
0160 }
0161
0162 // TODO: blur
0163 QQC2.Overlay.modal: Rectangle {
0164 color: Qt.rgba(0, 0, 0, 0.5)
0165 }
0166
0167 onLeadingChanged: {
0168 if (!root.leading) {
0169 return;
0170 }
0171 root.leading.parent = leadingParent;
0172 root.leading.anchors.fill = leadingParent;
0173 }
0174
0175 onContentChanged: {
0176 if (!root.content) {
0177 return;
0178 }
0179 root.content.parent = contentParent;
0180 root.content.anchors.fill = contentParent;
0181 }
0182
0183 onFooterChanged: {
0184 if (!root.footer) {
0185 return;
0186 }
0187 root.footer.parent = footerParent;
0188 root.footer.anchors.fill = footerParent;
0189 }
0190 }