8 import QtQuick.Layouts 1.12
9 import QtQuick.Controls 2.12 as QQC2
10 import org.kde.kirigami 2.13 as Kirigami
21 id: swipeNavigatorRoot
27 default property list<Kirigami.Page> pages
35 property alias layers: stackView
43 property bool big:
false
49 property Component header: Item {visible:
false}
55 property Component footer: Item {visible:
false}
62 property int initialIndex: 0
68 property alias currentIndex: columnView.currentIndex
80 function pushDialogLayer(page, properties = {}, windowProperties = {}) {
82 if (Kirigami.Settings.isMobile) {
83 item = layers.push(page, properties);
85 const windowComponent =
Qt.createComponent(
Qt.resolvedUrl(
"./ApplicationWindow.qml"));
86 if (!windowProperties.modality) {
87 windowProperties.modality =
Qt.WindowModal;
89 if (!windowProperties.height) {
90 windowProperties.height = Kirigami.Units.gridUnit * 30;
92 if (!windowProperties.width) {
93 windowProperties.width = Kirigami.Units.gridUnit * 50;
95 if (!windowProperties.minimumWidth) {
96 windowProperties.minimumWidth = Kirigami.Units.gridUnit * 20;
98 if (!windowProperties.minimumHeight) {
99 windowProperties.minimumHeight = Kirigami.Units.gridUnit * 15;
101 if (!windowProperties.flags) {
102 windowProperties.flags =
Qt.Dialog |
Qt.WindowCloseButtonHint;
104 const window = windowComponent.createObject(swipeNavigatorRoot, windowProperties);
106 item =
window.pageStack.push(page, properties);
108 item.Keys.escapePressed.
connect(event => item.closeDialog());
112 implicitWidth: stackView.implicitWidth
113 implicitHeight: stackView.implicitHeight
117 readonly
property bool tall: (_header.width + __main.implicitWidth + Math.abs(__main.offset) + _footer.width) > swipeNavigatorRoot.width
118 readonly property
int rowOne: Kirigami.Settings.isMobile ? 1 : 0
119 readonly property
int rowTwo: Kirigami.Settings.isMobile ? 0 : 1
120 readonly property
int rowDirection: Kirigami.Settings.isMobile ? 1 : -1
121 property Item item: Item {
125 when: !_gridManager.tall
129 when: _gridManager.tall
138 _dummyOne.visible =
false
139 _dummyTwo.visible =
false
141 _header.Layout.row += _gridManager.rowDirection
142 _footer.Layout.row += _gridManager.rowDirection
145 __main.Layout.column--
146 __main.Layout.columnSpan = 3
155 __main.Layout.columnSpan = 1
156 __main.Layout.column++
158 _header.Layout.row -= _gridManager.rowDirection
159 _footer.Layout.row -= _gridManager.rowDirection
162 _dummyOne.visible =
false
163 _dummyTwo.visible =
false
179 const d = stackView.depth;
180 for (let i = 1; i < d; ++i) {
185 initialItem: SN.TabViewLayout {
206 Layout.fillWidth:
true
222 sourceComponent: swipeNavigatorRoot.header
226 SN.PrivateSwipeTabBar {
228 readonly
property int offset: _header.width - _footer.width
229 readonly
property int effectiveOffset: _gridManager.tall ? 0 : offset
230 Layout.rightMargin: effectiveOffset > 0 ? effectiveOffset : 0
231 Layout.leftMargin: effectiveOffset < 0 ? -effectiveOffset : 0
232 Layout.fillHeight:
true
233 Layout.fillWidth:
true
234 Layout.alignment:
Qt.AlignHCenter
241 sourceComponent: swipeNavigatorRoot.footer
247 Accessible.role: Accessible.PageTabList
249 contentItem: Kirigami.ColumnView {
251 Layout.fillWidth:
true
252 Layout.fillHeight:
true
253 Layout.row: Kirigami.Settings.isMobile ? 0 : 1
255 columnResizeMode: Kirigami.ColumnView.SingleColumn
257 contentChildren: swipeNavigatorRoot.pages
260 columnView.currentIndex = swipeNavigatorRoot.initialIndex
264 onCurrentIndexChanged: {
265 Array.from(swipeNavigatorRoot.pages).forEach(item => item.enabled =
false)
266 swipeNavigatorRoot.pages[currentIndex].enabled =
true
270 popEnter: Transition {
274 duration: Kirigami.Units.longDuration
275 easing.type: Easing.InOutCubic
278 popExit: Transition {
283 duration: Kirigami.Units.longDuration
284 easing.type: Easing.InOutCubic
289 duration: Kirigami.Units.longDuration
290 easing.type: Easing.InCubic
295 pushEnter: Transition {
302 duration: Kirigami.Units.longDuration
303 easing.type: Easing.InOutCubic
308 duration: Kirigami.Units.longDuration
309 easing.type: Easing.OutCubic
315 pushExit: Transition {
319 duration: Kirigami.Units.longDuration
320 easing.type: Easing.InOutCubic
324 replaceEnter: Transition {
329 duration: Kirigami.Units.longDuration
330 easing.type: Easing.InOutCubic
335 duration: Kirigami.Units.longDuration
336 easing.type: Easing.OutCubic
341 replaceExit: Transition {
346 duration: Kirigami.Units.longDuration
347 easing.type: Easing.InCubic
352 duration: Kirigami.Units.longDuration
353 easing.type: Easing.InOutCubic