From 9de89e55449a1f0606cb44837c851fe815870fa5 Mon Sep 17 00:00:00 2001 From: pokamest Date: Thu, 28 Oct 2021 15:31:54 +0300 Subject: [PATCH] qml ui fixws: ss and cloak --- .../ui/pages_logic/protocols/CloakLogic.cpp | 86 +++--- client/ui/pages_logic/protocols/CloakLogic.h | 24 +- .../protocols/ShadowSocksLogic.cpp | 63 ++-- .../pages_logic/protocols/ShadowSocksLogic.h | 21 +- .../ui/qml/Pages/PageNewServerProtocols.qml | 168 ----------- client/ui/qml/Pages/PageServerContainers.qml | 37 ++- client/ui/qml/Pages/PageVPN.qml | 2 +- .../ui/qml/Pages/Protocols/PageProtoCloak.qml | 268 +++++++++--------- .../qml/Pages/Protocols/PageProtoOpenVPN.qml | 5 - .../Pages/Protocols/PageProtoShadowSocks.qml | 228 ++++++++------- 10 files changed, 381 insertions(+), 521 deletions(-) diff --git a/client/ui/pages_logic/protocols/CloakLogic.cpp b/client/ui/pages_logic/protocols/CloakLogic.cpp index 73632892..22d86efb 100644 --- a/client/ui/pages_logic/protocols/CloakLogic.cpp +++ b/client/ui/pages_logic/protocols/CloakLogic.cpp @@ -8,17 +8,17 @@ using namespace PageEnumNS; CloakLogic::CloakLogic(UiLogic *logic, QObject *parent): PageProtocolLogicBase(logic, parent), - m_comboBoxProtoCloakCipherText{"chacha20-poly1305"}, - m_lineEditProtoCloakSiteText{"tile.openstreetmap.org"}, - m_lineEditProtoCloakPortText{}, - m_pushButtonCloakSaveVisible{false}, - m_progressBarProtoCloakResetVisible{false}, - m_lineEditProtoCloakPortEnabled{false}, - m_pageProtoCloakEnabled{true}, - m_labelProtoCloakInfoVisible{true}, - m_labelProtoCloakInfoText{}, - m_progressBarProtoCloakResetValue{0}, - m_progressBarProtoCloakResetMaximium{100} + m_comboBoxCipherText{"chacha20-poly1305"}, + m_lineEditSiteText{"tile.openstreetmap.org"}, + m_lineEditPortText{}, + m_pushButtonSaveVisible{false}, + m_progressBarResetVisible{false}, + m_lineEditPortEnabled{false}, + m_pageEnabled{true}, + m_labelInfoVisible{true}, + m_labelInfoText{}, + m_progressBarResetValue{0}, + m_progressBarResetMaximium{100} { } @@ -26,31 +26,31 @@ CloakLogic::CloakLogic(UiLogic *logic, QObject *parent): void CloakLogic::updateProtocolPage(const QJsonObject &ckConfig, DockerContainer container, bool haveAuthData) { set_pageEnabled(haveAuthData); - set_pushButtonCloakSaveVisible(haveAuthData); - set_progressBarProtoCloakResetVisible(haveAuthData); + set_pushButtonSaveVisible(haveAuthData); + set_progressBarResetVisible(haveAuthData); - set_comboBoxProtoCloakCipherText(ckConfig.value(config_key::cipher). + set_comboBoxCipherText(ckConfig.value(config_key::cipher). toString(protocols::cloak::defaultCipher)); - set_lineEditProtoCloakSiteText(ckConfig.value(config_key::site). + set_lineEditSiteText(ckConfig.value(config_key::site). toString(protocols::cloak::defaultRedirSite)); - set_lineEditProtoCloakPortText(ckConfig.value(config_key::port). + set_lineEditPortText(ckConfig.value(config_key::port). toString(protocols::cloak::defaultPort)); - set_lineEditProtoCloakPortEnabled(container == DockerContainer::Cloak); + set_lineEditPortEnabled(container == DockerContainer::Cloak); } QJsonObject CloakLogic::getProtocolConfigFromPage(QJsonObject oldConfig) { - oldConfig.insert(config_key::cipher, comboBoxProtoCloakCipherText()); - oldConfig.insert(config_key::site, lineEditProtoCloakSiteText()); - oldConfig.insert(config_key::port, lineEditProtoCloakPortText()); + oldConfig.insert(config_key::cipher, comboBoxCipherText()); + oldConfig.insert(config_key::site, lineEditSiteText()); + oldConfig.insert(config_key::port, lineEditPortText()); return oldConfig; } -void CloakLogic::onPushButtonProtoCloakSaveClicked() +void CloakLogic::onPushButtonSaveClicked() { QJsonObject protocolConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::Cloak); protocolConfig = getProtocolConfigFromPage(protocolConfig); @@ -59,40 +59,40 @@ void CloakLogic::onPushButtonProtoCloakSaveClicked() QJsonObject newContainerConfig = containerConfig; newContainerConfig.insert(ProtocolProps::protoToString(Protocol::Cloak), protocolConfig); - UiLogic::PageFunc page_proto_cloak; - page_proto_cloak.setEnabledFunc = [this] (bool enabled) -> void { - set_pageProtoCloakEnabled(enabled); + UiLogic::PageFunc page_func; + page_func.setEnabledFunc = [this] (bool enabled) -> void { + set_pageEnabled(enabled); }; - UiLogic::ButtonFunc pushButton_proto_cloak_save; - pushButton_proto_cloak_save.setVisibleFunc = [this] (bool visible) ->void { - set_pushButtonCloakSaveVisible(visible); + UiLogic::ButtonFunc pushButton_save_func; + pushButton_save_func.setVisibleFunc = [this] (bool visible) ->void { + set_pushButtonSaveVisible(visible); }; - UiLogic::LabelFunc label_proto_cloak_info; - label_proto_cloak_info.setVisibleFunc = [this] (bool visible) ->void { - set_labelProtoCloakInfoVisible(visible); + UiLogic::LabelFunc label_info_func; + label_info_func.setVisibleFunc = [this] (bool visible) ->void { + set_labelInfoVisible(visible); }; - label_proto_cloak_info.setTextFunc = [this] (const QString& text) ->void { - set_labelProtoCloakInfoText(text); + label_info_func.setTextFunc = [this] (const QString& text) ->void { + set_labelInfoText(text); }; - UiLogic::ProgressFunc progressBar_proto_cloak_reset; - progressBar_proto_cloak_reset.setVisibleFunc = [this] (bool visible) ->void { - set_progressBarProtoCloakResetVisible(visible); + UiLogic::ProgressFunc progressBar_reset; + progressBar_reset.setVisibleFunc = [this] (bool visible) ->void { + set_progressBarResetVisible(visible); }; - progressBar_proto_cloak_reset.setValueFunc = [this] (int value) ->void { - set_progressBarProtoCloakResetValue(value); + progressBar_reset.setValueFunc = [this] (int value) ->void { + set_progressBarResetValue(value); }; - progressBar_proto_cloak_reset.getValueFunc = [this] (void) -> int { - return progressBarProtoCloakResetValue(); + progressBar_reset.getValueFunc = [this] (void) -> int { + return progressBarResetValue(); }; - progressBar_proto_cloak_reset.getMaximiumFunc = [this] (void) -> int { - return progressBarProtoCloakResetMaximium(); + progressBar_reset.getMaximiumFunc = [this] (void) -> int { + return progressBarResetMaximium(); }; ErrorCode e = uiLogic()->doInstallAction([this, containerConfig, &newContainerConfig](){ return ServerController::updateContainer(m_settings.serverCredentials(uiLogic()->selectedServerIndex), uiLogic()->selectedDockerContainer, containerConfig, newContainerConfig); }, - page_proto_cloak, progressBar_proto_cloak_reset, - pushButton_proto_cloak_save, label_proto_cloak_info); + page_func, progressBar_reset, + pushButton_save_func, label_info_func); if (!e) { m_settings.setContainerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, newContainerConfig); diff --git a/client/ui/pages_logic/protocols/CloakLogic.h b/client/ui/pages_logic/protocols/CloakLogic.h index b5c752a4..e110c465 100644 --- a/client/ui/pages_logic/protocols/CloakLogic.h +++ b/client/ui/pages_logic/protocols/CloakLogic.h @@ -9,20 +9,20 @@ class CloakLogic : public PageProtocolLogicBase { Q_OBJECT - AUTO_PROPERTY(QString, comboBoxProtoCloakCipherText) - AUTO_PROPERTY(QString, lineEditProtoCloakSiteText) - AUTO_PROPERTY(QString, lineEditProtoCloakPortText) - AUTO_PROPERTY(bool, pushButtonCloakSaveVisible) - AUTO_PROPERTY(bool, progressBarProtoCloakResetVisible) - AUTO_PROPERTY(bool, lineEditProtoCloakPortEnabled) - AUTO_PROPERTY(bool, pageProtoCloakEnabled) - AUTO_PROPERTY(bool, labelProtoCloakInfoVisible) - AUTO_PROPERTY(QString, labelProtoCloakInfoText) - AUTO_PROPERTY(int, progressBarProtoCloakResetValue) - AUTO_PROPERTY(int, progressBarProtoCloakResetMaximium) + AUTO_PROPERTY(QString, comboBoxCipherText) + AUTO_PROPERTY(QString, lineEditSiteText) + AUTO_PROPERTY(QString, lineEditPortText) + AUTO_PROPERTY(bool, pushButtonSaveVisible) + AUTO_PROPERTY(bool, progressBarResetVisible) + AUTO_PROPERTY(bool, lineEditPortEnabled) + AUTO_PROPERTY(bool, pageEnabled) + AUTO_PROPERTY(bool, labelInfoVisible) + AUTO_PROPERTY(QString, labelInfoText) + AUTO_PROPERTY(int, progressBarResetValue) + AUTO_PROPERTY(int, progressBarResetMaximium) public: - Q_INVOKABLE void onPushButtonProtoCloakSaveClicked(); + Q_INVOKABLE void onPushButtonSaveClicked(); public: explicit CloakLogic(UiLogic *uiLogic, QObject *parent = nullptr); diff --git a/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp b/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp index c00d8ae9..a19e8a2f 100644 --- a/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp +++ b/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp @@ -8,16 +8,15 @@ using namespace PageEnumNS; ShadowSocksLogic::ShadowSocksLogic(UiLogic *logic, QObject *parent): PageProtocolLogicBase(logic, parent), - m_comboBoxProtoShadowSocksCipherText{"chacha20-poly1305"}, - m_lineEditProtoShadowSocksPortText{}, - m_pushButtonShadowSocksSaveVisible{false}, - m_progressBarProtoShadowSocksResetVisible{false}, - m_lineEditProtoShadowSocksPortEnabled{false}, - m_pageProtoShadowSocksEnabled{true}, - m_labelProtoShadowSocksInfoVisible{true}, - m_labelProtoShadowSocksInfoText{}, - m_progressBarProtoShadowSocksResetValue{0}, - m_progressBarProtoShadowSocksResetMaximium{100} + m_comboBoxCipherText{"chacha20-poly1305"}, + m_lineEditPortText{}, + m_pushButtonSaveVisible{false}, + m_progressBaResetVisible{false}, + m_lineEditPortEnabled{false}, + m_labelInfoVisible{true}, + m_labelInfoText{}, + m_progressBaResetValue{0}, + m_progressBaResetMaximium{100} { } @@ -25,27 +24,27 @@ ShadowSocksLogic::ShadowSocksLogic(UiLogic *logic, QObject *parent): void ShadowSocksLogic::updateProtocolPage(const QJsonObject &ssConfig, DockerContainer container, bool haveAuthData) { set_pageEnabled(haveAuthData); - set_pushButtonShadowSocksSaveVisible(haveAuthData); - set_progressBarProtoShadowSocksResetVisible(haveAuthData); + set_pushButtonSaveVisible(haveAuthData); + set_progressBaResetVisible(haveAuthData); - set_comboBoxProtoShadowSocksCipherText(ssConfig.value(config_key::cipher). + set_comboBoxCipherText(ssConfig.value(config_key::cipher). toString(protocols::shadowsocks::defaultCipher)); - set_lineEditProtoShadowSocksPortText(ssConfig.value(config_key::port). + set_lineEditPortText(ssConfig.value(config_key::port). toString(protocols::shadowsocks::defaultPort)); - set_lineEditProtoShadowSocksPortEnabled(container == DockerContainer::ShadowSocks); + set_lineEditPortEnabled(container == DockerContainer::ShadowSocks); } QJsonObject ShadowSocksLogic::getProtocolConfigFromPage(QJsonObject oldConfig) { - oldConfig.insert(config_key::cipher, comboBoxProtoShadowSocksCipherText()); - oldConfig.insert(config_key::port, lineEditProtoShadowSocksPortText()); + oldConfig.insert(config_key::cipher, comboBoxCipherText()); + oldConfig.insert(config_key::port, lineEditPortText()); return oldConfig; } -void ShadowSocksLogic::onPushButtonProtoShadowSocksSaveClicked() +void ShadowSocksLogic::onPushButtonSaveClicked() { QJsonObject protocolConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::ShadowSocks); //protocolConfig = getShadowSocksConfigFromPage(protocolConfig); @@ -55,37 +54,37 @@ void ShadowSocksLogic::onPushButtonProtoShadowSocksSaveClicked() newContainerConfig.insert(ProtocolProps::protoToString(Protocol::ShadowSocks), protocolConfig); UiLogic::PageFunc page_proto_shadowsocks; page_proto_shadowsocks.setEnabledFunc = [this] (bool enabled) -> void { - set_pageProtoShadowSocksEnabled(enabled); + set_pageEnabled(enabled); }; UiLogic::ButtonFunc pushButton_proto_shadowsocks_save; pushButton_proto_shadowsocks_save.setVisibleFunc = [this] (bool visible) ->void { - set_pushButtonShadowSocksSaveVisible(visible); + set_pushButtonSaveVisible(visible); }; UiLogic::LabelFunc label_proto_shadowsocks_info; label_proto_shadowsocks_info.setVisibleFunc = [this] (bool visible) ->void { - set_labelProtoShadowSocksInfoVisible(visible); + set_labelInfoVisible(visible); }; label_proto_shadowsocks_info.setTextFunc = [this] (const QString& text) ->void { - set_labelProtoShadowSocksInfoText(text); + set_labelInfoText(text); }; - UiLogic::ProgressFunc progressBar_proto_shadowsocks_reset; - progressBar_proto_shadowsocks_reset.setVisibleFunc = [this] (bool visible) ->void { - set_progressBarProtoShadowSocksResetVisible(visible); + UiLogic::ProgressFunc progressBar_reset; + progressBar_reset.setVisibleFunc = [this] (bool visible) ->void { + set_progressBaResetVisible(visible); }; - progressBar_proto_shadowsocks_reset.setValueFunc = [this] (int value) ->void { - set_progressBarProtoShadowSocksResetValue(value); + progressBar_reset.setValueFunc = [this] (int value) ->void { + set_progressBaResetValue(value); }; - progressBar_proto_shadowsocks_reset.getValueFunc = [this] (void) -> int { - return progressBarProtoShadowSocksResetValue(); + progressBar_reset.getValueFunc = [this] (void) -> int { + return progressBaResetValue(); }; - progressBar_proto_shadowsocks_reset.getMaximiumFunc = [this] (void) -> int { - return progressBarProtoShadowSocksResetMaximium(); + progressBar_reset.getMaximiumFunc = [this] (void) -> int { + return progressBaResetMaximium(); }; ErrorCode e = uiLogic()->doInstallAction([this, containerConfig, &newContainerConfig](){ return ServerController::updateContainer(m_settings.serverCredentials(uiLogic()->selectedServerIndex), uiLogic()->selectedDockerContainer, containerConfig, newContainerConfig); }, - page_proto_shadowsocks, progressBar_proto_shadowsocks_reset, + page_proto_shadowsocks, progressBar_reset, pushButton_proto_shadowsocks_save, label_proto_shadowsocks_info); if (!e) { diff --git a/client/ui/pages_logic/protocols/ShadowSocksLogic.h b/client/ui/pages_logic/protocols/ShadowSocksLogic.h index 392831ab..b7c2c9ee 100644 --- a/client/ui/pages_logic/protocols/ShadowSocksLogic.h +++ b/client/ui/pages_logic/protocols/ShadowSocksLogic.h @@ -9,19 +9,18 @@ class ShadowSocksLogic : public PageProtocolLogicBase { Q_OBJECT - AUTO_PROPERTY(QString, comboBoxProtoShadowSocksCipherText) - AUTO_PROPERTY(QString, lineEditProtoShadowSocksPortText) - AUTO_PROPERTY(bool, pushButtonShadowSocksSaveVisible) - AUTO_PROPERTY(bool, progressBarProtoShadowSocksResetVisible) - AUTO_PROPERTY(bool, lineEditProtoShadowSocksPortEnabled) - AUTO_PROPERTY(bool, pageProtoShadowSocksEnabled) - AUTO_PROPERTY(bool, labelProtoShadowSocksInfoVisible) - AUTO_PROPERTY(QString, labelProtoShadowSocksInfoText) - AUTO_PROPERTY(int, progressBarProtoShadowSocksResetValue) - AUTO_PROPERTY(int, progressBarProtoShadowSocksResetMaximium) + AUTO_PROPERTY(QString, comboBoxCipherText) + AUTO_PROPERTY(QString, lineEditPortText) + AUTO_PROPERTY(bool, pushButtonSaveVisible) + AUTO_PROPERTY(bool, progressBaResetVisible) + AUTO_PROPERTY(bool, lineEditPortEnabled) + AUTO_PROPERTY(bool, labelInfoVisible) + AUTO_PROPERTY(QString, labelInfoText) + AUTO_PROPERTY(int, progressBaResetValue) + AUTO_PROPERTY(int, progressBaResetMaximium) public: - Q_INVOKABLE void onPushButtonProtoShadowSocksSaveClicked(); + Q_INVOKABLE void onPushButtonSaveClicked(); public: explicit ShadowSocksLogic(UiLogic *uiLogic, QObject *parent = nullptr); diff --git a/client/ui/qml/Pages/PageNewServerProtocols.qml b/client/ui/qml/Pages/PageNewServerProtocols.qml index e50206f7..828d05ce 100644 --- a/client/ui/qml/Pages/PageNewServerProtocols.qml +++ b/client/ui/qml/Pages/PageNewServerProtocols.qml @@ -147,172 +147,4 @@ PageBase { } } } - - - - - - - - - -// ScrollView { -// id: scrollView -// width: parent.width - 40 -// anchors.horizontalCenter: parent.horizontalCenter - -// anchors.top: pb_add_container.bottom -// anchors.topMargin: 10 - -// anchors.bottom: pushButtonConfigure.top -// anchors.bottomMargin: 10 - -// clip: true -// Column { -// width: scrollView.width -// anchors.horizontalCenter: parent.horizontalCenter - -// spacing: 5 -// InstallSettingsBase { -// containerDescription: qsTr("OpenVPN and ShadowSocks\n with masking using Cloak plugin") -// onContainerChecked: NewServerProtocolsLogic.checkBoxCloakChecked = checked - -// LabelType { -// width: 130 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// text: qsTr("Port (TCP)") -// } -// TextFieldType { -// width: parent.width - 130 - parent.spacing - parent.leftPadding * 2 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// text: NewServerProtocolsLogic.lineEditCloakPortText -// onEditingFinished: { -// NewServerProtocolsLogic.lineEditCloakPortText = text -// } -// } -// LabelType { -// width: 130 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// text: qsTr("Fake Web Site") -// } -// TextFieldType { -// width: parent.width - 130 - parent.spacing - parent.leftPadding * 2 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// text: NewServerProtocolsLogic.lineEditCloakSiteText -// onEditingFinished: { -// NewServerProtocolsLogic.lineEditCloakSiteText = text -// } -// } - -// } - -// InstallSettingsBase { -// containerDescription: qsTr("ShadowSocks") -// onContainerChecked: NewServerProtocolsLogic.checkBoxSsChecked = checked - -// LabelType { -// width: 130 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// text: qsTr("Port (TCP)") -// } -// TextFieldType { -// width: parent.width - 130 - parent.spacing - parent.leftPadding * 2 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// text: NewServerProtocolsLogic.lineEditSsPortText -// onEditingFinished: { -// NewServerProtocolsLogic.lineEditSsPortText = text -// } -// } -// LabelType { -// width: 130 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// text: qsTr("Encryption") -// } -// ComboBoxType { -// width: parent.width - 130 - parent.spacing - parent.leftPadding * 2 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// model: [ -// qsTr("chacha20-ietf-poly1305"), -// qsTr("xchacha20-ietf-poly1305"), -// qsTr("aes-256-gcm"), -// qsTr("aes-192-gcm"), -// qsTr("aes-128-gcm") -// ] -// currentIndex: { -// for (let i = 0; i < model.length; ++i) { -// if (NewServerProtocolsLogic.comboBoxSsCipherText === model[i]) { -// return i -// } -// } -// return -1 -// } -// onCurrentTextChanged: { -// NewServerProtocolsLogic.comboBoxSsCipherText = currentText -// } -// } - -// } - -// InstallSettingsBase { -// containerDescription: qsTr("OpenVPN") -// onContainerChecked: NewServerProtocolsLogic.checkBoxOpenVpnChecked = checked - -// LabelType { -// width: 130 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// text: qsTr("Port (TCP/UDP)") -// } -// TextFieldType { -// width: parent.width - 130 - parent.spacing - parent.leftPadding * 2 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// text: NewServerProtocolsLogic.lineEditOpenvpnPortText -// onEditingFinished: { -// NewServerProtocolsLogic.lineEditOpenvpnPortText = text -// } -// } -// LabelType { -// width: 130 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// text: qsTr("Protocol") -// } -// ComboBoxType { -// width: parent.width - 130 - parent.spacing - parent.leftPadding * 2 -// height: (parent.height - parent.spacing - parent.topPadding * 2) / 2 -// model: [ -// qsTr("udp"), -// qsTr("tcp"), -// ] -// currentIndex: { -// for (let i = 0; i < model.length; ++i) { -// if (NewServerProtocolsLogic.comboBoxOpenvpnProtoText === model[i]) { -// return i -// } -// } -// return -1 -// } -// onCurrentTextChanged: { -// NewServerProtocolsLogic.comboBoxOpenvpnProtoText = currentText -// } -// } - -// } - -// InstallSettingsBase { -// visible: false -// containerDescription: qsTr("WireGuard") -// onContainerChecked: NewServerProtocolsLogic.checkBoxWireGuardChecked = checked - -// LabelType { -// width: 130 -// height: (parent.height - parent.spacing - parent.topPadding * 2) -// text: qsTr("Port (UDP)") -// } -// TextFieldType { -// width: parent.width - 130 - parent.spacing - parent.leftPadding * 2 -// height: (parent.height - parent.spacing - parent.topPadding * 2) -// text: "32767" -// } -// } -// } -// } } diff --git a/client/ui/qml/Pages/PageServerContainers.qml b/client/ui/qml/Pages/PageServerContainers.qml index fee61a9f..565a2488 100644 --- a/client/ui/qml/Pages/PageServerContainers.qml +++ b/client/ui/qml/Pages/PageServerContainers.qml @@ -1,5 +1,6 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import QtQuick.Dialogs 1.1 import QtQuick.Layouts 1.15 import SortFilterProxyModel 0.2 import ContainerProps 1.0 @@ -292,19 +293,30 @@ PageBase { } ImageButtonType { - id: button_default - visible: service_type_role == ProtocolEnum.Vpn - + id: button_remove + visible: index === tb_c.currentIndex Layout.alignment: Qt.AlignRight checkable: true - img.source: checked ? "qrc:/images/check.png" : "qrc:/images/uncheck.png" + icon.source: "qrc:/images/delete.png" implicitWidth: 30 implicitHeight: 30 checked: default_role - onClicked: { - ServerContainersLogic.onPushButtonDefaultClicked(proxyContainersModel.mapToSource(index)) + + MessageDialog { + id: dialogRemove + standardButtons: StandardButton.Yes | StandardButton.Cancel + title: "AmneziaVPN" + text: qsTr("Remove container") + " " + name_role + "?" + "\n" + qsTr("This action will erase all data of this container on the server.") + onAccepted: { + tb_c.currentIndex = -1 + ServerContainersLogic.onPushButtonRemoveClicked(proxyContainersModel.mapToSource(index)) + } } + + onClicked: dialogRemove.open() + + VisibleBehavior on visible { } } ImageButtonType { @@ -322,23 +334,20 @@ PageBase { } ImageButtonType { - id: button_remove - visible: index === tb_c.currentIndex + id: button_default + visible: service_type_role == ProtocolEnum.Vpn + Layout.alignment: Qt.AlignRight checkable: true - icon.source: "qrc:/images/delete.png" + img.source: checked ? "qrc:/images/check.png" : "qrc:/images/uncheck.png" implicitWidth: 30 implicitHeight: 30 checked: default_role onClicked: { - tb_c.currentIndex = -1 - ServerContainersLogic.onPushButtonRemoveClicked(proxyContainersModel.mapToSource(index)) + ServerContainersLogic.onPushButtonDefaultClicked(proxyContainersModel.mapToSource(index)) } - - VisibleBehavior on visible { } } - } diff --git a/client/ui/qml/Pages/PageVPN.qml b/client/ui/qml/Pages/PageVPN.qml index 179b5744..ba3840aa 100644 --- a/client/ui/qml/Pages/PageVPN.qml +++ b/client/ui/qml/Pages/PageVPN.qml @@ -137,7 +137,7 @@ PageBase { width: parent.width - 40 height: 1 anchors.bottom: GC.isMobile() ? root.bottom : conn_type_label.top - anchors.bottomMargin: s10 + anchors.bottomMargin: 10 color: "#DDDDDD" } diff --git a/client/ui/qml/Pages/Protocols/PageProtoCloak.qml b/client/ui/qml/Pages/Protocols/PageProtoCloak.qml index 0e7baffb..c98aa6e7 100644 --- a/client/ui/qml/Pages/Protocols/PageProtoCloak.qml +++ b/client/ui/qml/Pages/Protocols/PageProtoCloak.qml @@ -1,5 +1,6 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import QtQuick.Layouts 1.15 import ProtocolEnum 1.0 import "../" import "../../Controls" @@ -10,144 +11,155 @@ PageProtocolBase { protocol: ProtocolEnum.Cloak logic: UiLogic.protocolLogic(protocol) - enabled: logic.pageProtoCloakEnabled + enabled: logic.pageEnabled BackButton { id: back } - Item { - x: 0 - y: 40 - width: 380 - height: 600 + + Caption { + id: caption + text: qsTr("Cloak Settings") + } + + ColumnLayout { + id: content enabled: logic.pageEnabled - ComboBoxType { - x: 190 - y: 60 - width: 151 - height: 31 - model: [ - qsTr("chacha20-poly1305"), - qsTr("aes-256-gcm"), - qsTr("aes-192-gcm"), - qsTr("aes-128-gcm") - ] - currentIndex: { - for (let i = 0; i < model.length; ++i) { - if (logic.comboBoxProtoCloakCipherText === model[i]) { - return i + anchors.top: caption.bottom + anchors.left: root.left + anchors.right: root.right + anchors.bottom: pb_save.top + anchors.margins: 20 + anchors.topMargin: 10 + + + RowLayout { + Layout.fillWidth: true + + LabelType { + height: 31 + text: qsTr("Cipher") + Layout.preferredWidth: 0.3 * root.width - 10 + } + + ComboBoxType { + Layout.fillWidth: true + height: 31 + model: [ + qsTr("chacha20-poly1305"), + qsTr("aes-256-gcm"), + qsTr("aes-192-gcm"), + qsTr("aes-128-gcm") + ] + currentIndex: { + for (let i = 0; i < model.length; ++i) { + if (logic.comboBoxCipherText === model[i]) { + return i + } } + return -1 } - return -1 - } - onCurrentTextChanged: { - logic.comboBoxProtoCloakCipherText = currentText - } - } - LabelType { - x: 30 - y: 60 - width: 151 - height: 31 - text: qsTr("Cipher") - } - LabelType { - x: 30 - y: 160 - width: 151 - height: 31 - text: qsTr("Port") - } - Text { - font.family: "Lato" - font.styleName: "normal" - font.pixelSize: 24 - color: "#100A44" - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: qsTr("Cloak Settings") - x: 20 - y: 0 - width: 340 - height: 30 - } - LabelType { - x: 30 - y: 110 - width: 151 - height: 31 - text: qsTr("Fake Web Site") - } - - LabelType { - id: label_proto_cloak_info - x: 30 - y: 550 - width: 321 - height: 41 - visible: logic.labelProtoCloakInfoVisible - text: logic.labelProtoCloakInfoText - } - TextFieldType { - id: lineEdit_proto_cloak_port - x: 190 - y: 160 - width: 151 - height: 31 - text: logic.lineEditProtoCloakPortText - onEditingFinished: { - logic.lineEditProtoCloakPortText = text - } - enabled: logic.lineEditProtoCloakPortEnabled - } - TextFieldType { - id: lineEdit_proto_cloak_site - x: 190 - y: 110 - width: 151 - height: 31 - text: logic.lineEditProtoCloakSiteText - onEditingFinished: { - logic.lineEditProtoCloakSiteText = text - } - } - ProgressBar { - id: progressBar_proto_cloak_reset - anchors.horizontalCenter: parent.horizontalCenter - y: 500 - width: 321 - height: 40 - from: 0 - to: logic.progressBarProtoCloakResetMaximium - value: logic.progressBarProtoCloakResetValue - background: Rectangle { - implicitWidth: parent.width - implicitHeight: parent.height - color: "#100A44" - radius: 4 - } - - contentItem: Item { - implicitWidth: parent.width - implicitHeight: parent.height - Rectangle { - width: progressBar_proto_cloak_reset.visualPosition * parent.width - height: parent.height - radius: 4 - color: Qt.rgba(255, 255, 255, 0.15); + onCurrentTextChanged: { + logic.comboBoxCipherText = currentText } } - visible: logic.progressBarProtoCloakResetVisible } - BlueButtonType { - anchors.horizontalCenter: parent.horizontalCenter - y: 500 - width: 321 - height: 40 - text: qsTr("Save and restart VPN") - visible: logic.pushButtonCloakSaveVisible - onClicked: { - logic.onPushButtonProtoCloakSaveClicked() + + RowLayout { + Layout.fillWidth: true + + LabelType { + Layout.preferredWidth: 0.3 * root.width - 10 + height: 31 + text: qsTr("Fake Web Site") } + + TextFieldType { + id: lineEdit_proto_cloak_site + Layout.fillWidth: true + height: 31 + text: logic.lineEditSiteText + onEditingFinished: { + logic.lineEditSiteText = text + } + } + } + + RowLayout { + Layout.fillWidth: true + + LabelType { + Layout.preferredWidth: 0.3 * root.width - 10 + height: 31 + text: qsTr("Port") + } + + TextFieldType { + id: lineEdit_proto_cloak_port + Layout.fillWidth: true + height: 31 + text: logic.lineEditPortText + onEditingFinished: { + logic.lineEditPortText = text + } + enabled: logic.lineEditPortEnabled + } + } + + Item { + Layout.fillHeight: true } } + + LabelType { + id: label_proto_cloak_info + x: 30 + anchors.bottom: pb_save.top + anchors.bottomMargin: 10 + width: parent.width - 40 + visible: logic.labelInfoVisible + text: logic.labelInfoText + } + + + ProgressBar { + id: progressBar_proto_cloak_reset + anchors.horizontalCenter: parent.horizontalCenter + anchors.fill: pb_save + from: 0 + to: logic.progressBarResetMaximium + value: logic.progressBarResetValue + background: Rectangle { + implicitWidth: parent.width + implicitHeight: parent.height + color: "#100A44" + radius: 4 + } + + contentItem: Item { + implicitWidth: parent.width + implicitHeight: parent.height + Rectangle { + width: progressBar_proto_cloak_reset.visualPosition * parent.width + height: parent.height + radius: 4 + color: Qt.rgba(255, 255, 255, 0.15); + } + } + visible: logic.progressBarResetVisible + } + BlueButtonType { + id: pb_save + anchors.horizontalCenter: parent.horizontalCenter + enabled: logic.pageEnabled + anchors.bottom: root.bottom + anchors.bottomMargin: 20 + width: root.width - 60 + height: 40 + text: qsTr("Save and restart VPN") + visible: logic.pushButtonSaveVisible + onClicked: { + logic.onPushButtonSaveClicked() + } + } + } diff --git a/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml b/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml index c1545a19..42ef1e59 100644 --- a/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml +++ b/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml @@ -338,9 +338,6 @@ PageProtocolBase { } - - - LabelType { id: label_proto_openvpn_info @@ -349,8 +346,6 @@ PageProtocolBase { text: logic.labelProtoOpenVpnInfoText } - - Rectangle { id: it_save implicitWidth: parent.width diff --git a/client/ui/qml/Pages/Protocols/PageProtoShadowSocks.qml b/client/ui/qml/Pages/Protocols/PageProtoShadowSocks.qml index 28d433fa..88239fb5 100644 --- a/client/ui/qml/Pages/Protocols/PageProtoShadowSocks.qml +++ b/client/ui/qml/Pages/Protocols/PageProtoShadowSocks.qml @@ -1,5 +1,6 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import QtQuick.Layouts 1.15 import ProtocolEnum 1.0 import "../" import "../../Controls" @@ -10,123 +11,136 @@ PageProtocolBase { protocol: ProtocolEnum.ShadowSocks logic: UiLogic.protocolLogic(protocol) - enabled: logic.pageProtoShadowSocksEnabled + enabled: logic.pageEnabled BackButton { id: back } - Item { - x: 0 - y: 40 - width: 380 - height: 600 + + Caption { + id: caption + text: qsTr("ShadowSocks Settings") + } + + + ColumnLayout { + id: content enabled: logic.pageEnabled - ComboBoxType { - x: 190 - y: 60 - width: 151 - height: 31 - model: [ - qsTr("chacha20-ietf-poly1305"), - qsTr("xchacha20-ietf-poly1305"), - qsTr("aes-256-gcm"), - qsTr("aes-192-gcm"), - qsTr("aes-128-gcm") - ] - currentIndex: { - for (let i = 0; i < model.length; ++i) { - if (logic.comboBoxProtoShadowSocksCipherText === model[i]) { - return i - } - } - return -1 - } - } - LabelType { - x: 30 - y: 60 - width: 151 - height: 31 - text: qsTr("Cipher") - } - LabelType { - x: 30 - y: 110 - width: 151 - height: 31 - text: qsTr("Port") - } - Text { - font.family: "Lato" - font.styleName: "normal" - font.pixelSize: 24 - color: "#100A44" - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: qsTr("ShadowSocks Settings") - x: 30 - y: 0 - width: 340 - height: 30 - } - LabelType { - id: label_proto_shadowsocks_info - x: 30 - y: 550 - width: 321 - height: 41 - visible: logic.labelProtoShadowSocksInfoVisible - text: logic.labelProtoShadowSocksInfoText - } - TextFieldType { - id: lineEdit_proto_shadowsocks_port - x: 190 - y: 110 - width: 151 - height: 31 - text: logic.lineEditProtoShadowSocksPortText - onEditingFinished: { - logic.lineEditProtoShadowSocksPortText = text - } - enabled: logic.lineEditProtoShadowSocksPortEnabled - } - ProgressBar { - id: progressBar_proto_shadowsocks_reset - anchors.horizontalCenter: parent.horizontalCenter - y: 500 - width: 321 - height: 40 - from: 0 - to: logic.progressBarProtoShadowSocksResetMaximium - value: logic.progressBarProtoShadowSocksResetValue - visible: logic.progressBarProtoShadowSocksResetVisible - background: Rectangle { - implicitWidth: parent.width - implicitHeight: parent.height - color: "#100A44" - radius: 4 + anchors.top: caption.bottom + anchors.left: root.left + anchors.right: root.right + anchors.bottom: pb_save.top + anchors.margins: 20 + anchors.topMargin: 10 + + + + RowLayout { + Layout.fillWidth: true + + LabelType { + height: 31 + text: qsTr("Cipher") + Layout.preferredWidth: 0.3 * root.width - 10 } - contentItem: Item { - implicitWidth: parent.width - implicitHeight: parent.height - Rectangle { - width: progressBar_proto_shadowsocks_reset.visualPosition * parent.width - height: parent.height - radius: 4 - color: Qt.rgba(255, 255, 255, 0.15); + ComboBoxType { + height: 31 + Layout.fillWidth: true + + model: [ + qsTr("chacha20-ietf-poly1305"), + qsTr("xchacha20-ietf-poly1305"), + qsTr("aes-256-gcm"), + qsTr("aes-192-gcm"), + qsTr("aes-128-gcm") + ] + currentIndex: { + for (let i = 0; i < model.length; ++i) { + if (logic.comboBoxCipherText === model[i]) { + return i + } + } + return -1 } } } - BlueButtonType { - anchors.horizontalCenter: parent.horizontalCenter - y: 500 - width: 321 - height: 40 - text: qsTr("Save and restart VPN") - visible: logic.pushButtonShadowSocksSaveVisible - onClicked: { - logic.onPushButtonProtoShadowSocksSaveClicked() + + RowLayout { + Layout.fillWidth: true + + LabelType { + Layout.preferredWidth: 0.3 * root.width - 10 + height: 31 + text: qsTr("Port") + } + + TextFieldType { + id: lineEdit_proto_shadowsocks_port + Layout.fillWidth: true + height: 31 + text: logic.lineEditPortText + onEditingFinished: { + logic.lineEditPortText = text + } + enabled: logic.lineEditPortEnabled + } + } + + Item { + Layout.fillHeight: true + } + } + + + LabelType { + id: label_proto_shadowsocks_info + x: 30 + anchors.bottom: pb_save.top + anchors.bottomMargin: 10 + width: parent.width - 40 + height: 41 + visible: logic.labelInfoVisible + text: logic.labelInfoText + } + + ProgressBar { + id: progressBar_reset + anchors.fill: pb_save + from: 0 + to: logic.progressBaResetMaximium + value: logic.progressBaResetValue + visible: logic.progressBaResetVisible + background: Rectangle { + implicitWidth: parent.width + implicitHeight: parent.height + color: "#100A44" + radius: 4 + } + + contentItem: Item { + implicitWidth: parent.width + implicitHeight: parent.height + Rectangle { + width: progressBar_reset.visualPosition * parent.width + height: parent.height + radius: 4 + color: Qt.rgba(255, 255, 255, 0.15); } } } + + BlueButtonType { + id: pb_save + enabled: logic.pageEnabled + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: root.bottom + anchors.bottomMargin: 20 + width: root.width - 60 + height: 40 + text: qsTr("Save and restart VPN") + visible: logic.pushButtonSaveVisible + onClicked: { + logic.onPushButtonSaveClicked() + } + } }