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
0005 import QtQuick.Controls as QQC2
0006 import QtQuick.Layouts
0007 import Qt.labs.qmlmodels
0008
0009 import org.kde.kirigami 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 Kirigami.OverlayZStacking.layer: Kirigami.OverlayZStacking.FullScreen
0078 z: Kirigami.OverlayZStacking.z
0079
0080 ColumnLayout {
0081 anchors.fill: parent
0082 spacing: 0
0083
0084 QQC2.Control {
0085 Layout.fillWidth: true
0086 contentItem: RowLayout {
0087 spacing: Kirigami.Units.largeSpacing
0088
0089 Item {
0090 id: leadingParent
0091 Layout.preferredWidth: root.leading ? root.leading.implicitWidth : 0
0092 Layout.preferredHeight: root.leading ? root.leading.implicitHeight : 0
0093 visible: root.leading
0094 }
0095 ColumnLayout {
0096 Layout.fillWidth: true
0097 spacing: Kirigami.Units.smallSpacing
0098
0099 QQC2.Label {
0100 id: titleLabel
0101 Layout.fillWidth: true
0102 Layout.maximumWidth: implicitWidth + Kirigami.Units.largeSpacing
0103 font.weight: Font.Bold
0104 elide: Text.ElideRight
0105 textFormat: Text.PlainText
0106 }
0107 QQC2.Label {
0108 id: subtitleLabel
0109 Layout.fillWidth: true
0110 Layout.maximumWidth: implicitWidth + Kirigami.Units.largeSpacing
0111 visible: text !== ""
0112 color: Kirigami.Theme.disabledTextColor
0113 elide: Text.ElideRight
0114 textFormat: Text.PlainText
0115 }
0116 }
0117 Kirigami.ActionToolBar {
0118 id: actionToolBar
0119 alignment: Qt.AlignRight
0120 display: QQC2.AbstractButton.IconOnly
0121 }
0122 QQC2.ToolButton {
0123 Layout.preferredWidth: Kirigami.Units.gridUnit * 2
0124 Layout.preferredHeight: Kirigami.Units.gridUnit * 2
0125 display: QQC2.AbstractButton.IconOnly
0126
0127 action: Kirigami.Action {
0128 text: i18nd("kirigami-addons6", "Close")
0129 icon.name: "dialog-close"
0130 onTriggered: root.close()
0131 }
0132
0133 QQC2.ToolTip.text: text
0134 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0135 QQC2.ToolTip.visible: hovered
0136 }
0137 }
0138
0139 background: Rectangle {
0140 color: Kirigami.Theme.alternateBackgroundColor
0141 }
0142
0143 Kirigami.Separator {
0144 anchors {
0145 left: parent.left
0146 right: parent.right
0147 bottom: parent.bottom
0148 }
0149 height: 1
0150 }
0151 }
0152 Item {
0153 id: contentParent
0154 Layout.fillWidth: true
0155 Layout.fillHeight: true
0156 }
0157 Item {
0158 id: footerParent
0159 Layout.fillWidth: true
0160 Layout.preferredHeight: root.footer ? root.footer.implicitHeight > Kirigami.Units.gridUnit * 12 ? Kirigami.Units.gridUnit * 12 : root.footer.implicitHeight : 0
0161 visible: root.footer && !root.hideCaption
0162 }
0163 }
0164
0165 // TODO: blur
0166 QQC2.Overlay.modal: Rectangle {
0167 color: Qt.rgba(0, 0, 0, 0.5)
0168 }
0169
0170 onLeadingChanged: {
0171 if (!root.leading) {
0172 return;
0173 }
0174 root.leading.parent = leadingParent;
0175 root.leading.anchors.fill = leadingParent;
0176 }
0177
0178 onContentChanged: {
0179 if (!root.content) {
0180 return;
0181 }
0182 root.content.parent = contentParent;
0183 root.content.anchors.fill = contentParent;
0184 }
0185
0186 onFooterChanged: {
0187 if (!root.footer) {
0188 return;
0189 }
0190 root.footer.parent = footerParent;
0191 root.footer.anchors.fill = footerParent;
0192 }
0193 }