import QtQuick 2.14 import QtQuick.Window 2.14 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.15 import QtQuick.Controls.Material 2.12 import PageEnum 1.0 import PageType 1.0 import Qt.labs.platform 1.1 import Qt.labs.folderlistmodel 2.12 import QtQuick.Dialogs 1.1 import "./" import "Controls" import "Pages" import "Pages/Protocols" import "Pages/Share" import "Config" Window { property var pages: ({}) property var protocolPages: ({}) property var sharePages: ({}) id: root visible: true width: GC.screenWidth height: GC.isDesktop() ? GC.screenHeight + titleBar.height : GC.screenHeight minimumWidth: 360 minimumHeight: GC.isDesktop() ? 640 : 0 Keys.enabled: true onClosing: { console.debug("QML onClosing signal") UiLogic.onCloseWindow() } title: "AmneziaVPN" function gotoPage(type, page, reset, slide) { let p_obj; if (type === PageType.Basic) p_obj = pages[page] else if (type === PageType.Proto) p_obj = protocolPages[page] else if (type === PageType.ShareProto) p_obj = sharePages[page] else return //console.debug("QML gotoPage " + type + " " + page + " " + p_obj) if (pageLoader.depth > 0) { pageLoader.currentItem.deactivated() } if (slide) { pageLoader.push(p_obj, {}, StackView.PushTransition) } else { pageLoader.push(p_obj, {}, StackView.Immediate) } if (reset) { p_obj.logic.onUpdatePage(); } p_obj.activated(reset) } function close_page() { if (pageLoader.depth <= 1) { return } pageLoader.currentItem.deactivated() pageLoader.pop() } function set_start_page(page, slide) { if (pageLoader.depth > 0) { pageLoader.currentItem.deactivated() } pageLoader.clear() if (slide) { pageLoader.push(pages[page], {}, StackView.PushTransition) } else { pageLoader.push(pages[page], {}, StackView.Immediate) } if (page === PageEnum.Start) { UiLogic.pushButtonBackFromStartVisible = !pageLoader.empty UiLogic.onUpdatePage(); } } TitleBar { id: titleBar anchors.top: root.top visible: GC.isDesktop() DragHandler { grabPermissions: TapHandler.CanTakeOverFromAnything onActiveChanged: { if (active) { root.startSystemMove(); } } target: null } onCloseButtonClicked: { if (UiLogic.currentPageValue === PageEnum.Start || UiLogic.currentPageValue === PageEnum.NewServer) { Qt.quit() } else { root.hide() } } } Rectangle { y: GC.isDesktop() ? titleBar.height : 0 anchors.fill: parent color: "white" } StackView { id: pageLoader y: GC.isDesktop() ? titleBar.height : 0 anchors.fill: parent focus: true onCurrentItemChanged: { //console.debug("QML onCurrentItemChanged " + pageLoader.currentItem) UiLogic.currentPageValue = currentItem.page } onDepthChanged: { UiLogic.pagesStackDepth = depth } Keys.onPressed: { UiLogic.keyPressEvent(event.key) event.accepted = true } } FolderListModel { id: folderModelPages folder: "qrc:/ui/qml/Pages/" nameFilters: ["*.qml"] showDirs: false onStatusChanged: if (status == FolderListModel.Ready) { for (var i=0; i