Files
amnezia-client/client/ui/uilogic.h
T

220 lines
7.9 KiB
C++
Raw Normal View History

2021-07-28 16:13:29 +07:00
#ifndef UILOGIC_H
#define UILOGIC_H
#include <QRegExpValidator>
#include <QQmlEngine>
2021-08-09 00:41:52 +07:00
#include <functional>
2021-07-28 16:13:29 +07:00
2021-09-09 20:15:44 +03:00
#include "property_helper.h"
2021-09-03 20:17:13 +03:00
#include "pages.h"
2021-07-28 16:13:29 +07:00
#include "protocols/vpnprotocol.h"
2021-09-09 20:15:44 +03:00
#include "containers/containers_defs.h"
#include "models/all_containers_model.h"
2021-07-28 16:13:29 +07:00
#include "settings.h"
2021-09-03 20:17:13 +03:00
class AppSettingsLogic;
class GeneralSettingsLogic;
class NetworkSettingsLogic;
2021-09-07 11:48:25 +03:00
class NewServerProtocolsLogic;
2021-09-07 18:06:05 +03:00
class NewServerConfiguringLogic;
2021-09-03 20:17:13 +03:00
class ServerListLogic;
class ServerSettingsLogic;
2021-09-07 19:26:58 +03:00
class ServerContainersLogic;
2021-09-03 20:17:13 +03:00
class ShareConnectionLogic;
class SitesLogic;
2021-09-04 12:53:58 +03:00
class StartPageLogic;
2021-09-03 20:17:13 +03:00
class VpnLogic;
class WizardLogic;
2021-09-06 13:41:45 +03:00
class OpenVpnLogic;
class ShadowSocksLogic;
class CloakLogic;
2021-07-28 16:13:29 +07:00
2021-09-06 13:41:45 +03:00
class VpnConnection;
2021-09-03 20:17:13 +03:00
2021-08-09 00:41:52 +07:00
2021-07-28 16:13:29 +07:00
class UiLogic : public QObject
{
Q_OBJECT
2021-09-03 20:17:13 +03:00
2021-09-09 20:15:44 +03:00
READONLY_PROPERTY(QObject *, allContainersModel)
2021-07-28 16:13:29 +07:00
Q_PROPERTY(int currentPageValue READ getCurrentPageValue WRITE setCurrentPageValue NOTIFY currentPageValueChanged)
Q_PROPERTY(QString trayIconUrl READ getTrayIconUrl WRITE setTrayIconUrl NOTIFY trayIconUrlChanged)
Q_PROPERTY(bool trayActionDisconnectEnabled READ getTrayActionDisconnectEnabled WRITE setTrayActionDisconnectEnabled NOTIFY trayActionDisconnectEnabledChanged)
Q_PROPERTY(bool trayActionConnectEnabled READ getTrayActionConnectEnabled WRITE setTrayActionConnectEnabled NOTIFY trayActionConnectEnabledChanged)
2021-09-03 20:17:13 +03:00
2021-08-09 00:41:52 +07:00
Q_PROPERTY(QString dialogConnectErrorText READ getDialogConnectErrorText WRITE setDialogConnectErrorText NOTIFY dialogConnectErrorTextChanged)
2021-07-28 16:13:29 +07:00
public:
explicit UiLogic(QObject *parent = nullptr);
2021-08-09 00:41:52 +07:00
~UiLogic();
void showOnStartup();
2021-07-28 16:13:29 +07:00
2021-09-03 20:17:13 +03:00
friend class AppSettingsLogic;
friend class GeneralSettingsLogic;
friend class NetworkSettingsLogic;
2021-09-07 18:06:05 +03:00
friend class NewServerConfiguringLogic;
2021-09-07 11:48:25 +03:00
friend class NewServerProtocolsLogic;
2021-09-03 20:17:13 +03:00
friend class ServerListLogic;
friend class ServerSettingsLogic;
2021-09-07 19:26:58 +03:00
friend class ServerContainersLogic;
2021-09-03 20:17:13 +03:00
friend class ShareConnectionLogic;
friend class SitesLogic;
2021-09-04 12:53:58 +03:00
friend class StartPageLogic;
2021-09-03 20:17:13 +03:00
friend class VpnLogic;
friend class WizardLogic;
2021-09-06 13:41:45 +03:00
friend class OpenVpnLogic;
friend class ShadowSocksLogic;
friend class CloakLogic;
2021-07-28 16:13:29 +07:00
Q_INVOKABLE void initalizeUiLogic();
2021-09-07 21:01:56 +03:00
Q_INVOKABLE void onCloseWindow();
2021-09-03 20:17:13 +03:00
2021-07-28 16:13:29 +07:00
int getCurrentPageValue() const;
void setCurrentPageValue(int currentPageValue);
QString getTrayIconUrl() const;
void setTrayIconUrl(const QString &trayIconUrl);
bool getTrayActionDisconnectEnabled() const;
void setTrayActionDisconnectEnabled(bool trayActionDisconnectEnabled);
bool getTrayActionConnectEnabled() const;
void setTrayActionConnectEnabled(bool trayActionConnectEnabled);
2021-09-07 18:06:05 +03:00
2021-08-09 00:41:52 +07:00
QString getDialogConnectErrorText() const;
void setDialogConnectErrorText(const QString &dialogConnectErrorText);
2021-09-03 22:15:05 +03:00
2021-07-28 16:13:29 +07:00
signals:
void currentPageValueChanged();
void trayIconUrlChanged();
void trayActionDisconnectEnabledChanged();
void trayActionConnectEnabledChanged();
2021-08-09 00:41:52 +07:00
void dialogConnectErrorTextChanged();
2021-09-04 11:26:16 +03:00
2021-09-07 18:06:05 +03:00
2021-08-09 00:41:52 +07:00
void goToPage(int page, bool reset = true, bool slide = true);
2021-07-28 16:13:29 +07:00
void closePage();
2021-08-09 00:41:52 +07:00
void setStartPage(int page, bool slide = true);
void showPublicKeyWarning();
void showConnectErrorDialog();
void show();
void hide();
2021-07-28 16:13:29 +07:00
private:
int m_currentPageValue;
QString m_trayIconUrl;
bool m_trayActionDisconnectEnabled;
bool m_trayActionConnectEnabled;
2021-09-07 18:06:05 +03:00
2021-08-09 00:41:52 +07:00
QString m_dialogConnectErrorText;
2021-09-04 11:26:16 +03:00
2021-08-09 00:41:52 +07:00
private slots:
2021-07-28 16:13:29 +07:00
void installServer(const QMap<DockerContainer, QJsonObject> &containers);
void setTrayState(VpnProtocol::ConnectionState state);
private:
2021-08-09 00:41:52 +07:00
PageEnumNS::Page currentPage();
struct ProgressFunc {
std::function<void(bool)> setVisibleFunc;
std::function<void(int)> setValueFunc;
std::function<int(void)> getValueFunc;
std::function<int(void)> getMaximiumFunc;
std::function<void(bool)> setTextVisibleFunc;
std::function<void(const QString&)> setTextFunc;
};
struct PageFunc {
std::function<void(bool)> setEnabledFunc;
};
struct ButtonFunc {
std::function<void(bool)> setVisibleFunc;
};
struct LabelFunc {
std::function<void(bool)> setVisibleFunc;
std::function<void(const QString&)> setTextFunc;
};
2021-07-28 16:13:29 +07:00
2021-08-09 00:41:52 +07:00
bool installContainers(ServerCredentials credentials,
const QMap<DockerContainer, QJsonObject> &containers,
const PageFunc& page,
const ProgressFunc& progress,
const ButtonFunc& button,
const LabelFunc& info);
2021-07-28 16:13:29 +07:00
2021-08-09 00:41:52 +07:00
ErrorCode doInstallAction(const std::function<ErrorCode()> &action,
const PageFunc& page,
const ProgressFunc& progress,
const ButtonFunc& button,
const LabelFunc& info);
2021-07-28 16:13:29 +07:00
void setupTray();
void setTrayIcon(const QString &iconPath);
2021-09-06 11:44:03 +03:00
public:
2021-09-07 18:06:05 +03:00
AppSettingsLogic *appSettingsLogic() { return m_appSettingsLogic; }
GeneralSettingsLogic *generalSettingsLogic() { return m_generalSettingsLogic; }
NetworkSettingsLogic *networkSettingsLogic() { return m_networkSettingsLogic; }
NewServerConfiguringLogic *newServerConfiguringLogic() { return m_newServerConfiguringLogic; }
NewServerProtocolsLogic *newServerProtocolsLogic() { return m_newServerProtocolsLogic; }
ServerListLogic *serverListLogic() { return m_serverListLogic; }
ServerSettingsLogic *serverSettingsLogic() { return m_serverSettingsLogic; }
2021-09-07 19:26:58 +03:00
ServerContainersLogic *serverVpnProtocolsLogic() { return m_serverVpnProtocolsLogic; }
2021-09-07 18:06:05 +03:00
ShareConnectionLogic *shareConnectionLogic() { return m_shareConnectionLogic; }
SitesLogic *sitesLogic() { return m_sitesLogic; }
StartPageLogic *startPageLogic() { return m_startPageLogic; }
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; }
2021-07-28 16:13:29 +07:00
private:
2021-09-06 11:44:03 +03:00
AppSettingsLogic *m_appSettingsLogic;
GeneralSettingsLogic *m_generalSettingsLogic;
NetworkSettingsLogic *m_networkSettingsLogic;
2021-09-07 18:06:05 +03:00
NewServerConfiguringLogic *m_newServerConfiguringLogic;
2021-09-07 11:48:25 +03:00
NewServerProtocolsLogic *m_newServerProtocolsLogic;
2021-09-06 11:44:03 +03:00
ServerListLogic *m_serverListLogic;
ServerSettingsLogic *m_serverSettingsLogic;
2021-09-07 19:26:58 +03:00
ServerContainersLogic *m_serverVpnProtocolsLogic;
2021-09-06 11:44:03 +03:00
ShareConnectionLogic *m_shareConnectionLogic;
SitesLogic *m_sitesLogic;
StartPageLogic *m_startPageLogic;
VpnLogic *m_vpnLogic;
WizardLogic *m_wizardLogic;
2021-09-06 13:41:45 +03:00
OpenVpnLogic *m_openVpnLogic;
ShadowSocksLogic *m_shadowSocksLogic;
CloakLogic *m_cloakLogic;
2021-07-28 16:13:29 +07:00
VpnConnection* m_vpnConnection;
Settings m_settings;
// QRegExpValidator m_ipAddressValidator;
// QRegExpValidator m_ipAddressPortValidator;
// QRegExpValidator m_ipNetwok24Validator;
// QRegExpValidator m_ipPortValidator;
// QPoint offset;
// bool needToHideCustomTitlebar = false;
// void keyPressEvent(QKeyEvent* event) override;
// void showEvent(QShowEvent *event) override;
// void hideEvent(QHideEvent *event) override;
const QString ConnectedTrayIconName = "active.png";
const QString DisconnectedTrayIconName = "default.png";
const QString ErrorTrayIconName = "error.png";
// QStack<Page> pagesStack;
int selectedServerIndex = -1; // server index to use when proto settings page opened
DockerContainer selectedDockerContainer; // same
ServerCredentials installCredentials; // used to save cred between pages new_server and new_server_protocols and wizard
};
#endif // UILOGIC_H