diff --git a/client/ui/qml/Pages/PageAppSetting.qml b/client/ui/qml/Pages/PageAppSetting.qml index 7d86ef6d..4fd0e2ff 100644 --- a/client/ui/qml/Pages/PageAppSetting.qml +++ b/client/ui/qml/Pages/PageAppSetting.qml @@ -1,11 +1,15 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" PageBase { id: root + page: PageEnum.AppSettings + logic: AppSettingsLogic + BackButton { id: back } diff --git a/client/ui/qml/Pages/PageBase.qml b/client/ui/qml/Pages/PageBase.qml index 2544f944..12fe9e0d 100644 --- a/client/ui/qml/Pages/PageBase.qml +++ b/client/ui/qml/Pages/PageBase.qml @@ -1,11 +1,14 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" Item { id: root + property int page: PageEnum.Start + property var logic: null // width: GC.screenWidth // height: GC.screenHeight diff --git a/client/ui/qml/Pages/PageGeneralSettings.qml b/client/ui/qml/Pages/PageGeneralSettings.qml index 8d1c376f..4b54ba9c 100644 --- a/client/ui/qml/Pages/PageGeneralSettings.qml +++ b/client/ui/qml/Pages/PageGeneralSettings.qml @@ -5,8 +5,11 @@ import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.GeneralSettings + logic: GeneralSettingsLogic + BackButton { id: back } diff --git a/client/ui/qml/Pages/PageNetworkSetting.qml b/client/ui/qml/Pages/PageNetworkSetting.qml index 0f56cc40..c2c2b075 100644 --- a/client/ui/qml/Pages/PageNetworkSetting.qml +++ b/client/ui/qml/Pages/PageNetworkSetting.qml @@ -1,11 +1,15 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.NetworkSettings + logic: NetworkSettingsLogic + BackButton { id: back } diff --git a/client/ui/qml/Pages/PageNewServer.qml b/client/ui/qml/Pages/PageNewServer.qml index 96447586..1e40de3d 100644 --- a/client/ui/qml/Pages/PageNewServer.qml +++ b/client/ui/qml/Pages/PageNewServer.qml @@ -5,8 +5,11 @@ import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.NewServer + //logic: {} + BackButton { id: back_from_new_server } diff --git a/client/ui/qml/Pages/PageNewServerConfiguring.qml b/client/ui/qml/Pages/PageNewServerConfiguring.qml index 21e4ecbe..ab2e994e 100644 --- a/client/ui/qml/Pages/PageNewServerConfiguring.qml +++ b/client/ui/qml/Pages/PageNewServerConfiguring.qml @@ -1,11 +1,15 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.ServerConfiguring + logic: NewServerConfiguringLogic + enabled: NewServerConfiguringLogic.pageEnabled Caption { text: qsTr("Configuring...") diff --git a/client/ui/qml/Pages/PageNewServerProtocols.qml b/client/ui/qml/Pages/PageNewServerProtocols.qml index cf06c74b..19358c92 100644 --- a/client/ui/qml/Pages/PageNewServerProtocols.qml +++ b/client/ui/qml/Pages/PageNewServerProtocols.qml @@ -1,13 +1,17 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.3 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" import "InstallSettings" -Item { +PageBase { id: root + page: PageEnum.NewServerProtocols + logic: NewServerProtocolsLogic + BackButton { id: back } diff --git a/client/ui/qml/Pages/PageServerContainers.qml b/client/ui/qml/Pages/PageServerContainers.qml index fb7fd50c..c415e78c 100644 --- a/client/ui/qml/Pages/PageServerContainers.qml +++ b/client/ui/qml/Pages/PageServerContainers.qml @@ -1,12 +1,16 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" import "InstallSettings" -Item { +PageBase { id: root + page: PageEnum.ServerContainers + logic: ServerContainersLogic + enabled: ServerContainersLogic.pageEnabled BackButton { id: back diff --git a/client/ui/qml/Pages/PageServerList.qml b/client/ui/qml/Pages/PageServerList.qml index 44d515de..9ebce873 100644 --- a/client/ui/qml/Pages/PageServerList.qml +++ b/client/ui/qml/Pages/PageServerList.qml @@ -6,8 +6,11 @@ import "../Controls" import "./" import "../Config" -Item { +PageBase { id: root + page: PageEnum.ServersList + logic: ServerListLogic + BackButton { id: back } diff --git a/client/ui/qml/Pages/PageServerSettings.qml b/client/ui/qml/Pages/PageServerSettings.qml index 0b37ca5e..cb2eefa3 100644 --- a/client/ui/qml/Pages/PageServerSettings.qml +++ b/client/ui/qml/Pages/PageServerSettings.qml @@ -5,8 +5,11 @@ import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.ServerSettings + logic: ServerSettingsLogic + enabled: ServerSettingsLogic.pageEnabled BackButton { diff --git a/client/ui/qml/Pages/PageSetupWizard.qml b/client/ui/qml/Pages/PageSetupWizard.qml index a1c8705b..00144386 100644 --- a/client/ui/qml/Pages/PageSetupWizard.qml +++ b/client/ui/qml/Pages/PageSetupWizard.qml @@ -5,8 +5,11 @@ import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.Wizard + logic: WizardLogic + BackButton { id: back_from_setup_wizard } diff --git a/client/ui/qml/Pages/PageSetupWizardHighLevel.qml b/client/ui/qml/Pages/PageSetupWizardHighLevel.qml index 7bf56bb0..47a13e5b 100644 --- a/client/ui/qml/Pages/PageSetupWizardHighLevel.qml +++ b/client/ui/qml/Pages/PageSetupWizardHighLevel.qml @@ -5,8 +5,11 @@ import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.WizardHigh + logic: WizardLogic + BackButton { id: back_from_setup_wizard } diff --git a/client/ui/qml/Pages/PageSetupWizardLowLevel.qml b/client/ui/qml/Pages/PageSetupWizardLowLevel.qml index d05d605e..21ed6686 100644 --- a/client/ui/qml/Pages/PageSetupWizardLowLevel.qml +++ b/client/ui/qml/Pages/PageSetupWizardLowLevel.qml @@ -1,11 +1,15 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.WizardLow + logic: WizardLogic + BackButton { id: back_from_setup_wizard } diff --git a/client/ui/qml/Pages/PageSetupWizardMediumLevel.qml b/client/ui/qml/Pages/PageSetupWizardMediumLevel.qml index 17f6da49..0765aa5e 100644 --- a/client/ui/qml/Pages/PageSetupWizardMediumLevel.qml +++ b/client/ui/qml/Pages/PageSetupWizardMediumLevel.qml @@ -5,8 +5,11 @@ import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.WizardMedium + logic: WizardLogic + BackButton { id: back_from_setup_wizard } diff --git a/client/ui/qml/Pages/PageSetupWizardVPNMode.qml b/client/ui/qml/Pages/PageSetupWizardVPNMode.qml index df81fae0..37aca119 100644 --- a/client/ui/qml/Pages/PageSetupWizardVPNMode.qml +++ b/client/ui/qml/Pages/PageSetupWizardVPNMode.qml @@ -1,11 +1,15 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.WizardVpnMode + logic: WizardLogic + BackButton { id: back_from_setup_wizard } diff --git a/client/ui/qml/Pages/PageShareConnection.qml b/client/ui/qml/Pages/PageShareConnection.qml index 46628ae5..f7b0c639 100644 --- a/client/ui/qml/Pages/PageShareConnection.qml +++ b/client/ui/qml/Pages/PageShareConnection.qml @@ -1,11 +1,15 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.ShareConnection + logic: ShareConnectionLogic + BackButton { id: back } diff --git a/client/ui/qml/Pages/PageSites.qml b/client/ui/qml/Pages/PageSites.qml index b7f8fadc..a75b7b72 100644 --- a/client/ui/qml/Pages/PageSites.qml +++ b/client/ui/qml/Pages/PageSites.qml @@ -2,12 +2,16 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 import Qt.labs.platform 1.0 import QtQuick.Dialogs 1.0 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.Sites + logic: SitesLogic + BackButton { id: back } diff --git a/client/ui/qml/Pages/PageStart.qml b/client/ui/qml/Pages/PageStart.qml index d6e5dbcc..8ba54a37 100644 --- a/client/ui/qml/Pages/PageStart.qml +++ b/client/ui/qml/Pages/PageStart.qml @@ -1,11 +1,15 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import PageEnum 1.0 import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.Start + logic: StartPageLogic + BackButton { id: back_from_start } diff --git a/client/ui/qml/Pages/PageVPN.qml b/client/ui/qml/Pages/PageVPN.qml index debee5b6..9239b3f3 100644 --- a/client/ui/qml/Pages/PageVPN.qml +++ b/client/ui/qml/Pages/PageVPN.qml @@ -5,8 +5,10 @@ import "./" import "../Controls" import "../Config" -Item { +PageBase { id: root + page: PageEnum.Vpn + logic: VpnLogic Image { anchors.horizontalCenter: parent.horizontalCenter diff --git a/client/ui/qml/Pages/Protocols/PageProtoCloak.qml b/client/ui/qml/Pages/Protocols/PageProtoCloak.qml index 461dee8d..bf00e7f9 100644 --- a/client/ui/qml/Pages/Protocols/PageProtoCloak.qml +++ b/client/ui/qml/Pages/Protocols/PageProtoCloak.qml @@ -1,11 +1,15 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 -import "./" +import PageEnum 1.0 +import "../" import "../../Controls" import "../../Config" -Item { +PageBase { id: root + page: PageEnum.CloakSettings + logic: CloakLogic + enabled: CloakLogic.pageProtoCloakEnabled BackButton { id: back diff --git a/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml b/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml index 952e6dfc..f35a6822 100644 --- a/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml +++ b/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml @@ -1,11 +1,15 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 -import "./" +import PageEnum 1.0 +import "../" import "../../Controls" import "../../Config" -Item { +PageBase { id: root + page: PageEnum.OpenVpnSettings + logic: OpenVpnLogic + enabled: OpenVpnLogic.pageProtoOpenVpnEnabled BackButton { id: back diff --git a/client/ui/qml/Pages/Protocols/PageProtoShadowSocks.qml b/client/ui/qml/Pages/Protocols/PageProtoShadowSocks.qml index 85b3f808..d868333b 100644 --- a/client/ui/qml/Pages/Protocols/PageProtoShadowSocks.qml +++ b/client/ui/qml/Pages/Protocols/PageProtoShadowSocks.qml @@ -1,11 +1,15 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 -import "./" +import PageEnum 1.0 +import "../" import "../../Controls" import "../../Config" -Item { +PageBase { id: root + page: PageEnum.ShadowSocksSettings + logic: ShadowSocksLogic + enabled: ShadowSocksLogic.pageProtoShadowSocksEnabled BackButton { id: back diff --git a/client/ui/qml/main.qml b/client/ui/qml/main.qml index 4b6632c8..3c6c85c7 100644 --- a/client/ui/qml/main.qml +++ b/client/ui/qml/main.qml @@ -4,6 +4,7 @@ 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" @@ -11,8 +12,7 @@ import "Pages/Protocols" import "Config" Window { - Material.theme: Material.Dark - Material.accent: Material.Purple + property var pages: ({}) id: root visible: true @@ -26,124 +26,8 @@ Window { //flags: Qt.FramelessWindowHint title: "AmneziaVPN" - function getPageComponent(page) { - switch (page) { - case PageEnum.Start: - return page_start; - case PageEnum.NewServer: - return page_new_server - case PageEnum.NewServerProtocols: - return page_new_server_protocols - case PageEnum.Wizard: - return page_setup_wizard - case PageEnum.WizardHigh: - return page_setup_wizard_high_level - case PageEnum.WizardLow: - return page_setup_wizard_low_level - case PageEnum.WizardMedium: - return page_setup_wizard_medium_level - case PageEnum.WizardVpnMode: - return page_setup_wizard_vpn_mode - case PageEnum.ServerConfiguring: - return page_new_server_configuring - case PageEnum.Vpn: - return page_vpn - case PageEnum.GeneralSettings: - return page_general_settings - case PageEnum.AppSettings: - return page_app_settings - case PageEnum.NetworkSettings: - return page_network_settings - case PageEnum.ServerSettings: - return page_server_settings - case PageEnum.ServerContainers: - return page_server_containers - case PageEnum.ServersList: - return page_servers - case PageEnum.ShareConnection: - return page_share_connection - case PageEnum.Sites: - return page_sites - case PageEnum.OpenVpnSettings: - return page_proto_openvpn - case PageEnum.ShadowSocksSettings: - return page_proto_shadowsocks - case PageEnum.CloakSettings: - return page_proto_cloak - } - return undefined; - } - - function getPageEnum(item) { - if (item instanceof PageStart) { - return PageEnum.Start - } - if (item instanceof PageNewServer) { - return PageEnum.NewServer - } - if (item instanceof PageNewServerProtocols) { - return PageEnum.NewServerProtocols - } - if (item instanceof PageSetupWizard) { - return PageEnum.Wizard - } - if (item instanceof PageSetupWizardHighLevel) { - return PageEnum.WizardHigh - } - if (item instanceof PageSetupWizardLowLevel) { - return PageEnum.WizardLow - } - if (item instanceof PageSetupWizardMediumLevel) { - return PageEnum.WizardMedium - } - if (item instanceof PageSetupWizardVPNMode) { - return PageEnum.WizardVpnMode - } - if (item instanceof PageNewServerConfiguring) { - return PageEnum.ServerConfiguring - } - if (item instanceof PageVPN) { - return PageEnum.Vpn - } - if (item instanceof PageGeneralSettings) { - return PageEnum.GeneralSettings - } - if (item instanceof PageAppSetting) { - return PageEnum.AppSettings - } - if (item instanceof PageNetworkSetting) { - return PageEnum.NetworkSettings - } - if (item instanceof PageServerSettings) { - return PageEnum.ServerSettings - } - if (item instanceof PageServerContainers) { - return PageEnum.ServerContainers - } - if (item instanceof PageServerList) { - return PageEnum.ServersList - } - if (item instanceof PageShareConnection) { - return PageEnum.ShareConnection - } - if (item instanceof PageSites) { - return PageEnum.Sites - } - if (item instanceof PageProtoOpenVPN) { - return PageEnum.OpenVpnSettings - } - if (item instanceof PageProtoShadowSocks) { - return PageEnum.ShadowSocksSettings - } - if (item instanceof PageProtoCloak) { - return PageEnum.CloakSettings - } - return PageEnum.Start - } function gotoPage(page, reset, slide) { - let pageComponent = getPageComponent(page) - console.debug(pageComponent) if (reset) { if (page === PageEnum.ServerSettings) { ServerSettingsLogic.updatePage(); @@ -189,9 +73,9 @@ Window { } } if (slide) { - pageLoader.push(pageComponent, {}, StackView.PushTransition) + pageLoader.push(pages[page], {}, StackView.PushTransition) } else { - pageLoader.push(pageComponent, {}, StackView.Immediate) + pageLoader.push(pages[page], {}, StackView.Immediate) } } @@ -204,11 +88,10 @@ Window { function set_start_page(page, slide) { pageLoader.clear() - let pageComponent = getPageComponent(page) if (slide) { - pageLoader.push(pageComponent, {}, StackView.PushTransition) + pageLoader.push(pages[page], {}, StackView.PushTransition) } else { - pageLoader.push(pageComponent, {}, StackView.Immediate) + pageLoader.push(pages[page], {}, StackView.Immediate) } if (page === PageEnum.Start) { UiLogic.pushButtonBackFromStartVisible = !pageLoader.empty @@ -253,8 +136,7 @@ Window { // initialItem: page_servers onCurrentItemChanged: { - let pageEnum = root.getPageEnum(currentItem) - UiLogic.currentPageValue = pageEnum + UiLogic.currentPageValue = currentItem.page } Keys.onReleased: { @@ -277,95 +159,64 @@ Window { } } - Component { - id: page_start - PageStart {} - } - Component { - id: page_new_server - PageNewServer {} - } - Component { - id: page_setup_wizard - PageSetupWizard {} - } - Component { - id: page_setup_wizard_high_level - PageSetupWizardHighLevel {} - } - Component { - id: page_setup_wizard_vpn_mode - PageSetupWizardVPNMode {} - } - Component { - id: page_setup_wizard_medium_level - PageSetupWizardMediumLevel {} - } - Component { - id: page_setup_wizard_low_level - PageSetupWizardLowLevel {} - } - Component { - id: page_new_server_protocols - PageNewServerProtocols {} - } - Component { - id: page_vpn - PageVPN {} - } - Component { - id: page_sites - PageSites {} - } - Component { - id: page_general_settings - PageGeneralSettings {} - } - Component { - id: page_servers - PageServerList {} - } - Component { - id: page_app_settings - PageAppSetting {} - } - Component { - id: page_network_settings - PageNetworkSetting {} - } - Component { - id: page_server_settings - PageServerSettings {} - } - Component { - id: page_server_containers - PageServerContainers {} - } - Component { - id: page_share_connection - PageShareConnection {} - } - Component { - id: page_proto_openvpn - PageProtoOpenVPN {} - } - Component { - id: page_proto_shadowsocks - PageProtoShadowSocks {} - } - Component { - id: page_proto_cloak - PageProtoCloak {} - } - Component { - id: page_new_server_configuring - PageNewServerConfiguring {} + + FolderListModel { + id: folderModelPages + folder: "qrc:/ui/qml/Pages/" + nameFilters: ["*.qml"] + showDirs: false + + onStatusChanged: if (status == FolderListModel.Ready) { + for (var i=0; i