Qml Containers Page refact

This commit is contained in:
pokamest 2021-09-16 19:49:50 +03:00
parent 0faf6c8599
commit a390f2e988
22 changed files with 191 additions and 197 deletions

View file

@ -2,14 +2,16 @@
#define CONTAIERNS_DEFS_H #define CONTAIERNS_DEFS_H
#include <QObject> #include <QObject>
#include <QQmlEngine>
#include "../protocols/protocols_defs.h" #include "../protocols/protocols_defs.h"
using namespace amnezia; using namespace amnezia;
namespace amnezia { namespace amnezia {
Q_NAMESPACE
namespace ContainerEnumNS {
Q_NAMESPACE
enum class DockerContainer { enum class DockerContainer {
None, None,
OpenVpn, OpenVpn,
@ -18,6 +20,10 @@ enum class DockerContainer {
WireGuard WireGuard
}; };
Q_ENUM_NS(DockerContainer) Q_ENUM_NS(DockerContainer)
} // namespace ContainerEnumNS
using namespace ContainerEnumNS;
using namespace ProtocolEnumNS;
DockerContainer containerFromString(const QString &container); DockerContainer containerFromString(const QString &container);
QString containerToString(DockerContainer container); QString containerToString(DockerContainer container);
@ -30,6 +36,16 @@ bool isContainerVpnType(DockerContainer c);
QVector<Protocol> protocolsForContainer(DockerContainer container); QVector<Protocol> protocolsForContainer(DockerContainer container);
static void declareQmlContainerEnum() {
qmlRegisterUncreatableMetaObject(
ContainerEnumNS::staticMetaObject,
"ContainerEnum",
1, 0,
"ContainerEnum",
"Error: only enums"
);
}
} // namespace amnezia } // namespace amnezia
QDebug operator<<(QDebug debug, const amnezia::DockerContainer &c); QDebug operator<<(QDebug debug, const amnezia::DockerContainer &c);

View file

@ -119,12 +119,15 @@ int main(int argc, char *argv[])
qRegisterMetaType<amnezia::DockerContainer>("amnezia::DockerContainer"); qRegisterMetaType<amnezia::DockerContainer>("amnezia::DockerContainer");
qRegisterMetaType<amnezia::Protocol>("amnezia::Protocol"); qRegisterMetaType<amnezia::Protocol>("amnezia::Protocol");
qRegisterMetaType<PageProtocolLogicBase *>("PageProtocolLogicBase *");
UiLogic *uiLogic = new UiLogic; UiLogic *uiLogic = new UiLogic;
QQmlApplicationEngine engine; QQmlApplicationEngine engine;
PageEnumNS::declareQML(); declareQmlPageEnum();
declareQmlProtocolEnum(); declareQmlProtocolEnum();
declareQmlContainerEnum();
const QUrl url(QStringLiteral("qrc:/ui/qml/main.qml")); const QUrl url(QStringLiteral("qrc:/ui/qml/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
@ -149,9 +152,9 @@ int main(int argc, char *argv[])
engine.rootContext()->setContextProperty("VpnLogic", uiLogic->vpnLogic()); engine.rootContext()->setContextProperty("VpnLogic", uiLogic->vpnLogic());
engine.rootContext()->setContextProperty("WizardLogic", uiLogic->wizardLogic()); engine.rootContext()->setContextProperty("WizardLogic", uiLogic->wizardLogic());
engine.rootContext()->setContextProperty("OpenVpnLogic", uiLogic->openVpnLogic()); // engine.rootContext()->setContextProperty("OpenVpnLogic", uiLogic->openVpnLogic());
engine.rootContext()->setContextProperty("ShadowSocksLogic", uiLogic->shadowSocksLogic()); // engine.rootContext()->setContextProperty("ShadowSocksLogic", uiLogic->shadowSocksLogic());
engine.rootContext()->setContextProperty("CloakLogic", uiLogic->cloakLogic()); // engine.rootContext()->setContextProperty("CloakLogic", uiLogic->cloakLogic());
engine.load(url); engine.load(url);

View file

@ -1,9 +1,9 @@
#include "protocols_defs.h" #include "protocols_defs.h"
QDebug operator<<(QDebug debug, const amnezia::Protocol &p) QDebug operator<<(QDebug debug, const amnezia::ProtocolEnumNS::Protocol &p)
{ {
QDebugStateSaver saver(debug); QDebugStateSaver saver(debug);
debug.nospace() << protoToString(p); debug.nospace() << amnezia::protoToString(p);
return debug; return debug;
} }
@ -53,7 +53,7 @@ QMap<amnezia::Protocol, QString> amnezia::protocolDescriptions()
return {}; return {};
} }
bool amnezia::isProtocolVpnType(Protocol p) bool amnezia::isProtocolVpnType(ProtocolEnumNS::Protocol p)
{ {
switch (p) { switch (p) {
case Protocol::Any : return false; case Protocol::Any : return false;

View file

@ -3,6 +3,7 @@
#include <QObject> #include <QObject>
#include <QDebug> #include <QDebug>
#include <QQmlEngine>
namespace amnezia { namespace amnezia {
namespace config_key { namespace config_key {
@ -113,6 +114,7 @@ constexpr char serverPskKeyPath[] = "/opt/amnezia/wireguard/wireguard_psk.key";
} // namespace protocols } // namespace protocols
namespace ProtocolEnumNS {
Q_NAMESPACE Q_NAMESPACE
enum class Protocol { enum class Protocol {
Any, Any,
@ -122,6 +124,9 @@ enum class Protocol {
WireGuard WireGuard
}; };
Q_ENUM_NS(Protocol) Q_ENUM_NS(Protocol)
} // namespace ProtocolEnumNS
using namespace ProtocolEnumNS;
QVector<Protocol> allProtocols(); QVector<Protocol> allProtocols();
@ -134,7 +139,7 @@ bool isProtocolVpnType(Protocol p);
static void declareQmlProtocolEnum() { static void declareQmlProtocolEnum() {
qmlRegisterUncreatableMetaObject( qmlRegisterUncreatableMetaObject(
PageEnumNS::staticMetaObject, ProtocolEnumNS::staticMetaObject,
"ProtocolEnum", "ProtocolEnum",
1, 0, 1, 0,
"ProtocolEnum", "ProtocolEnum",

View file

@ -108,5 +108,6 @@
<file>ui/qml/Controls/Caption.qml</file> <file>ui/qml/Controls/Caption.qml</file>
<file>ui/qml/Controls/Logo.qml</file> <file>ui/qml/Controls/Logo.qml</file>
<file>ui/qml/Pages/InstallSettings/SelectContainer.qml</file> <file>ui/qml/Pages/InstallSettings/SelectContainer.qml</file>
<file>ui/qml/Pages/Protocols/PageProtocolBase.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View file

@ -11,10 +11,10 @@ enum Page {Start = 0, NewServer, NewServerProtocols, Vpn,
Wizard, WizardLow, WizardMedium, WizardHigh, WizardVpnMode, ServerConfiguring, Wizard, WizardLow, WizardMedium, WizardHigh, WizardVpnMode, ServerConfiguring,
GeneralSettings, AppSettings, NetworkSettings, ServerSettings, GeneralSettings, AppSettings, NetworkSettings, ServerSettings,
ServerContainers, ServersList, ShareConnection, Sites, ServerContainers, ServersList, ShareConnection, Sites,
OpenVpnSettings, ShadowSocksSettings, CloakSettings}; ProtocolSettings};
Q_ENUM_NS(Page) Q_ENUM_NS(Page)
static void declareQML() { static void declareQmlPageEnum() {
qmlRegisterUncreatableMetaObject( qmlRegisterUncreatableMetaObject(
PageEnumNS::staticMetaObject, PageEnumNS::staticMetaObject,
"PageEnum", "PageEnum",

View file

@ -9,15 +9,3 @@ PageLogicBase::PageLogicBase(UiLogic *logic, QObject *parent):
} }
Page PageLogicBase::pageForProto(Protocol p)
{
switch (p) {
case Protocol::OpenVpn: return Page::OpenVpnSettings;
case Protocol::ShadowSocks: return Page::ShadowSocksSettings;
case Protocol::OpenVpn: return Page::OpenVpnSettings;
case Protocol::OpenVpn: return Page::OpenVpnSettings;
default:
break;
}
}

View file

@ -20,7 +20,6 @@ public:
~PageLogicBase() = default; ~PageLogicBase() = default;
Q_INVOKABLE virtual void updatePage() {} Q_INVOKABLE virtual void updatePage() {}
Q_INVOKABLE Page pageForProto(amnezia::Protocol p);
protected: protected:
UiLogic *uiLogic() const { return m_uiLogic; } UiLogic *uiLogic() const { return m_uiLogic; }

View file

@ -128,7 +128,7 @@ void ServerContainersLogic::onPushButtonProtoSettingsClicked(amnezia::DockerCont
uiLogic()->selectedDockerContainer, uiLogic()->selectedDockerContainer,
m_settings.haveAuthData(uiLogic()->selectedServerIndex)); m_settings.haveAuthData(uiLogic()->selectedServerIndex));
emit uiLogic()->goToPage(Page::OpenVpnSettings); emit uiLogic()->goToProtocolPage(static_cast<int>(p));
} }
@ -258,50 +258,3 @@ void ServerContainersLogic::setupProtocolsPageConnections()
} }
} }
//void ServerContainersLogic::onPushButtonProtoCloakOpenVpnContOpenvpnConfigClicked()
//{
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
// uiLogic()->openVpnLogic()->updateOpenVpnPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn),
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
// uiLogic()->goToPage(Page::OpenVpnSettings);
//}
//void ServerContainersLogic::onPushButtonProtoCloakOpenVpnContSsConfigClicked()
//{
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
// uiLogic()->shadowSocksLogic()->updateShadowSocksPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::ShadowSocks),
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
// uiLogic()->goToPage(Page::ShadowSocksSettings);
//}
//void ServerContainersLogic::onPushButtonProtoCloakOpenVpnContCloakConfigClicked()
//{
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
// uiLogic()->cloakLogic()->updateCloakPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::Cloak),
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
// uiLogic()->goToPage(Page::CloakSettings);
//}
//void ServerContainersLogic::onPushButtonProtoOpenVpnContOpenvpnConfigClicked()
//{
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpn;
// uiLogic()->openVpnLogic()->updateOpenVpnPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn),
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
// uiLogic()->goToPage(Page::OpenVpnSettings);
//}
//void ServerContainersLogic::onPushButtonProtoSsOpenVpnContOpenvpnConfigClicked()
//{
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks;
// uiLogic()->openVpnLogic()->updateOpenVpnPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn),
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
// uiLogic()->goToPage(Page::OpenVpnSettings);
//}
//void ServerContainersLogic::onPushButtonProtoSsOpenVpnContSsConfigClicked()
//{
// uiLogic()->selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks;
// uiLogic()->shadowSocksLogic()->updateShadowSocksPage(m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::ShadowSocks),
// uiLogic()->selectedDockerContainer, m_settings.haveAuthData(uiLogic()->selectedServerIndex));
// uiLogic()->goToPage(Page::ShadowSocksSettings);
//}

View file

@ -42,14 +42,6 @@ class ServerContainersLogic : public PageLogicBase
public: public:
Q_INVOKABLE void updateServerContainersPage(); Q_INVOKABLE void updateServerContainersPage();
// Q_INVOKABLE void onPushButtonProtoCloakOpenVpnContOpenvpnConfigClicked();
// Q_INVOKABLE void onPushButtonProtoCloakOpenVpnContSsConfigClicked();
// Q_INVOKABLE void onPushButtonProtoCloakOpenVpnContCloakConfigClicked();
// Q_INVOKABLE void onPushButtonProtoOpenVpnContOpenvpnConfigClicked();
// Q_INVOKABLE void onPushButtonProtoSsOpenVpnContOpenvpnConfigClicked();
// Q_INVOKABLE void onPushButtonProtoSsOpenVpnContSsConfigClicked();
Q_INVOKABLE void onPushButtonProtoSettingsClicked(amnezia::DockerContainer c, amnezia::Protocol p); Q_INVOKABLE void onPushButtonProtoSettingsClicked(amnezia::DockerContainer c, amnezia::Protocol p);
public: public:

View file

@ -8,24 +8,26 @@ using namespace PageEnumNS;
OpenVpnLogic::OpenVpnLogic(UiLogic *logic, QObject *parent): OpenVpnLogic::OpenVpnLogic(UiLogic *logic, QObject *parent):
PageProtocolLogicBase(logic, parent), PageProtocolLogicBase(logic, parent),
m_lineEditProtoOpenVpnSubnetText{}, m_lineEditProtoOpenVpnSubnetText{""},
m_radioButtonProtoOpenVpnTcpEnabled{true},
m_radioButtonProtoOpenVpnTcpChecked{false},
m_radioButtonProtoOpenVpnUdpEnabled{true},
m_radioButtonProtoOpenVpnUdpChecked{false}, m_radioButtonProtoOpenVpnUdpChecked{false},
m_checkBoxProtoOpenVpnAutoEncryptionChecked{}, m_checkBoxProtoOpenVpnAutoEncryptionChecked{},
m_comboBoxProtoOpenVpnCipherText{"AES-256-GCM"}, m_comboBoxProtoOpenVpnCipherText{"AES-256-GCM"},
m_comboBoxProtoOpenVpnHashText{"SHA512"}, m_comboBoxProtoOpenVpnHashText{"SHA512"},
m_checkBoxProtoOpenVpnBlockDnsChecked{false}, m_checkBoxProtoOpenVpnBlockDnsChecked{false},
m_lineEditProtoOpenVpnPortText{}, m_lineEditProtoOpenVpnPortText{},
m_checkBoxProtoOpenVpnTlsAuthChecked{false}, m_checkBoxProtoOpenVpnTlsAuthChecked{false},
m_widgetProtoOpenVpnEnabled{false}, m_widgetProtoOpenVpnEnabled{true},
m_pushButtonOpenvpnSaveVisible{false}, m_pushButtonOpenvpnSaveVisible{false},
m_progressBarProtoOpenVpnResetVisible{false}, m_progressBarProtoOpenVpnResetVisible{false},
m_radioButtonProtoOpenVpnUdpEnabled{false},
m_radioButtonProtoOpenVpnTcpEnabled{false},
m_radioButtonProtoOpenVpnTcpChecked{false},
m_lineEditProtoOpenVpnPortEnabled{false}, m_lineEditProtoOpenVpnPortEnabled{false},
m_comboBoxProtoOpenVpnCipherEnabled{true}, m_comboBoxProtoOpenVpnCipherEnabled{true},
m_comboBoxProtoOpenVpnHashEnabled{true}, m_comboBoxProtoOpenVpnHashEnabled{true},
m_pageProtoOpenVpnEnabled{true},
m_labelProtoOpenVpnInfoVisible{true}, m_labelProtoOpenVpnInfoVisible{true},
m_labelProtoOpenVpnInfoText{}, m_labelProtoOpenVpnInfoText{},
m_progressBarProtoOpenVpnResetValue{0}, m_progressBarProtoOpenVpnResetValue{0},
@ -36,6 +38,7 @@ OpenVpnLogic::OpenVpnLogic(UiLogic *logic, QObject *parent):
void OpenVpnLogic::updateProtocolPage(const QJsonObject &openvpnConfig, DockerContainer container, bool haveAuthData) void OpenVpnLogic::updateProtocolPage(const QJsonObject &openvpnConfig, DockerContainer container, bool haveAuthData)
{ {
qDebug() << "OpenVpnLogic::updateProtocolPage";
set_widgetProtoOpenVpnEnabled(haveAuthData); set_widgetProtoOpenVpnEnabled(haveAuthData);
set_pushButtonOpenvpnSaveVisible(haveAuthData); set_pushButtonOpenvpnSaveVisible(haveAuthData);
set_progressBarProtoOpenVpnResetVisible(haveAuthData); set_progressBarProtoOpenVpnResetVisible(haveAuthData);
@ -88,7 +91,7 @@ void OpenVpnLogic::onCheckBoxProtoOpenVpnAutoEncryptionClicked()
void OpenVpnLogic::onPushButtonProtoOpenVpnSaveClicked() void OpenVpnLogic::onPushButtonProtoOpenVpnSaveClicked()
{ {
QJsonObject protocolConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn); QJsonObject protocolConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::OpenVpn);
protocolConfig = getOpenVpnConfigFromPage(protocolConfig); protocolConfig = getProtocolConfigFromPage(protocolConfig);
QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer); QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
QJsonObject newContainerConfig = containerConfig; QJsonObject newContainerConfig = containerConfig;
@ -96,7 +99,7 @@ void OpenVpnLogic::onPushButtonProtoOpenVpnSaveClicked()
UiLogic::PageFunc page_proto_openvpn; UiLogic::PageFunc page_proto_openvpn;
page_proto_openvpn.setEnabledFunc = [this] (bool enabled) -> void { page_proto_openvpn.setEnabledFunc = [this] (bool enabled) -> void {
set_pageProtoOpenVpnEnabled(enabled); set_pageEnabled(enabled);
}; };
UiLogic::ButtonFunc pushButton_proto_openvpn_save; UiLogic::ButtonFunc pushButton_proto_openvpn_save;
pushButton_proto_openvpn_save.setVisibleFunc = [this] (bool visible) ->void { pushButton_proto_openvpn_save.setVisibleFunc = [this] (bool visible) ->void {

View file

@ -10,7 +10,12 @@ class OpenVpnLogic : public PageProtocolLogicBase
Q_OBJECT Q_OBJECT
AUTO_PROPERTY(QString, lineEditProtoOpenVpnSubnetText) AUTO_PROPERTY(QString, lineEditProtoOpenVpnSubnetText)
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnTcpEnabled)
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnUdpEnabled)
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnTcpChecked)
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnUdpChecked) AUTO_PROPERTY(bool, radioButtonProtoOpenVpnUdpChecked)
AUTO_PROPERTY(bool, checkBoxProtoOpenVpnAutoEncryptionChecked) AUTO_PROPERTY(bool, checkBoxProtoOpenVpnAutoEncryptionChecked)
AUTO_PROPERTY(QString, comboBoxProtoOpenVpnCipherText) AUTO_PROPERTY(QString, comboBoxProtoOpenVpnCipherText)
AUTO_PROPERTY(QString, comboBoxProtoOpenVpnHashText) AUTO_PROPERTY(QString, comboBoxProtoOpenVpnHashText)
@ -21,14 +26,11 @@ class OpenVpnLogic : public PageProtocolLogicBase
AUTO_PROPERTY(bool, widgetProtoOpenVpnEnabled) AUTO_PROPERTY(bool, widgetProtoOpenVpnEnabled)
AUTO_PROPERTY(bool, pushButtonOpenvpnSaveVisible) AUTO_PROPERTY(bool, pushButtonOpenvpnSaveVisible)
AUTO_PROPERTY(bool, progressBarProtoOpenVpnResetVisible) AUTO_PROPERTY(bool, progressBarProtoOpenVpnResetVisible)
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnUdpEnabled)
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnTcpEnabled)
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnTcpChecked)
AUTO_PROPERTY(bool, lineEditProtoOpenVpnPortEnabled) AUTO_PROPERTY(bool, lineEditProtoOpenVpnPortEnabled)
AUTO_PROPERTY(bool, comboBoxProtoOpenVpnCipherEnabled) AUTO_PROPERTY(bool, comboBoxProtoOpenVpnCipherEnabled)
AUTO_PROPERTY(bool, comboBoxProtoOpenVpnHashEnabled) AUTO_PROPERTY(bool, comboBoxProtoOpenVpnHashEnabled)
AUTO_PROPERTY(bool, pageProtoOpenVpnEnabled)
AUTO_PROPERTY(bool, labelProtoOpenVpnInfoVisible) AUTO_PROPERTY(bool, labelProtoOpenVpnInfoVisible)
AUTO_PROPERTY(QString, labelProtoOpenVpnInfoText) AUTO_PROPERTY(QString, labelProtoOpenVpnInfoText)
AUTO_PROPERTY(int, progressBarProtoOpenVpnResetValue) AUTO_PROPERTY(int, progressBarProtoOpenVpnResetValue)

View file

@ -49,7 +49,7 @@ QJsonObject ShadowSocksLogic::getProtocolConfigFromPage(QJsonObject oldConfig)
void ShadowSocksLogic::onPushButtonProtoShadowSocksSaveClicked() void ShadowSocksLogic::onPushButtonProtoShadowSocksSaveClicked()
{ {
QJsonObject protocolConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::ShadowSocks); QJsonObject protocolConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Protocol::ShadowSocks);
protocolConfig = getShadowSocksConfigFromPage(protocolConfig); //protocolConfig = getShadowSocksConfigFromPage(protocolConfig);
QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer); QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
QJsonObject newContainerConfig = containerConfig; QJsonObject newContainerConfig = containerConfig;

View file

@ -7,8 +7,10 @@ import "../Config"
Item { Item {
id: root id: root
property int protocol: PageEnum.Start property int page: PageEnum.Start
property var logic: null property var logic: UiLogic
enabled: logic.pageEnabled
// width: GC.screenWidth // width: GC.screenWidth
// height: GC.screenHeight // height: GC.screenHeight

View file

@ -210,7 +210,10 @@ PageBase {
textItem.font.pixelSize: 16 textItem.font.pixelSize: 16
icon.source: "qrc:/images/settings.png" icon.source: "qrc:/images/settings.png"
onClicked: { onClicked: {
ServerContainersLogic.onPushButtonProtoCloakOpenVpnContSsConfigClicked() tb_p.currentIndex = index
ServerContainersLogic.onPushButtonProtoSettingsClicked(
proxyContainersModel.mapToSource(tb_c.currentIndex),
proxyProtocolsModel.mapToSource(tb_p.currentIndex))
} }
} }
} }

View file

@ -1,16 +1,16 @@
import QtQuick 2.12 import QtQuick 2.12
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import PageEnum 1.0 import ProtocolEnum 1.0
import "../" import "../"
import "../../Controls" import "../../Controls"
import "../../Config" import "../../Config"
PageBase { PageProtocolBase {
id: root id: root
page: PageEnum.CloakSettings protocol: ProtocolEnum.Cloak
logic: CloakLogic logic: UiLogic.protocolLogic(protocol)
enabled: CloakLogic.pageProtoCloakEnabled enabled: logic.pageProtoCloakEnabled
BackButton { BackButton {
id: back id: back
} }
@ -19,7 +19,7 @@ PageBase {
y: 40 y: 40
width: 380 width: 380
height: 600 height: 600
enabled: CloakLogic.widgetProtoCloakEnabled enabled: logic.widgetProtoCloakEnabled
ComboBoxType { ComboBoxType {
x: 190 x: 190
y: 60 y: 60
@ -33,14 +33,14 @@ PageBase {
] ]
currentIndex: { currentIndex: {
for (let i = 0; i < model.length; ++i) { for (let i = 0; i < model.length; ++i) {
if (CloakLogic.comboBoxProtoCloakCipherText === model[i]) { if (logic.comboBoxProtoCloakCipherText === model[i]) {
return i return i
} }
} }
return -1 return -1
} }
onCurrentTextChanged: { onCurrentTextChanged: {
CloakLogic.comboBoxProtoCloakCipherText = currentText logic.comboBoxProtoCloakCipherText = currentText
} }
} }
LabelType { LabelType {
@ -84,8 +84,8 @@ PageBase {
y: 550 y: 550
width: 321 width: 321
height: 41 height: 41
visible: CloakLogic.labelProtoCloakInfoVisible visible: logic.labelProtoCloakInfoVisible
text: CloakLogic.labelProtoCloakInfoText text: logic.labelProtoCloakInfoText
} }
TextFieldType { TextFieldType {
id: lineEdit_proto_cloak_port id: lineEdit_proto_cloak_port
@ -93,11 +93,11 @@ PageBase {
y: 160 y: 160
width: 151 width: 151
height: 31 height: 31
text: CloakLogic.lineEditProtoCloakPortText text: logic.lineEditProtoCloakPortText
onEditingFinished: { onEditingFinished: {
CloakLogic.lineEditProtoCloakPortText = text logic.lineEditProtoCloakPortText = text
} }
enabled: CloakLogic.lineEditProtoCloakPortEnabled enabled: logic.lineEditProtoCloakPortEnabled
} }
TextFieldType { TextFieldType {
id: lineEdit_proto_cloak_site id: lineEdit_proto_cloak_site
@ -105,9 +105,9 @@ PageBase {
y: 110 y: 110
width: 151 width: 151
height: 31 height: 31
text: CloakLogic.lineEditProtoCloakSiteText text: logic.lineEditProtoCloakSiteText
onEditingFinished: { onEditingFinished: {
CloakLogic.lineEditProtoCloakSiteText = text logic.lineEditProtoCloakSiteText = text
} }
} }
ProgressBar { ProgressBar {
@ -117,8 +117,8 @@ PageBase {
width: 321 width: 321
height: 40 height: 40
from: 0 from: 0
to: CloakLogic.progressBarProtoCloakResetMaximium to: logic.progressBarProtoCloakResetMaximium
value: CloakLogic.progressBarProtoCloakResetValue value: logic.progressBarProtoCloakResetValue
background: Rectangle { background: Rectangle {
implicitWidth: parent.width implicitWidth: parent.width
implicitHeight: parent.height implicitHeight: parent.height
@ -136,7 +136,7 @@ PageBase {
color: Qt.rgba(255, 255, 255, 0.15); color: Qt.rgba(255, 255, 255, 0.15);
} }
} }
visible: CloakLogic.progressBarProtoCloakResetVisible visible: logic.progressBarProtoCloakResetVisible
} }
BlueButtonType { BlueButtonType {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
@ -144,9 +144,9 @@ PageBase {
width: 321 width: 321
height: 40 height: 40
text: qsTr("Save and restart VPN") text: qsTr("Save and restart VPN")
visible: CloakLogic.pushButtonCloakSaveVisible visible: logic.pushButtonCloakSaveVisible
onClicked: { onClicked: {
CloakLogic.onPushButtonProtoCloakSaveClicked() logic.onPushButtonProtoCloakSaveClicked()
} }
} }
} }

View file

@ -1,16 +1,15 @@
import QtQuick 2.12 import QtQuick 2.12
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import PageEnum 1.0 import ProtocolEnum 1.0
import "../" import "../"
import "../../Controls" import "../../Controls"
import "../../Config" import "../../Config"
PageBase { PageProtocolBase {
id: root id: root
page: PageEnum.OpenVpnSettings protocol: ProtocolEnum.OpenVpn
logic: OpenVpnLogic logic: UiLogic.protocolLogic(protocol)
enabled: OpenVpnLogic.pageProtoOpenVpnEnabled
BackButton { BackButton {
id: back id: back
} }
@ -19,19 +18,19 @@ PageBase {
y: 40 y: 40
width: 380 width: 380
height: 600 height: 600
enabled: OpenVpnLogic.widgetProtoOpenVpnEnabled enabled: logic.widgetProtoOpenVpnEnabled
CheckBoxType { CheckBoxType {
x: 30 x: 30
y: 280 y: 280
width: 321 width: 321
height: 21 height: 21
text: qsTr("Auto-negotiate encryption") text: qsTr("Auto-negotiate encryption")
checked: OpenVpnLogic.checkBoxProtoOpenVpnAutoEncryptionChecked checked: logic.checkBoxProtoOpenVpnAutoEncryptionChecked
onCheckedChanged: { onCheckedChanged: {
OpenVpnLogic.checkBoxProtoOpenVpnAutoEncryptionChecked = checked logic.checkBoxProtoOpenVpnAutoEncryptionChecked = checked
} }
onClicked: { onClicked: {
OpenVpnLogic.checkBoxProtoOpenVpnAutoEncryptionClicked() logic.checkBoxProtoOpenVpnAutoEncryptionClicked()
} }
} }
CheckBoxType { CheckBoxType {
@ -40,9 +39,9 @@ PageBase {
width: 321 width: 321
height: 21 height: 21
text: qsTr("Block DNS requests outside of VPN") text: qsTr("Block DNS requests outside of VPN")
checked: OpenVpnLogic.checkBoxProtoOpenVpnBlockDnsChecked checked: logic.checkBoxProtoOpenVpnBlockDnsChecked
onCheckedChanged: { onCheckedChanged: {
OpenVpnLogic.checkBoxProtoOpenVpnBlockDnsChecked = checked logic.checkBoxProtoOpenVpnBlockDnsChecked = checked
} }
} }
CheckBoxType { CheckBoxType {
@ -51,9 +50,9 @@ PageBase {
width: 321 width: 321
height: 21 height: 21
text: qsTr("Enable TLS auth") text: qsTr("Enable TLS auth")
checked: OpenVpnLogic.checkBoxProtoOpenVpnTlsAuthChecked checked: logic.checkBoxProtoOpenVpnTlsAuthChecked
onCheckedChanged: { onCheckedChanged: {
OpenVpnLogic.checkBoxProtoOpenVpnTlsAuthChecked = checked logic.checkBoxProtoOpenVpnTlsAuthChecked = checked
} }
} }
@ -76,16 +75,16 @@ PageBase {
] ]
currentIndex: { currentIndex: {
for (let i = 0; i < model.length; ++i) { for (let i = 0; i < model.length; ++i) {
if (OpenVpnLogic.comboBoxProtoOpenVpnCipherText === model[i]) { if (logic.comboBoxProtoOpenVpnCipherText === model[i]) {
return i return i
} }
} }
return -1 return -1
} }
onCurrentTextChanged: { onCurrentTextChanged: {
OpenVpnLogic.comboBoxProtoOpenVpnCipherText = currentText logic.comboBoxProtoOpenVpnCipherText = currentText
} }
enabled: OpenVpnLogic.comboBoxProtoOpenVpnCipherEnabled enabled: logic.comboBoxProtoOpenVpnCipherEnabled
} }
ComboBoxType { ComboBoxType {
x: 200 x: 200
@ -106,16 +105,16 @@ PageBase {
] ]
currentIndex: { currentIndex: {
for (let i = 0; i < model.length; ++i) { for (let i = 0; i < model.length; ++i) {
if (OpenVpnLogic.comboBoxProtoOpenVpnHashText === model[i]) { if (logic.comboBoxProtoOpenVpnHashText === model[i]) {
return i return i
} }
} }
return -1 return -1
} }
onCurrentTextChanged: { onCurrentTextChanged: {
OpenVpnLogic.comboBoxProtoOpenVpnHashText = currentText logic.comboBoxProtoOpenVpnHashText = currentText
} }
enabled: OpenVpnLogic.comboBoxProtoOpenVpnHashEnabled enabled: logic.comboBoxProtoOpenVpnHashEnabled
} }
Rectangle { Rectangle {
x: 30 x: 30
@ -131,8 +130,8 @@ PageBase {
width: 171 width: 171
height: 19 height: 19
text: qsTr("TCP") text: qsTr("TCP")
enabled: OpenVpnLogic.radioButtonProtoOpenVpnTcpEnabled enabled: logic.radioButtonProtoOpenVpnTcpEnabled
checked: OpenVpnLogic.radioButtonProtoOpenVpnTcpChecked checked: logic.radioButtonProtoOpenVpnTcpChecked
onCheckedChanged: { onCheckedChanged: {
UiLogic.radioButtonProtoOpenVpnTcpChecked = checked UiLogic.radioButtonProtoOpenVpnTcpChecked = checked
} }
@ -143,11 +142,11 @@ PageBase {
width: 171 width: 171
height: 19 height: 19
text: qsTr("UDP") text: qsTr("UDP")
checked: OpenVpnLogic.radioButtonProtoOpenVpnUdpChecked checked: logic.radioButtonProtoOpenVpnUdpChecked
onCheckedChanged: { onCheckedChanged: {
OpenVpnLogic.radioButtonProtoOpenVpnUdpChecked = checked logic.radioButtonProtoOpenVpnUdpChecked = checked
} }
enabled: OpenVpnLogic.radioButtonProtoOpenVpnUdpEnabled enabled: logic.radioButtonProtoOpenVpnUdpEnabled
} }
} }
LabelType { LabelType {
@ -204,8 +203,8 @@ PageBase {
y: 550 y: 550
width: 321 width: 321
height: 41 height: 41
visible: OpenVpnLogic.labelProtoOpenVpnInfoVisible visible: logic.labelProtoOpenVpnInfoVisible
text: OpenVpnLogic.labelProtoOpenVpnInfoText text: logic.labelProtoOpenVpnInfoText
} }
TextFieldType { TextFieldType {
id: lineEdit_proto_openvpn_port id: lineEdit_proto_openvpn_port
@ -213,11 +212,11 @@ PageBase {
y: 230 y: 230
width: 151 width: 151
height: 31 height: 31
text: OpenVpnLogic.lineEditProtoOpenVpnPortText text: logic.lineEditProtoOpenVpnPortText
onEditingFinished: { onEditingFinished: {
OpenVpnLogic.lineEditProtoOpenVpnPortText = text logic.lineEditProtoOpenVpnPortText = text
} }
enabled: OpenVpnLogic.lineEditProtoOpenVpnPortEnabled enabled: logic.lineEditProtoOpenVpnPortEnabled
} }
TextFieldType { TextFieldType {
id: lineEdit_proto_openvpn_subnet id: lineEdit_proto_openvpn_subnet
@ -225,9 +224,9 @@ PageBase {
y: 65 y: 65
width: 321 width: 321
height: 31 height: 31
text: OpenVpnLogic.lineEditProtoOpenVpnSubnetText text: logic.lineEditProtoOpenVpnSubnetText
onEditingFinished: { onEditingFinished: {
OpenVpnLogic.lineEditProtoOpenVpnSubnetText = text logic.lineEditProtoOpenVpnSubnetText = text
} }
} }
ProgressBar { ProgressBar {
@ -237,9 +236,9 @@ PageBase {
width: 321 width: 321
height: 40 height: 40
from: 0 from: 0
to: OpenVpnLogic.progressBarProtoOpenVpnResetMaximium to: logic.progressBarProtoOpenVpnResetMaximium
value: OpenVpnLogic.progressBarProtoOpenVpnResetValue value: logic.progressBarProtoOpenVpnResetValue
visible: OpenVpnLogic.progressBarProtoOpenVpnResetVisible visible: logic.progressBarProtoOpenVpnResetVisible
background: Rectangle { background: Rectangle {
implicitWidth: parent.width implicitWidth: parent.width
implicitHeight: parent.height implicitHeight: parent.height
@ -264,9 +263,9 @@ PageBase {
width: 321 width: 321
height: 40 height: 40
text: qsTr("Save and restart VPN") text: qsTr("Save and restart VPN")
visible: OpenVpnLogic.pushButtonOpenvpnSaveVisible visible: logic.pushButtonOpenvpnSaveVisible
onClicked: { onClicked: {
OpenVpnLogic.onPushButtonProtoOpenVpnSaveClicked() logic.onPushButtonProtoOpenVpnSaveClicked()
} }
} }
} }

View file

@ -1,16 +1,16 @@
import QtQuick 2.12 import QtQuick 2.12
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import PageEnum 1.0 import ProtocolEnum 1.0
import "../" import "../"
import "../../Controls" import "../../Controls"
import "../../Config" import "../../Config"
PageBase { PageProtocolBase {
id: root id: root
page: PageEnum.ShadowSocksSettings protocol: ProtocolEnum.ShadowSocks
logic: ShadowSocksLogic logic: UiLogic.protocolLogic(protocol)
enabled: ShadowSocksLogic.pageProtoShadowSocksEnabled enabled: logic.pageProtoShadowSocksEnabled
BackButton { BackButton {
id: back id: back
} }
@ -19,7 +19,7 @@ PageBase {
y: 40 y: 40
width: 380 width: 380
height: 600 height: 600
enabled: ShadowSocksLogic.widgetProtoShadowSocksEnabled enabled: logic.widgetProtoShadowSocksEnabled
ComboBoxType { ComboBoxType {
x: 190 x: 190
y: 60 y: 60
@ -32,14 +32,14 @@ PageBase {
] ]
currentIndex: { currentIndex: {
for (let i = 0; i < model.length; ++i) { for (let i = 0; i < model.length; ++i) {
if (ShadowSocksLogic.comboBoxProtoShadowSocksCipherText === model[i]) { if (logic.comboBoxProtoShadowSocksCipherText === model[i]) {
return i return i
} }
} }
return -1 return -1
} }
onCurrentTextChanged: { onCurrentTextChanged: {
ShadowSocksLogic.comboBoxProtoShadowSocksCipherText = currentText logic.comboBoxProtoShadowSocksCipherText = currentText
} }
} }
LabelType { LabelType {
@ -75,8 +75,8 @@ PageBase {
y: 550 y: 550
width: 321 width: 321
height: 41 height: 41
visible: ShadowSocksLogic.labelProtoShadowSocksInfoVisible visible: logic.labelProtoShadowSocksInfoVisible
text: ShadowSocksLogic.labelProtoShadowSocksInfoText text: logic.labelProtoShadowSocksInfoText
} }
TextFieldType { TextFieldType {
id: lineEdit_proto_shadowsocks_port id: lineEdit_proto_shadowsocks_port
@ -84,11 +84,11 @@ PageBase {
y: 110 y: 110
width: 151 width: 151
height: 31 height: 31
text: ShadowSocksLogic.lineEditProtoShadowSocksPortText text: logic.lineEditProtoShadowSocksPortText
onEditingFinished: { onEditingFinished: {
ShadowSocksLogic.lineEditProtoShadowSocksPortText = text logic.lineEditProtoShadowSocksPortText = text
} }
enabled: ShadowSocksLogic.lineEditProtoShadowSocksPortEnabled enabled: logic.lineEditProtoShadowSocksPortEnabled
} }
ProgressBar { ProgressBar {
id: progressBar_proto_shadowsocks_reset id: progressBar_proto_shadowsocks_reset
@ -97,9 +97,9 @@ PageBase {
width: 321 width: 321
height: 40 height: 40
from: 0 from: 0
to: ShadowSocksLogic.progressBarProtoShadowSocksResetMaximium to: logic.progressBarProtoShadowSocksResetMaximium
value: ShadowSocksLogic.progressBarProtoShadowSocksResetValue value: logic.progressBarProtoShadowSocksResetValue
visible: ShadowSocksLogic.progressBarProtoShadowSocksResetVisible visible: logic.progressBarProtoShadowSocksResetVisible
background: Rectangle { background: Rectangle {
implicitWidth: parent.width implicitWidth: parent.width
implicitHeight: parent.height implicitHeight: parent.height
@ -124,9 +124,9 @@ PageBase {
width: 321 width: 321
height: 40 height: 40
text: qsTr("Save and restart VPN") text: qsTr("Save and restart VPN")
visible: ShadowSocksLogic.pushButtonShadowSocksSaveVisible visible: logic.pushButtonShadowSocksSaveVisible
onClicked: { onClicked: {
ShadowSocksLogic.onPushButtonProtoShadowSocksSaveClicked() logic.onPushButtonProtoShadowSocksSaveClicked()
} }
} }
} }

View file

@ -0,0 +1,13 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import PageEnum 1.0
import ProtocolEnum 1.0
import "./.."
import "../../Controls"
import "../../Config"
PageBase {
id: root
property int protocol: ProtocolEnum.Any
page: PageEnum.ProtocolSettings
}

View file

@ -80,6 +80,17 @@ Window {
} }
} }
function gotoProtocolPage(protocol, reset, slide) {
if (reset) {
protocolPages[protocol].logic.updatePage();
}
if (slide) {
pageLoader.push(protocolPages[protocol], {}, StackView.PushTransition)
} else {
pageLoader.push(protocolPages[protocol], {}, StackView.Immediate)
}
}
function close_page() { function close_page() {
if (pageLoader.depth <= 1) { if (pageLoader.depth <= 1) {
return return
@ -169,7 +180,7 @@ Window {
onStatusChanged: if (status == FolderListModel.Ready) { onStatusChanged: if (status == FolderListModel.Ready) {
for (var i=0; i<folderModelPages.count; i++) { for (var i=0; i<folderModelPages.count; i++) {
createPagesObjects(folderModelPages.get(i, "filePath")); createPagesObjects(folderModelPages.get(i, "filePath"), false);
} }
UiLogic.initalizeUiLogic() UiLogic.initalizeUiLogic()
} }
@ -183,12 +194,18 @@ Window {
onStatusChanged: if (status == FolderListModel.Ready) { onStatusChanged: if (status == FolderListModel.Ready) {
for (var i=0; i<folderModelProtocols.count; i++) { for (var i=0; i<folderModelProtocols.count; i++) {
createPagesObjects(folderModelProtocols.get(i, "filePath")); createPagesObjects(folderModelProtocols.get(i, "filePath"), true);
} }
} }
} }
function createPagesObjects(file) { Component {
PageProtoOpenVPN {
}
}
function createPagesObjects(file, isProtocol) {
var c = Qt.createComponent("qrc" + file); var c = Qt.createComponent("qrc" + file);
var finishCreation = function (component){ var finishCreation = function (component){
@ -199,7 +216,15 @@ Window {
} }
else { else {
obj.visible = false obj.visible = false
pages[obj.page] = obj if (isProtocol) {
protocolPages[obj.protocol] = obj
console.debug("QML add proto page " + obj.protocol)
}
else {
pages[obj.page] = obj
}
} }
} else if (component.status == Component.Error) { } else if (component.status == Component.Error) {
@ -207,15 +232,10 @@ Window {
} }
} }
var lambdaFunc = function(){
finishCreation(c)
}
if (c.status == Component.Ready) if (c.status == Component.Ready)
finishCreation(c); finishCreation(c);
else { else {
console.debug("Warning: Pages components are not ready"); console.debug("Warning: Pages components are not ready");
c.statusChanged.connect(lambdaFunc);
} }
} }
@ -224,6 +244,9 @@ Window {
onGoToPage: { onGoToPage: {
root.gotoPage(page, reset, slide) root.gotoPage(page, reset, slide)
} }
onGoToProtocolPage: {
root.gotoProtocolPage(protocol, reset, slide)
}
onClosePage: { onClosePage: {
root.close_page() root.close_page()
} }
@ -243,6 +266,7 @@ Window {
root.hide() root.hide()
} }
} }
MessageDialog { MessageDialog {
id: closePrompt id: closePrompt
// x: (root.width - width) / 2 // x: (root.width - width) / 2

View file

@ -92,13 +92,9 @@ UiLogic::UiLogic(QObject *parent) :
m_vpnLogic = new VpnLogic(this); m_vpnLogic = new VpnLogic(this);
m_wizardLogic = new WizardLogic(this); m_wizardLogic = new WizardLogic(this);
m_openVpnLogic = new OpenVpnLogic(this); m_protocolLogicMap.insert(Protocol::OpenVpn, new OpenVpnLogic(this));
m_shadowSocksLogic = new ShadowSocksLogic(this); m_protocolLogicMap.insert(Protocol::ShadowSocks, new ShadowSocksLogic(this));
m_cloakLogic = new CloakLogic(this); m_protocolLogicMap.insert(Protocol::Cloak, new CloakLogic(this));
m_protocolLogicMap->insert(Protocol::OpenVpn, new OpenVpnLogic(this));
m_protocolLogicMap->insert(Protocol::ShadowSocks, new ShadowSocksLogic(this));
m_protocolLogicMap->insert(Protocol::Cloak, new CloakLogic(this));
//m_protocolLogicMap->insert(Protocol::WireGuard, new WireguardLogic(this)); //m_protocolLogicMap->insert(Protocol::WireGuard, new WireguardLogic(this));
} }

View file

@ -41,6 +41,8 @@ class UiLogic : public QObject
{ {
Q_OBJECT Q_OBJECT
AUTO_PROPERTY(bool, pageEnabled)
READONLY_PROPERTY(QObject *, containersModel) READONLY_PROPERTY(QObject *, containersModel)
READONLY_PROPERTY(QObject *, protocolsModel) READONLY_PROPERTY(QObject *, protocolsModel)
@ -104,6 +106,7 @@ signals:
void goToPage(int page, bool reset = true, bool slide = true); void goToPage(int page, bool reset = true, bool slide = true);
void goToProtocolPage(int protocol, bool reset = true, bool slide = true);
void closePage(); void closePage();
void setStartPage(int page, bool slide = true); void setStartPage(int page, bool slide = true);
void showPublicKeyWarning(); void showPublicKeyWarning();
@ -169,18 +172,14 @@ public:
NewServerProtocolsLogic *newServerProtocolsLogic() { return m_newServerProtocolsLogic; } NewServerProtocolsLogic *newServerProtocolsLogic() { return m_newServerProtocolsLogic; }
ServerListLogic *serverListLogic() { return m_serverListLogic; } ServerListLogic *serverListLogic() { return m_serverListLogic; }
ServerSettingsLogic *serverSettingsLogic() { return m_serverSettingsLogic; } ServerSettingsLogic *serverSettingsLogic() { return m_serverSettingsLogic; }
ServerContainersLogic *serverVpnProtocolsLogic() { return m_serverVpnProtocolsLogic; } ServerContainersLogic *serverVpnProtocolsLogic() { return m_serverVpnProtocolsLogic; }
ShareConnectionLogic *shareConnectionLogic() { return m_shareConnectionLogic; } ShareConnectionLogic *shareConnectionLogic() { return m_shareConnectionLogic; }
SitesLogic *sitesLogic() { return m_sitesLogic; } SitesLogic *sitesLogic() { return m_sitesLogic; }
StartPageLogic *startPageLogic() { return m_startPageLogic; } StartPageLogic *startPageLogic() { return m_startPageLogic; }
VpnLogic *vpnLogic() { return m_vpnLogic; } VpnLogic *vpnLogic() { return m_vpnLogic; }
WizardLogic *wizardLogic() { return m_wizardLogic; } WizardLogic *wizardLogic() { return m_wizardLogic; }
OpenVpnLogic *openVpnLogic() { return m_openVpnLogic; } Q_INVOKABLE PageProtocolLogicBase *protocolLogic(amnezia::Protocol p) { return m_protocolLogicMap.value(p); }
ShadowSocksLogic *shadowSocksLogic() { return m_shadowSocksLogic; }
CloakLogic *cloakLogic() { return m_cloakLogic; }
Q_INVOKABLE PageProtocolLogicBase *protocolLogic(amnezia::Protocol p) { return m_protocolLogicMap->value(p); }
private: private:
AppSettingsLogic *m_appSettingsLogic; AppSettingsLogic *m_appSettingsLogic;
@ -197,11 +196,7 @@ private:
VpnLogic *m_vpnLogic; VpnLogic *m_vpnLogic;
WizardLogic *m_wizardLogic; WizardLogic *m_wizardLogic;
OpenVpnLogic *m_openVpnLogic; QMap<Protocol, PageProtocolLogicBase *> m_protocolLogicMap;
ShadowSocksLogic *m_shadowSocksLogic;
CloakLogic *m_cloakLogic;
QMap<Protocol, PageProtocolLogicBase *> *m_protocolLogicMap;
VpnConnection* m_vpnConnection; VpnConnection* m_vpnConnection;
Settings m_settings; Settings m_settings;