Warning, /frameworks/kirigami/src/controls/ApplicationItem.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2017 Marco Martin <mart@kde.org>
0003 *
0004 * SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006
0007 import QtQuick
0008 import org.kde.kirigami as Kirigami
0009
0010 /**
0011 * @brief An item that provides the features of ApplicationWindow without the window itself.
0012 *
0013 * This allows embedding into a larger application.
0014 * It's based around the PageRow component that allows adding/removing of pages.
0015 *
0016 * Example usage:
0017 * @code
0018 * import org.kde.kirigami 2.4 as Kirigami
0019 *
0020 * Kirigami.ApplicationItem {
0021 * globalDrawer: Kirigami.GlobalDrawer {
0022 * actions: [
0023 * Kirigami.Action {
0024 * text: "View"
0025 * icon.name: "view-list-icons"
0026 * Kirigami.Action {
0027 * text: "action 1"
0028 * }
0029 * Kirigami.Action {
0030 * text: "action 2"
0031 * }
0032 * Kirigami.Action {
0033 * text: "action 3"
0034 * }
0035 * },
0036 * Kirigami.Action {
0037 * text: "Sync"
0038 * icon.name: "folder-sync"
0039 * }
0040 * ]
0041 * }
0042 *
0043 * contextDrawer: Kirigami.ContextDrawer {
0044 * id: contextDrawer
0045 * }
0046 *
0047 * pageStack.initialPage: Kirigami.Page {
0048 * mainAction: Kirigami.Action {
0049 * icon.name: "edit"
0050 * onTriggered: {
0051 * // do stuff
0052 * }
0053 * }
0054 * contextualActions: [
0055 * Kirigami.Action {
0056 * icon.name: "edit"
0057 * text: "Action text"
0058 * onTriggered: {
0059 * // do stuff
0060 * }
0061 * },
0062 * Kirigami.Action {
0063 * icon.name: "edit"
0064 * text: "Action text"
0065 * onTriggered: {
0066 * // do stuff
0067 * }
0068 * }
0069 * ]
0070 * // ...
0071 * }
0072 * }
0073 * @endcode
0074 */
0075 Kirigami.AbstractApplicationItem {
0076 id: root
0077
0078 /**
0079 * @brief This property holds the PageRow used to allocate the pages and
0080 * manage the transitions between them.
0081 *
0082 * It's using a PageRow, while having the same API as PageStack,
0083 * it positions the pages as adjacent columns, with as many columns
0084 * as can fit in the screen. An handheld device would usually have a single
0085 * fullscreen column, a tablet device would have many tiled columns.
0086 *
0087 * @property org::kde::kirigami::PageRow pageStack
0088 */
0089 readonly property alias pageStack: __pageStack
0090
0091 // Redefines here as here we can know a pointer to PageRow
0092 wideScreen: width >= applicationWindow().pageStack.defaultColumnWidth * 2
0093
0094 Component.onCompleted: {
0095 pageStack.currentItem?.forceActiveFocus();
0096 }
0097
0098 Kirigami.PageRow {
0099 id: __pageStack
0100 anchors {
0101 fill: parent
0102 // HACK: workaround a bug in android iOS keyboard management
0103 bottomMargin: ((Qt.platform.os === "android" || Qt.platform.os === "ios") || !Qt.inputMethod.visible) ? 0 : Qt.inputMethod.keyboardRectangle.height
0104 }
0105
0106 function goBack() {
0107 // NOTE: drawers are handling the back button by themselves
0108 const backEvent = {accepted: false}
0109 if (root.pageStack.currentIndex >= 1) {
0110 root.pageStack.currentItem.backRequested(backEvent);
0111 if (!backEvent.accepted) {
0112 root.pageStack.flickBack();
0113 backEvent.accepted = true;
0114 }
0115 }
0116
0117 if (Kirigami.Settings.isMobile && !backEvent.accepted && Qt.platform.os !== "ios") {
0118 Qt.quit();
0119 }
0120 }
0121 function goForward() {
0122 root.pageStack.currentIndex = Math.min(root.pageStack.depth - 1, root.pageStack.currentIndex + 1);
0123 }
0124 Keys.onBackPressed: event => {
0125 goBack();
0126 event.accepted = true;
0127 }
0128 Shortcut {
0129 sequences: [StandardKey.Forward]
0130 onActivated: __pageStack.goForward();
0131 }
0132 Shortcut {
0133 sequences: [StandardKey.Back]
0134 onActivated: __pageStack.goBack();
0135 }
0136
0137 background: Rectangle {
0138 color: root.color
0139 }
0140
0141 focus: true
0142 }
0143 }