import QtQuick 2.14 import QtQuick.Window 2.14 import QtQuick.Controls 2.12 import QtQuick.Controls.Material 2.12 import PageEnum 1.0 import Qt.labs.platform 1.1 import Qt.labs.folderlistmodel 2.12 import QtQuick.Dialogs 1.1 import "./" import "Pages" import "Pages/Protocols" import "Config" Window { property var pages: ({}) property var protocolPages: ({}) id: root visible: true width: GC.screenWidth height: GC.isDesktop() ? GC.screenHeight + titleBar.height : GC.screenHeight Keys.enabled: true onClosing: { console.debug("QML onClosing signal") UiLogic.onCloseWindow() } //flags: Qt.FramelessWindowHint title: "AmneziaVPN" function gotoPage(page, reset, slide) { if (reset) { if (page === PageEnum.ServerSettings) { ServerSettingsLogic.onUpdatePage(); } if (page === PageEnum.ShareConnection) { } if (page === PageEnum.Wizard) { WizardLogic.radioButtonMediumChecked = true } if (page === PageEnum.WizardHigh) { WizardLogic.onUpdatePage(); } if (page === PageEnum.ServerConfiguringProgress) { ServerConfiguringProgressLogic.progressBarValue = 0; } if (page === PageEnum.GeneralSettings) { GeneralSettingsLogic.onUpdatePage(); } if (page === PageEnum.ServersList) { ServerListLogic.onUpdatePage(); } if (page === PageEnum.Start) { StartPageLogic.pushButtonBackFromStartVisible = !pageLoader.empty StartPageLogic.onUpdatePage(); } if (page === PageEnum.NewServerProtocols) { NewServerProtocolsLogic.onUpdatePage() } if (page === PageEnum.ServerContainers) { ServerContainersLogic.onUpdatePage() } if (page === PageEnum.AppSettings) { AppSettingsLogic.onUpdatePage() } if (page === PageEnum.NetworkSettings) { NetworkSettingsLogic.onUpdatePage() } if (page === PageEnum.Sites) { SitesLogic.updateSitesPage() } if (page === PageEnum.Vpn) { VpnLogic.updateVpnPage() } } if (slide) { pageLoader.push(pages[page], {}, StackView.PushTransition) } else { pageLoader.push(pages[page], {}, StackView.Immediate) } pages[page].activated(reset) } function gotoProtocolPage(protocol, reset, slide) { if (reset && protocolPages[protocol] !== "undefined") { protocolPages[protocol].logic.onUpdatePage(); } if (slide) { pageLoader.push(protocolPages[protocol], {}, StackView.PushTransition) } else { pageLoader.push(protocolPages[protocol], {}, StackView.Immediate) } protocolPages[protocol].activated(reset) } function close_page() { if (pageLoader.depth <= 1) { return } pageLoader.pop() } function set_start_page(page, slide) { 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 // initialItem: page_servers onCurrentItemChanged: { console.debug("QML onCurrentItemChanged " + pageLoader.currentItem) UiLogic.currentPageValue = currentItem.page } // Keys.onReleased: { // if (event.key === Qt.Key_Back || event.key === Qt.Key_Escape) { // console.debug("Back button captured") // if (UiLogic.currentPageValue !== PageEnum.VPN && // UiLogic.currentPageValue !== PageEnum.ServerConfiguring && // !(UiLogic.currentPageValue === PageEnum.Start && pageLoader.depth < 2)) { // close_page(); // } // // TODO: fix // //if (ui->stackedWidget_main->currentWidget()->isEnabled()) { // // closePage(); // //} // event.accepted = true // } // } Keys.onPressed: { UiLogic.keyPressEvent(event.key) } } FolderListModel { id: folderModelPages folder: "qrc:/ui/qml/Pages/" nameFilters: ["*.qml"] showDirs: false onStatusChanged: if (status == FolderListModel.Ready) { for (var i=0; i