Warning, /frameworks/kirigami/autotests/tst_globaldrawer.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk>
0003 *
0004 * SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006
0007 import QtQuick
0008 import QtQuick.Controls as QQC2
0009 import QtQuick.Layouts
0010 import QtQuick.Templates as T
0011 import org.kde.kirigami as Kirigami
0012 import QtTest
0013
0014 // Inline components are needed because ApplicationItem and
0015 // ApplicationWindow types expect themselves to be top-level components.
0016 TestCase {
0017 name: "GlobalDrawerHeader"
0018 visible: true
0019 when: windowShown
0020
0021 width: 500
0022 height: 500
0023
0024 component AppItemComponent : Kirigami.ApplicationItem {
0025 id: app
0026
0027 property alias headerItem: headerItem
0028 property alias topItem: topItem
0029
0030 width: 500
0031 height: 500
0032 visible: true
0033
0034 globalDrawer: Kirigami.GlobalDrawer {
0035 drawerOpen: true
0036
0037 header: Rectangle {
0038 id: headerItem
0039 implicitHeight: 50
0040 implicitWidth: 50
0041 color: "red"
0042 radius: 20 // to see its bounds
0043 }
0044
0045 // Create some item which we can use to measure actual header height
0046 Rectangle {
0047 id: topItem
0048 Layout.fillWidth: true
0049 Layout.fillHeight: true
0050 color: "green"
0051 radius: 20 // to see its bounds
0052 }
0053 }
0054 }
0055
0056 Component {
0057 id: appItemComponent
0058 AppItemComponent {}
0059 }
0060
0061 function test_headerItemVisibility() {
0062 if (Qt.platform.os === "unix") {
0063 skip("On FreeBSD Qt 6.5 fails deep inside generated MOC code for `drawerOpen: true` binding");
0064 }
0065 const app = createTemporaryObject(appItemComponent, this);
0066 verify(app);
0067 const { headerItem, topItem } = app;
0068
0069 compare(app.globalDrawer.parent, app.T.Overlay.overlay);
0070
0071 waitForRendering(app.globalDrawer.contentItem);
0072
0073 const overlay = T.Overlay.overlay;
0074 verify(headerItem.height !== 0);
0075
0076 // Due to margins, position won't be exactly zero...
0077 const position = topItem.mapToItem(overlay, 0, 0);
0078 verify(position.y > 0);
0079 const oldY = position.y;
0080
0081 // ...but with visible header it would be greater than with invisible.
0082 headerItem.visible = false;
0083 tryVerify(() => {
0084 const position = topItem.mapToItem(overlay, 0, 0);
0085 return position.y < oldY;
0086 });
0087
0088 // And now return it back to where we started.
0089 headerItem.visible = true;
0090 tryVerify(() => {
0091 const position = topItem.mapToItem(overlay, 0, 0);
0092 return position.y === oldY;
0093 });
0094 }
0095
0096 component AppItemLoaderComponent : Kirigami.ApplicationItem {
0097 globalDrawer: globalDrawerLoader.item
0098 contextDrawer: contextDrawerLoader.item
0099
0100 Loader {
0101 id: globalDrawerLoader
0102 active: true
0103 sourceComponent: Kirigami.GlobalDrawer {}
0104 }
0105 Loader {
0106 id: contextDrawerLoader
0107 active: true
0108 sourceComponent: Kirigami.ContextDrawer {}
0109 }
0110 }
0111
0112 Component {
0113 id: appItemLoaderComponent
0114 AppItemLoaderComponent {}
0115 }
0116
0117 component AppWindowLoaderComponent : Kirigami.ApplicationWindow {
0118 globalDrawer: globalDrawerLoader.item
0119 contextDrawer: contextDrawerLoader.item
0120
0121 Loader {
0122 id: globalDrawerLoader
0123 active: true
0124 sourceComponent: Kirigami.GlobalDrawer {}
0125 }
0126 Loader {
0127 id: contextDrawerLoader
0128 active: true
0129 sourceComponent: Kirigami.ContextDrawer {}
0130 }
0131 }
0132
0133 Component {
0134 id: appWindowLoaderComponent
0135 AppWindowLoaderComponent {}
0136 }
0137
0138 function test_reparentingFromLoader_data() {
0139 return [
0140 { tag: "item", component: appItemLoaderComponent },
0141 { tag: "window", component: appWindowLoaderComponent },
0142 ];
0143 }
0144
0145 function test_reparentingFromLoader({ component }) {
0146 const app = createTemporaryObject(component, this);
0147 verify(app);
0148
0149 compare(app.globalDrawer.parent, app.T.Overlay.overlay);
0150 compare(app.contextDrawer.parent, app.T.Overlay.overlay);
0151 }
0152 }