Qml Containers Page refact
This commit is contained in:
parent
0faf6c8599
commit
a390f2e988
22 changed files with 191 additions and 197 deletions
|
@ -2,14 +2,16 @@
|
|||
#define CONTAIERNS_DEFS_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QQmlEngine>
|
||||
|
||||
#include "../protocols/protocols_defs.h"
|
||||
|
||||
using namespace amnezia;
|
||||
|
||||
namespace amnezia {
|
||||
Q_NAMESPACE
|
||||
|
||||
namespace ContainerEnumNS {
|
||||
Q_NAMESPACE
|
||||
enum class DockerContainer {
|
||||
None,
|
||||
OpenVpn,
|
||||
|
@ -18,6 +20,10 @@ enum class DockerContainer {
|
|||
WireGuard
|
||||
};
|
||||
Q_ENUM_NS(DockerContainer)
|
||||
} // namespace ContainerEnumNS
|
||||
|
||||
using namespace ContainerEnumNS;
|
||||
using namespace ProtocolEnumNS;
|
||||
|
||||
DockerContainer containerFromString(const QString &container);
|
||||
QString containerToString(DockerContainer container);
|
||||
|
@ -30,6 +36,16 @@ bool isContainerVpnType(DockerContainer c);
|
|||
|
||||
QVector<Protocol> protocolsForContainer(DockerContainer container);
|
||||
|
||||
static void declareQmlContainerEnum() {
|
||||
qmlRegisterUncreatableMetaObject(
|
||||
ContainerEnumNS::staticMetaObject,
|
||||
"ContainerEnum",
|
||||
1, 0,
|
||||
"ContainerEnum",
|
||||
"Error: only enums"
|
||||
);
|
||||
}
|
||||
|
||||
} // namespace amnezia
|
||||
|
||||
QDebug operator<<(QDebug debug, const amnezia::DockerContainer &c);
|
||||
|
|
|
@ -119,12 +119,15 @@ int main(int argc, char *argv[])
|
|||
qRegisterMetaType<amnezia::DockerContainer>("amnezia::DockerContainer");
|
||||
qRegisterMetaType<amnezia::Protocol>("amnezia::Protocol");
|
||||
|
||||
qRegisterMetaType<PageProtocolLogicBase *>("PageProtocolLogicBase *");
|
||||
|
||||
UiLogic *uiLogic = new UiLogic;
|
||||
|
||||
QQmlApplicationEngine engine;
|
||||
|
||||
PageEnumNS::declareQML();
|
||||
declareQmlPageEnum();
|
||||
declareQmlProtocolEnum();
|
||||
declareQmlContainerEnum();
|
||||
|
||||
const QUrl url(QStringLiteral("qrc:/ui/qml/main.qml"));
|
||||
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
|
||||
|
@ -149,9 +152,9 @@ int main(int argc, char *argv[])
|
|||
engine.rootContext()->setContextProperty("VpnLogic", uiLogic->vpnLogic());
|
||||
engine.rootContext()->setContextProperty("WizardLogic", uiLogic->wizardLogic());
|
||||
|
||||
engine.rootContext()->setContextProperty("OpenVpnLogic", uiLogic->openVpnLogic());
|
||||
engine.rootContext()->setContextProperty("ShadowSocksLogic", uiLogic->shadowSocksLogic());
|
||||
engine.rootContext()->setContextProperty("CloakLogic", uiLogic->cloakLogic());
|
||||
// engine.rootContext()->setContextProperty("OpenVpnLogic", uiLogic->openVpnLogic());
|
||||
// engine.rootContext()->setContextProperty("ShadowSocksLogic", uiLogic->shadowSocksLogic());
|
||||
// engine.rootContext()->setContextProperty("CloakLogic", uiLogic->cloakLogic());
|
||||
|
||||
engine.load(url);
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#include "protocols_defs.h"
|
||||
|
||||
QDebug operator<<(QDebug debug, const amnezia::Protocol &p)
|
||||
QDebug operator<<(QDebug debug, const amnezia::ProtocolEnumNS::Protocol &p)
|
||||
{
|
||||
QDebugStateSaver saver(debug);
|
||||
debug.nospace() << protoToString(p);
|
||||
debug.nospace() << amnezia::protoToString(p);
|
||||
|
||||
return debug;
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ QMap<amnezia::Protocol, QString> amnezia::protocolDescriptions()
|
|||
return {};
|
||||
}
|
||||
|
||||
bool amnezia::isProtocolVpnType(Protocol p)
|
||||
bool amnezia::isProtocolVpnType(ProtocolEnumNS::Protocol p)
|
||||
{
|
||||
switch (p) {
|
||||
case Protocol::Any : return false;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <QObject>
|
||||
#include <QDebug>
|
||||
#include <QQmlEngine>
|
||||
|
||||
namespace amnezia {
|
||||
namespace config_key {
|
||||
|
@ -113,6 +114,7 @@ constexpr char serverPskKeyPath[] = "/opt/amnezia/wireguard/wireguard_psk.key";
|
|||
|
||||
} // namespace protocols
|
||||
|
||||
namespace ProtocolEnumNS {
|
||||
Q_NAMESPACE
|
||||
enum class Protocol {
|
||||
Any,
|
||||
|
@ -122,6 +124,9 @@ enum class Protocol {
|
|||
WireGuard
|
||||
};
|
||||
Q_ENUM_NS(Protocol)
|
||||
} // namespace ProtocolEnumNS
|
||||
|
||||
using namespace ProtocolEnumNS;
|
||||
|
||||
QVector<Protocol> allProtocols();
|
||||
|
||||
|
@ -134,7 +139,7 @@ bool isProtocolVpnType(Protocol p);
|
|||
|
||||
static void declareQmlProtocolEnum() {
|
||||
qmlRegisterUncreatableMetaObject(
|
||||
PageEnumNS::staticMetaObject,
|
||||
ProtocolEnumNS::staticMetaObject,
|
||||
"ProtocolEnum",
|
||||
1, 0,
|
||||
"ProtocolEnum",
|
||||
|
|
|
@ -108,5 +108,6 @@
|
|||
<file>ui/qml/Controls/Caption.qml</file>
|
||||
<file>ui/qml/Controls/Logo.qml</file>
|
||||
<file>ui/qml/Pages/InstallSettings/SelectContainer.qml</file>
|
||||
<file>ui/qml/Pages/Protocols/PageProtocolBase.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -11,10 +11,10 @@ enum Page {Start = 0, NewServer, NewServerProtocols, Vpn,
|
|||
Wizard, WizardLow, WizardMedium, WizardHigh, WizardVpnMode, ServerConfiguring,
|
||||
GeneralSettings, AppSettings, NetworkSettings, ServerSettings,
|
||||
ServerContainers, ServersList, ShareConnection, Sites,
|
||||
OpenVpnSettings, ShadowSocksSettings, CloakSettings};
|
||||
ProtocolSettings};
|
||||
Q_ENUM_NS(Page)
|
||||
|
||||
static void declareQML() {
|
||||
static void declareQmlPageEnum() {
|
||||
qmlRegisterUncreatableMetaObject(
|
||||
PageEnumNS::staticMetaObject,
|
||||
"PageEnum",
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ public:
|
|||
~PageLogicBase() = default;
|
||||
|
||||
Q_INVOKABLE virtual void updatePage() {}
|
||||
Q_INVOKABLE Page pageForProto(amnezia::Protocol p);
|
||||
|
||||
protected:
|
||||
UiLogic *uiLogic() const { return m_uiLogic; }
|
||||
|
|
|
@ -128,7 +128,7 @@ void ServerContainersLogic::onPushButtonProtoSettingsClicked(amnezia::DockerCont
|
|||
uiLogic()->selectedDockerContainer,
|
||||
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);
|
||||
//}
|
||||
|
|
|
@ -42,14 +42,6 @@ class ServerContainersLogic : public PageLogicBase
|
|||
|
||||
public:
|
||||
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);
|
||||
|
||||
public:
|
||||
|
|
|
@ -8,24 +8,26 @@ using namespace PageEnumNS;
|
|||
|
||||
OpenVpnLogic::OpenVpnLogic(UiLogic *logic, QObject *parent):
|
||||
PageProtocolLogicBase(logic, parent),
|
||||
m_lineEditProtoOpenVpnSubnetText{},
|
||||
m_lineEditProtoOpenVpnSubnetText{""},
|
||||
|
||||
m_radioButtonProtoOpenVpnTcpEnabled{true},
|
||||
m_radioButtonProtoOpenVpnTcpChecked{false},
|
||||
m_radioButtonProtoOpenVpnUdpEnabled{true},
|
||||
m_radioButtonProtoOpenVpnUdpChecked{false},
|
||||
|
||||
m_checkBoxProtoOpenVpnAutoEncryptionChecked{},
|
||||
m_comboBoxProtoOpenVpnCipherText{"AES-256-GCM"},
|
||||
m_comboBoxProtoOpenVpnHashText{"SHA512"},
|
||||
m_checkBoxProtoOpenVpnBlockDnsChecked{false},
|
||||
m_lineEditProtoOpenVpnPortText{},
|
||||
m_checkBoxProtoOpenVpnTlsAuthChecked{false},
|
||||
m_widgetProtoOpenVpnEnabled{false},
|
||||
m_widgetProtoOpenVpnEnabled{true},
|
||||
m_pushButtonOpenvpnSaveVisible{false},
|
||||
m_progressBarProtoOpenVpnResetVisible{false},
|
||||
m_radioButtonProtoOpenVpnUdpEnabled{false},
|
||||
m_radioButtonProtoOpenVpnTcpEnabled{false},
|
||||
m_radioButtonProtoOpenVpnTcpChecked{false},
|
||||
|
||||
m_lineEditProtoOpenVpnPortEnabled{false},
|
||||
m_comboBoxProtoOpenVpnCipherEnabled{true},
|
||||
m_comboBoxProtoOpenVpnHashEnabled{true},
|
||||
m_pageProtoOpenVpnEnabled{true},
|
||||
m_labelProtoOpenVpnInfoVisible{true},
|
||||
m_labelProtoOpenVpnInfoText{},
|
||||
m_progressBarProtoOpenVpnResetValue{0},
|
||||
|
@ -36,6 +38,7 @@ OpenVpnLogic::OpenVpnLogic(UiLogic *logic, QObject *parent):
|
|||
|
||||
void OpenVpnLogic::updateProtocolPage(const QJsonObject &openvpnConfig, DockerContainer container, bool haveAuthData)
|
||||
{
|
||||
qDebug() << "OpenVpnLogic::updateProtocolPage";
|
||||
set_widgetProtoOpenVpnEnabled(haveAuthData);
|
||||
set_pushButtonOpenvpnSaveVisible(haveAuthData);
|
||||
set_progressBarProtoOpenVpnResetVisible(haveAuthData);
|
||||
|
@ -88,7 +91,7 @@ void OpenVpnLogic::onCheckBoxProtoOpenVpnAutoEncryptionClicked()
|
|||
void OpenVpnLogic::onPushButtonProtoOpenVpnSaveClicked()
|
||||
{
|
||||
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 newContainerConfig = containerConfig;
|
||||
|
@ -96,7 +99,7 @@ void OpenVpnLogic::onPushButtonProtoOpenVpnSaveClicked()
|
|||
|
||||
UiLogic::PageFunc page_proto_openvpn;
|
||||
page_proto_openvpn.setEnabledFunc = [this] (bool enabled) -> void {
|
||||
set_pageProtoOpenVpnEnabled(enabled);
|
||||
set_pageEnabled(enabled);
|
||||
};
|
||||
UiLogic::ButtonFunc pushButton_proto_openvpn_save;
|
||||
pushButton_proto_openvpn_save.setVisibleFunc = [this] (bool visible) ->void {
|
||||
|
|
|
@ -10,7 +10,12 @@ class OpenVpnLogic : public PageProtocolLogicBase
|
|||
Q_OBJECT
|
||||
|
||||
AUTO_PROPERTY(QString, lineEditProtoOpenVpnSubnetText)
|
||||
|
||||
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnTcpEnabled)
|
||||
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnUdpEnabled)
|
||||
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnTcpChecked)
|
||||
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnUdpChecked)
|
||||
|
||||
AUTO_PROPERTY(bool, checkBoxProtoOpenVpnAutoEncryptionChecked)
|
||||
AUTO_PROPERTY(QString, comboBoxProtoOpenVpnCipherText)
|
||||
AUTO_PROPERTY(QString, comboBoxProtoOpenVpnHashText)
|
||||
|
@ -21,14 +26,11 @@ class OpenVpnLogic : public PageProtocolLogicBase
|
|||
AUTO_PROPERTY(bool, widgetProtoOpenVpnEnabled)
|
||||
AUTO_PROPERTY(bool, pushButtonOpenvpnSaveVisible)
|
||||
AUTO_PROPERTY(bool, progressBarProtoOpenVpnResetVisible)
|
||||
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnUdpEnabled)
|
||||
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnTcpEnabled)
|
||||
AUTO_PROPERTY(bool, radioButtonProtoOpenVpnTcpChecked)
|
||||
|
||||
AUTO_PROPERTY(bool, lineEditProtoOpenVpnPortEnabled)
|
||||
|
||||
AUTO_PROPERTY(bool, comboBoxProtoOpenVpnCipherEnabled)
|
||||
AUTO_PROPERTY(bool, comboBoxProtoOpenVpnHashEnabled)
|
||||
AUTO_PROPERTY(bool, pageProtoOpenVpnEnabled)
|
||||
AUTO_PROPERTY(bool, labelProtoOpenVpnInfoVisible)
|
||||
AUTO_PROPERTY(QString, labelProtoOpenVpnInfoText)
|
||||
AUTO_PROPERTY(int, progressBarProtoOpenVpnResetValue)
|
||||
|
|
|
@ -49,7 +49,7 @@ QJsonObject ShadowSocksLogic::getProtocolConfigFromPage(QJsonObject oldConfig)
|
|||
void ShadowSocksLogic::onPushButtonProtoShadowSocksSaveClicked()
|
||||
{
|
||||
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 newContainerConfig = containerConfig;
|
||||
|
|
|
@ -7,8 +7,10 @@ import "../Config"
|
|||
|
||||
Item {
|
||||
id: root
|
||||
property int protocol: PageEnum.Start
|
||||
property var logic: null
|
||||
property int page: PageEnum.Start
|
||||
property var logic: UiLogic
|
||||
enabled: logic.pageEnabled
|
||||
|
||||
// width: GC.screenWidth
|
||||
// height: GC.screenHeight
|
||||
|
||||
|
|
|
@ -210,7 +210,10 @@ PageBase {
|
|||
textItem.font.pixelSize: 16
|
||||
icon.source: "qrc:/images/settings.png"
|
||||
onClicked: {
|
||||
ServerContainersLogic.onPushButtonProtoCloakOpenVpnContSsConfigClicked()
|
||||
tb_p.currentIndex = index
|
||||
ServerContainersLogic.onPushButtonProtoSettingsClicked(
|
||||
proxyContainersModel.mapToSource(tb_c.currentIndex),
|
||||
proxyProtocolsModel.mapToSource(tb_p.currentIndex))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import PageEnum 1.0
|
||||
import ProtocolEnum 1.0
|
||||
import "../"
|
||||
import "../../Controls"
|
||||
import "../../Config"
|
||||
|
||||
PageBase {
|
||||
PageProtocolBase {
|
||||
id: root
|
||||
page: PageEnum.CloakSettings
|
||||
logic: CloakLogic
|
||||
protocol: ProtocolEnum.Cloak
|
||||
logic: UiLogic.protocolLogic(protocol)
|
||||
|
||||
enabled: CloakLogic.pageProtoCloakEnabled
|
||||
enabled: logic.pageProtoCloakEnabled
|
||||
BackButton {
|
||||
id: back
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ PageBase {
|
|||
y: 40
|
||||
width: 380
|
||||
height: 600
|
||||
enabled: CloakLogic.widgetProtoCloakEnabled
|
||||
enabled: logic.widgetProtoCloakEnabled
|
||||
ComboBoxType {
|
||||
x: 190
|
||||
y: 60
|
||||
|
@ -33,14 +33,14 @@ PageBase {
|
|||
]
|
||||
currentIndex: {
|
||||
for (let i = 0; i < model.length; ++i) {
|
||||
if (CloakLogic.comboBoxProtoCloakCipherText === model[i]) {
|
||||
if (logic.comboBoxProtoCloakCipherText === model[i]) {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
onCurrentTextChanged: {
|
||||
CloakLogic.comboBoxProtoCloakCipherText = currentText
|
||||
logic.comboBoxProtoCloakCipherText = currentText
|
||||
}
|
||||
}
|
||||
LabelType {
|
||||
|
@ -84,8 +84,8 @@ PageBase {
|
|||
y: 550
|
||||
width: 321
|
||||
height: 41
|
||||
visible: CloakLogic.labelProtoCloakInfoVisible
|
||||
text: CloakLogic.labelProtoCloakInfoText
|
||||
visible: logic.labelProtoCloakInfoVisible
|
||||
text: logic.labelProtoCloakInfoText
|
||||
}
|
||||
TextFieldType {
|
||||
id: lineEdit_proto_cloak_port
|
||||
|
@ -93,11 +93,11 @@ PageBase {
|
|||
y: 160
|
||||
width: 151
|
||||
height: 31
|
||||
text: CloakLogic.lineEditProtoCloakPortText
|
||||
text: logic.lineEditProtoCloakPortText
|
||||
onEditingFinished: {
|
||||
CloakLogic.lineEditProtoCloakPortText = text
|
||||
logic.lineEditProtoCloakPortText = text
|
||||
}
|
||||
enabled: CloakLogic.lineEditProtoCloakPortEnabled
|
||||
enabled: logic.lineEditProtoCloakPortEnabled
|
||||
}
|
||||
TextFieldType {
|
||||
id: lineEdit_proto_cloak_site
|
||||
|
@ -105,9 +105,9 @@ PageBase {
|
|||
y: 110
|
||||
width: 151
|
||||
height: 31
|
||||
text: CloakLogic.lineEditProtoCloakSiteText
|
||||
text: logic.lineEditProtoCloakSiteText
|
||||
onEditingFinished: {
|
||||
CloakLogic.lineEditProtoCloakSiteText = text
|
||||
logic.lineEditProtoCloakSiteText = text
|
||||
}
|
||||
}
|
||||
ProgressBar {
|
||||
|
@ -117,8 +117,8 @@ PageBase {
|
|||
width: 321
|
||||
height: 40
|
||||
from: 0
|
||||
to: CloakLogic.progressBarProtoCloakResetMaximium
|
||||
value: CloakLogic.progressBarProtoCloakResetValue
|
||||
to: logic.progressBarProtoCloakResetMaximium
|
||||
value: logic.progressBarProtoCloakResetValue
|
||||
background: Rectangle {
|
||||
implicitWidth: parent.width
|
||||
implicitHeight: parent.height
|
||||
|
@ -136,7 +136,7 @@ PageBase {
|
|||
color: Qt.rgba(255, 255, 255, 0.15);
|
||||
}
|
||||
}
|
||||
visible: CloakLogic.progressBarProtoCloakResetVisible
|
||||
visible: logic.progressBarProtoCloakResetVisible
|
||||
}
|
||||
BlueButtonType {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
@ -144,9 +144,9 @@ PageBase {
|
|||
width: 321
|
||||
height: 40
|
||||
text: qsTr("Save and restart VPN")
|
||||
visible: CloakLogic.pushButtonCloakSaveVisible
|
||||
visible: logic.pushButtonCloakSaveVisible
|
||||
onClicked: {
|
||||
CloakLogic.onPushButtonProtoCloakSaveClicked()
|
||||
logic.onPushButtonProtoCloakSaveClicked()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import PageEnum 1.0
|
||||
import ProtocolEnum 1.0
|
||||
import "../"
|
||||
import "../../Controls"
|
||||
import "../../Config"
|
||||
|
||||
PageBase {
|
||||
PageProtocolBase {
|
||||
id: root
|
||||
page: PageEnum.OpenVpnSettings
|
||||
logic: OpenVpnLogic
|
||||
protocol: ProtocolEnum.OpenVpn
|
||||
logic: UiLogic.protocolLogic(protocol)
|
||||
|
||||
enabled: OpenVpnLogic.pageProtoOpenVpnEnabled
|
||||
BackButton {
|
||||
id: back
|
||||
}
|
||||
|
@ -19,19 +18,19 @@ PageBase {
|
|||
y: 40
|
||||
width: 380
|
||||
height: 600
|
||||
enabled: OpenVpnLogic.widgetProtoOpenVpnEnabled
|
||||
enabled: logic.widgetProtoOpenVpnEnabled
|
||||
CheckBoxType {
|
||||
x: 30
|
||||
y: 280
|
||||
width: 321
|
||||
height: 21
|
||||
text: qsTr("Auto-negotiate encryption")
|
||||
checked: OpenVpnLogic.checkBoxProtoOpenVpnAutoEncryptionChecked
|
||||
checked: logic.checkBoxProtoOpenVpnAutoEncryptionChecked
|
||||
onCheckedChanged: {
|
||||
OpenVpnLogic.checkBoxProtoOpenVpnAutoEncryptionChecked = checked
|
||||
logic.checkBoxProtoOpenVpnAutoEncryptionChecked = checked
|
||||
}
|
||||
onClicked: {
|
||||
OpenVpnLogic.checkBoxProtoOpenVpnAutoEncryptionClicked()
|
||||
logic.checkBoxProtoOpenVpnAutoEncryptionClicked()
|
||||
}
|
||||
}
|
||||
CheckBoxType {
|
||||
|
@ -40,9 +39,9 @@ PageBase {
|
|||
width: 321
|
||||
height: 21
|
||||
text: qsTr("Block DNS requests outside of VPN")
|
||||
checked: OpenVpnLogic.checkBoxProtoOpenVpnBlockDnsChecked
|
||||
checked: logic.checkBoxProtoOpenVpnBlockDnsChecked
|
||||
onCheckedChanged: {
|
||||
OpenVpnLogic.checkBoxProtoOpenVpnBlockDnsChecked = checked
|
||||
logic.checkBoxProtoOpenVpnBlockDnsChecked = checked
|
||||
}
|
||||
}
|
||||
CheckBoxType {
|
||||
|
@ -51,9 +50,9 @@ PageBase {
|
|||
width: 321
|
||||
height: 21
|
||||
text: qsTr("Enable TLS auth")
|
||||
checked: OpenVpnLogic.checkBoxProtoOpenVpnTlsAuthChecked
|
||||
checked: logic.checkBoxProtoOpenVpnTlsAuthChecked
|
||||
onCheckedChanged: {
|
||||
OpenVpnLogic.checkBoxProtoOpenVpnTlsAuthChecked = checked
|
||||
logic.checkBoxProtoOpenVpnTlsAuthChecked = checked
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -76,16 +75,16 @@ PageBase {
|
|||
]
|
||||
currentIndex: {
|
||||
for (let i = 0; i < model.length; ++i) {
|
||||
if (OpenVpnLogic.comboBoxProtoOpenVpnCipherText === model[i]) {
|
||||
if (logic.comboBoxProtoOpenVpnCipherText === model[i]) {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
onCurrentTextChanged: {
|
||||
OpenVpnLogic.comboBoxProtoOpenVpnCipherText = currentText
|
||||
logic.comboBoxProtoOpenVpnCipherText = currentText
|
||||
}
|
||||
enabled: OpenVpnLogic.comboBoxProtoOpenVpnCipherEnabled
|
||||
enabled: logic.comboBoxProtoOpenVpnCipherEnabled
|
||||
}
|
||||
ComboBoxType {
|
||||
x: 200
|
||||
|
@ -106,16 +105,16 @@ PageBase {
|
|||
]
|
||||
currentIndex: {
|
||||
for (let i = 0; i < model.length; ++i) {
|
||||
if (OpenVpnLogic.comboBoxProtoOpenVpnHashText === model[i]) {
|
||||
if (logic.comboBoxProtoOpenVpnHashText === model[i]) {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
onCurrentTextChanged: {
|
||||
OpenVpnLogic.comboBoxProtoOpenVpnHashText = currentText
|
||||
logic.comboBoxProtoOpenVpnHashText = currentText
|
||||
}
|
||||
enabled: OpenVpnLogic.comboBoxProtoOpenVpnHashEnabled
|
||||
enabled: logic.comboBoxProtoOpenVpnHashEnabled
|
||||
}
|
||||
Rectangle {
|
||||
x: 30
|
||||
|
@ -131,8 +130,8 @@ PageBase {
|
|||
width: 171
|
||||
height: 19
|
||||
text: qsTr("TCP")
|
||||
enabled: OpenVpnLogic.radioButtonProtoOpenVpnTcpEnabled
|
||||
checked: OpenVpnLogic.radioButtonProtoOpenVpnTcpChecked
|
||||
enabled: logic.radioButtonProtoOpenVpnTcpEnabled
|
||||
checked: logic.radioButtonProtoOpenVpnTcpChecked
|
||||
onCheckedChanged: {
|
||||
UiLogic.radioButtonProtoOpenVpnTcpChecked = checked
|
||||
}
|
||||
|
@ -143,11 +142,11 @@ PageBase {
|
|||
width: 171
|
||||
height: 19
|
||||
text: qsTr("UDP")
|
||||
checked: OpenVpnLogic.radioButtonProtoOpenVpnUdpChecked
|
||||
checked: logic.radioButtonProtoOpenVpnUdpChecked
|
||||
onCheckedChanged: {
|
||||
OpenVpnLogic.radioButtonProtoOpenVpnUdpChecked = checked
|
||||
logic.radioButtonProtoOpenVpnUdpChecked = checked
|
||||
}
|
||||
enabled: OpenVpnLogic.radioButtonProtoOpenVpnUdpEnabled
|
||||
enabled: logic.radioButtonProtoOpenVpnUdpEnabled
|
||||
}
|
||||
}
|
||||
LabelType {
|
||||
|
@ -204,8 +203,8 @@ PageBase {
|
|||
y: 550
|
||||
width: 321
|
||||
height: 41
|
||||
visible: OpenVpnLogic.labelProtoOpenVpnInfoVisible
|
||||
text: OpenVpnLogic.labelProtoOpenVpnInfoText
|
||||
visible: logic.labelProtoOpenVpnInfoVisible
|
||||
text: logic.labelProtoOpenVpnInfoText
|
||||
}
|
||||
TextFieldType {
|
||||
id: lineEdit_proto_openvpn_port
|
||||
|
@ -213,11 +212,11 @@ PageBase {
|
|||
y: 230
|
||||
width: 151
|
||||
height: 31
|
||||
text: OpenVpnLogic.lineEditProtoOpenVpnPortText
|
||||
text: logic.lineEditProtoOpenVpnPortText
|
||||
onEditingFinished: {
|
||||
OpenVpnLogic.lineEditProtoOpenVpnPortText = text
|
||||
logic.lineEditProtoOpenVpnPortText = text
|
||||
}
|
||||
enabled: OpenVpnLogic.lineEditProtoOpenVpnPortEnabled
|
||||
enabled: logic.lineEditProtoOpenVpnPortEnabled
|
||||
}
|
||||
TextFieldType {
|
||||
id: lineEdit_proto_openvpn_subnet
|
||||
|
@ -225,9 +224,9 @@ PageBase {
|
|||
y: 65
|
||||
width: 321
|
||||
height: 31
|
||||
text: OpenVpnLogic.lineEditProtoOpenVpnSubnetText
|
||||
text: logic.lineEditProtoOpenVpnSubnetText
|
||||
onEditingFinished: {
|
||||
OpenVpnLogic.lineEditProtoOpenVpnSubnetText = text
|
||||
logic.lineEditProtoOpenVpnSubnetText = text
|
||||
}
|
||||
}
|
||||
ProgressBar {
|
||||
|
@ -237,9 +236,9 @@ PageBase {
|
|||
width: 321
|
||||
height: 40
|
||||
from: 0
|
||||
to: OpenVpnLogic.progressBarProtoOpenVpnResetMaximium
|
||||
value: OpenVpnLogic.progressBarProtoOpenVpnResetValue
|
||||
visible: OpenVpnLogic.progressBarProtoOpenVpnResetVisible
|
||||
to: logic.progressBarProtoOpenVpnResetMaximium
|
||||
value: logic.progressBarProtoOpenVpnResetValue
|
||||
visible: logic.progressBarProtoOpenVpnResetVisible
|
||||
background: Rectangle {
|
||||
implicitWidth: parent.width
|
||||
implicitHeight: parent.height
|
||||
|
@ -264,9 +263,9 @@ PageBase {
|
|||
width: 321
|
||||
height: 40
|
||||
text: qsTr("Save and restart VPN")
|
||||
visible: OpenVpnLogic.pushButtonOpenvpnSaveVisible
|
||||
visible: logic.pushButtonOpenvpnSaveVisible
|
||||
onClicked: {
|
||||
OpenVpnLogic.onPushButtonProtoOpenVpnSaveClicked()
|
||||
logic.onPushButtonProtoOpenVpnSaveClicked()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import PageEnum 1.0
|
||||
import ProtocolEnum 1.0
|
||||
import "../"
|
||||
import "../../Controls"
|
||||
import "../../Config"
|
||||
|
||||
PageBase {
|
||||
PageProtocolBase {
|
||||
id: root
|
||||
page: PageEnum.ShadowSocksSettings
|
||||
logic: ShadowSocksLogic
|
||||
protocol: ProtocolEnum.ShadowSocks
|
||||
logic: UiLogic.protocolLogic(protocol)
|
||||
|
||||
enabled: ShadowSocksLogic.pageProtoShadowSocksEnabled
|
||||
enabled: logic.pageProtoShadowSocksEnabled
|
||||
BackButton {
|
||||
id: back
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ PageBase {
|
|||
y: 40
|
||||
width: 380
|
||||
height: 600
|
||||
enabled: ShadowSocksLogic.widgetProtoShadowSocksEnabled
|
||||
enabled: logic.widgetProtoShadowSocksEnabled
|
||||
ComboBoxType {
|
||||
x: 190
|
||||
y: 60
|
||||
|
@ -32,14 +32,14 @@ PageBase {
|
|||
]
|
||||
currentIndex: {
|
||||
for (let i = 0; i < model.length; ++i) {
|
||||
if (ShadowSocksLogic.comboBoxProtoShadowSocksCipherText === model[i]) {
|
||||
if (logic.comboBoxProtoShadowSocksCipherText === model[i]) {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
onCurrentTextChanged: {
|
||||
ShadowSocksLogic.comboBoxProtoShadowSocksCipherText = currentText
|
||||
logic.comboBoxProtoShadowSocksCipherText = currentText
|
||||
}
|
||||
}
|
||||
LabelType {
|
||||
|
@ -75,8 +75,8 @@ PageBase {
|
|||
y: 550
|
||||
width: 321
|
||||
height: 41
|
||||
visible: ShadowSocksLogic.labelProtoShadowSocksInfoVisible
|
||||
text: ShadowSocksLogic.labelProtoShadowSocksInfoText
|
||||
visible: logic.labelProtoShadowSocksInfoVisible
|
||||
text: logic.labelProtoShadowSocksInfoText
|
||||
}
|
||||
TextFieldType {
|
||||
id: lineEdit_proto_shadowsocks_port
|
||||
|
@ -84,11 +84,11 @@ PageBase {
|
|||
y: 110
|
||||
width: 151
|
||||
height: 31
|
||||
text: ShadowSocksLogic.lineEditProtoShadowSocksPortText
|
||||
text: logic.lineEditProtoShadowSocksPortText
|
||||
onEditingFinished: {
|
||||
ShadowSocksLogic.lineEditProtoShadowSocksPortText = text
|
||||
logic.lineEditProtoShadowSocksPortText = text
|
||||
}
|
||||
enabled: ShadowSocksLogic.lineEditProtoShadowSocksPortEnabled
|
||||
enabled: logic.lineEditProtoShadowSocksPortEnabled
|
||||
}
|
||||
ProgressBar {
|
||||
id: progressBar_proto_shadowsocks_reset
|
||||
|
@ -97,9 +97,9 @@ PageBase {
|
|||
width: 321
|
||||
height: 40
|
||||
from: 0
|
||||
to: ShadowSocksLogic.progressBarProtoShadowSocksResetMaximium
|
||||
value: ShadowSocksLogic.progressBarProtoShadowSocksResetValue
|
||||
visible: ShadowSocksLogic.progressBarProtoShadowSocksResetVisible
|
||||
to: logic.progressBarProtoShadowSocksResetMaximium
|
||||
value: logic.progressBarProtoShadowSocksResetValue
|
||||
visible: logic.progressBarProtoShadowSocksResetVisible
|
||||
background: Rectangle {
|
||||
implicitWidth: parent.width
|
||||
implicitHeight: parent.height
|
||||
|
@ -124,9 +124,9 @@ PageBase {
|
|||
width: 321
|
||||
height: 40
|
||||
text: qsTr("Save and restart VPN")
|
||||
visible: ShadowSocksLogic.pushButtonShadowSocksSaveVisible
|
||||
visible: logic.pushButtonShadowSocksSaveVisible
|
||||
onClicked: {
|
||||
ShadowSocksLogic.onPushButtonProtoShadowSocksSaveClicked()
|
||||
logic.onPushButtonProtoShadowSocksSaveClicked()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
13
client/ui/qml/Pages/Protocols/PageProtocolBase.qml
Normal file
13
client/ui/qml/Pages/Protocols/PageProtocolBase.qml
Normal 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
|
||||
}
|
|
@ -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() {
|
||||
if (pageLoader.depth <= 1) {
|
||||
return
|
||||
|
@ -169,7 +180,7 @@ Window {
|
|||
|
||||
onStatusChanged: if (status == FolderListModel.Ready) {
|
||||
for (var i=0; i<folderModelPages.count; i++) {
|
||||
createPagesObjects(folderModelPages.get(i, "filePath"));
|
||||
createPagesObjects(folderModelPages.get(i, "filePath"), false);
|
||||
}
|
||||
UiLogic.initalizeUiLogic()
|
||||
}
|
||||
|
@ -183,12 +194,18 @@ Window {
|
|||
|
||||
onStatusChanged: if (status == FolderListModel.Ready) {
|
||||
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 finishCreation = function (component){
|
||||
|
@ -199,7 +216,15 @@ Window {
|
|||
}
|
||||
else {
|
||||
obj.visible = false
|
||||
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) {
|
||||
|
@ -207,15 +232,10 @@ Window {
|
|||
}
|
||||
}
|
||||
|
||||
var lambdaFunc = function(){
|
||||
finishCreation(c)
|
||||
}
|
||||
|
||||
if (c.status == Component.Ready)
|
||||
finishCreation(c);
|
||||
else {
|
||||
console.debug("Warning: Pages components are not ready");
|
||||
c.statusChanged.connect(lambdaFunc);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -224,6 +244,9 @@ Window {
|
|||
onGoToPage: {
|
||||
root.gotoPage(page, reset, slide)
|
||||
}
|
||||
onGoToProtocolPage: {
|
||||
root.gotoProtocolPage(protocol, reset, slide)
|
||||
}
|
||||
onClosePage: {
|
||||
root.close_page()
|
||||
}
|
||||
|
@ -243,6 +266,7 @@ Window {
|
|||
root.hide()
|
||||
}
|
||||
}
|
||||
|
||||
MessageDialog {
|
||||
id: closePrompt
|
||||
// x: (root.width - width) / 2
|
||||
|
|
|
@ -92,13 +92,9 @@ UiLogic::UiLogic(QObject *parent) :
|
|||
m_vpnLogic = new VpnLogic(this);
|
||||
m_wizardLogic = new WizardLogic(this);
|
||||
|
||||
m_openVpnLogic = new OpenVpnLogic(this);
|
||||
m_shadowSocksLogic = new ShadowSocksLogic(this);
|
||||
m_cloakLogic = 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::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));
|
||||
}
|
||||
|
||||
|
|
|
@ -41,6 +41,8 @@ class UiLogic : public QObject
|
|||
{
|
||||
Q_OBJECT
|
||||
|
||||
AUTO_PROPERTY(bool, pageEnabled)
|
||||
|
||||
READONLY_PROPERTY(QObject *, containersModel)
|
||||
READONLY_PROPERTY(QObject *, protocolsModel)
|
||||
|
||||
|
@ -104,6 +106,7 @@ signals:
|
|||
|
||||
|
||||
void goToPage(int page, bool reset = true, bool slide = true);
|
||||
void goToProtocolPage(int protocol, bool reset = true, bool slide = true);
|
||||
void closePage();
|
||||
void setStartPage(int page, bool slide = true);
|
||||
void showPublicKeyWarning();
|
||||
|
@ -176,11 +179,7 @@ public:
|
|||
VpnLogic *vpnLogic() { return m_vpnLogic; }
|
||||
WizardLogic *wizardLogic() { return m_wizardLogic; }
|
||||
|
||||
OpenVpnLogic *openVpnLogic() { return m_openVpnLogic; }
|
||||
ShadowSocksLogic *shadowSocksLogic() { return m_shadowSocksLogic; }
|
||||
CloakLogic *cloakLogic() { return m_cloakLogic; }
|
||||
|
||||
Q_INVOKABLE PageProtocolLogicBase *protocolLogic(amnezia::Protocol p) { return m_protocolLogicMap->value(p); }
|
||||
Q_INVOKABLE PageProtocolLogicBase *protocolLogic(amnezia::Protocol p) { return m_protocolLogicMap.value(p); }
|
||||
|
||||
private:
|
||||
AppSettingsLogic *m_appSettingsLogic;
|
||||
|
@ -197,11 +196,7 @@ private:
|
|||
VpnLogic *m_vpnLogic;
|
||||
WizardLogic *m_wizardLogic;
|
||||
|
||||
OpenVpnLogic *m_openVpnLogic;
|
||||
ShadowSocksLogic *m_shadowSocksLogic;
|
||||
CloakLogic *m_cloakLogic;
|
||||
|
||||
QMap<Protocol, PageProtocolLogicBase *> *m_protocolLogicMap;
|
||||
QMap<Protocol, PageProtocolLogicBase *> m_protocolLogicMap;
|
||||
|
||||
VpnConnection* m_vpnConnection;
|
||||
Settings m_settings;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue