diff --git a/client/containers/containers_defs.cpp b/client/containers/containers_defs.cpp index e695b06c..bb6f3a40 100644 --- a/client/containers/containers_defs.cpp +++ b/client/containers/containers_defs.cpp @@ -389,3 +389,18 @@ QJsonObject ContainerProps::getProtocolConfigFromContainer(const Proto protocol, return QJsonDocument::fromJson(protocolConfigString.toUtf8()).object(); } + +int ContainerProps::installPageOrder(DockerContainer container) +{ + switch (container) { + case DockerContainer::OpenVpn: return 4; + case DockerContainer::Cloak: return 5; + case DockerContainer::ShadowSocks: return 6; + case DockerContainer::WireGuard: return 2; + case DockerContainer::Awg: return 1; + case DockerContainer::Xray: return 3; + case DockerContainer::Ipsec: return 7; + case DockerContainer::SSXray: return 8; + default: return 0; + } +} diff --git a/client/containers/containers_defs.h b/client/containers/containers_defs.h index a63e217b..0d7f9aa1 100644 --- a/client/containers/containers_defs.h +++ b/client/containers/containers_defs.h @@ -72,6 +72,8 @@ namespace amnezia static bool isShareable(amnezia::DockerContainer container); static QJsonObject getProtocolConfigFromContainer(const amnezia::Proto protocol, const QJsonObject &containerConfig); + + static int installPageOrder(amnezia::DockerContainer container); }; static void declareQmlContainerEnum() diff --git a/client/ui/models/containers_model.cpp b/client/ui/models/containers_model.cpp index b8633a18..734f1e2d 100644 --- a/client/ui/models/containers_model.cpp +++ b/client/ui/models/containers_model.cpp @@ -41,6 +41,7 @@ QVariant ContainersModel::data(const QModelIndex &index, int role) const case IsCurrentlyProcessedRole: return container == static_cast(m_processedContainerIndex); case IsSupportedRole: return ContainerProps::isSupportedByCurrentPlatform(container); case IsShareableRole: return ContainerProps::isShareable(container); + case InstallPageOrderRole: return ContainerProps::installPageOrder(container); } return QVariant(); @@ -112,5 +113,7 @@ QHash ContainersModel::roleNames() const roles[IsCurrentlyProcessedRole] = "isCurrentlyProcessed"; roles[IsSupportedRole] = "isSupported"; roles[IsShareableRole] = "isShareable"; + + roles[InstallPageOrderRole] = "installPageOrder"; return roles; } diff --git a/client/ui/models/containers_model.h b/client/ui/models/containers_model.h index 9999307f..2a8117ea 100644 --- a/client/ui/models/containers_model.h +++ b/client/ui/models/containers_model.h @@ -31,7 +31,9 @@ public: IsCurrentlyProcessedRole, IsDefaultRole, IsSupportedRole, - IsShareableRole + IsShareableRole, + + InstallPageOrderRole }; int rowCount(const QModelIndex &parent = QModelIndex()) const override; diff --git a/client/ui/qml/Pages2/PageSettingsServerProtocols.qml b/client/ui/qml/Pages2/PageSettingsServerProtocols.qml index 5ce8fdbb..33585d71 100644 --- a/client/ui/qml/Pages2/PageSettingsServerProtocols.qml +++ b/client/ui/qml/Pages2/PageSettingsServerProtocols.qml @@ -60,7 +60,8 @@ PageType { id: proxyContainersModel sourceModel: ContainersModel sorters: [ - RoleSorter { roleName: "isInstalled"; sortOrder: Qt.DescendingOrder } + RoleSorter { roleName: "isInstalled"; sortOrder: Qt.DescendingOrder }, + RoleSorter { roleName: "installPageOrder"; sortOrder: Qt.AscendingOrder } ] } diff --git a/client/ui/qml/Pages2/PageSetupWizardProtocols.qml b/client/ui/qml/Pages2/PageSetupWizardProtocols.qml index cb922b4c..59da549c 100644 --- a/client/ui/qml/Pages2/PageSetupWizardProtocols.qml +++ b/client/ui/qml/Pages2/PageSetupWizardProtocols.qml @@ -34,6 +34,10 @@ PageType { value: true } ] + sorters: RoleSorter { + roleName: "installPageOrder" + sortOrder: Qt.AscendingOrder + } } ColumnLayout {