This commit is contained in:
pokamest 2021-11-17 20:24:45 +03:00
parent 9dee7bb7e7
commit 3a49d5fdc4
5 changed files with 42 additions and 119 deletions

View file

@ -177,6 +177,10 @@ int main(int argc, char *argv[])
delete uiLogic; delete uiLogic;
}); });
if (engine->rootObjects().size() > 0) {
uiLogic->setQmlRoot(engine->rootObjects().at(0));
}
// TODO - fix // TODO - fix
//#ifdef Q_OS_WIN //#ifdef Q_OS_WIN
// if (parser.isSet("a")) mainWindow.showOnStartup(); // if (parser.isSet("a")) mainWindow.showOnStartup();

View file

@ -126,7 +126,7 @@ PageBase {
} }
ImageButtonType { ImageButtonType {
id: pushButtonSetting id: pushButtonSetting
x: parent.width - 60 x: parent.width - 70
y: 15 y: 15
width: 30 width: 30
height: 30 height: 30

View file

@ -239,6 +239,11 @@ Window {
function onHide() { function onHide() {
root.hide() root.hide()
} }
function onRaise() {
root.show()
root.raise()
root.requestActivate()
}
} }
MessageDialog { MessageDialog {
@ -253,62 +258,6 @@ Window {
} }
visible: false visible: false
} }
SystemTrayIcon {
visible: true
icon.source: UiLogic.trayIconUrl
onActivated: {
if (Qt.platform.os == "osx" ||
Qt.platform.os == "linux") {
if (reason === SystemTrayIcon.DoubleClick ||
reason === SystemTrayIcon.Trigger) {
root.show()
root.raise()
root.requestActivate()
}
}
}
menu: Menu {
MenuItem {
iconSource: "qrc:/images/tray/application.png"
text: qsTr("Show") + " " + "AmneziaVPN"
onTriggered: {
root.show()
root.raise()
}
}
MenuSeparator { }
MenuItem {
text: qsTr("Connect")
enabled: UiLogic.trayActionConnectEnabled
onTriggered: {
UiLogic.onConnect()
}
}
MenuItem {
text: qsTr("Disconnect")
enabled: UiLogic.trayActionDisconnectEnabled
onTriggered: {
UiLogic.onDisconnect()
}
}
MenuSeparator { }
MenuItem {
iconSource: "qrc:/images/tray/link.png"
text: qsTr("Visit Website")
onTriggered: {
Qt.openUrlExternally("https://amnezia.org")
}
}
MenuItem {
iconSource: "qrc:/images/tray/cancel.png"
text: qsTr("Quit") + " " + "AmneziaVPN"
onTriggered: {
closePrompt.open()
}
}
}
}
MessageDialog { MessageDialog {
id: publicKeyWarning id: publicKeyWarning
title: "AmneziaVPN" title: "AmneziaVPN"

View file

@ -69,9 +69,6 @@ using namespace PageEnumNS;
UiLogic::UiLogic(QObject *parent) : UiLogic::UiLogic(QObject *parent) :
QObject(parent), QObject(parent),
m_trayIconUrl{},
m_trayActionDisconnectEnabled{true},
m_trayActionConnectEnabled{true},
m_dialogConnectErrorText{} m_dialogConnectErrorText{}
{ {
m_containersModel = new ContainersModel(this); m_containersModel = new ContainersModel(this);
@ -193,45 +190,6 @@ void UiLogic::initalizeUiLogic()
} }
QString UiLogic::getTrayIconUrl() const
{
return m_trayIconUrl;
}
void UiLogic::setTrayIconUrl(const QString &trayIconUrl)
{
if (m_trayIconUrl != trayIconUrl) {
m_trayIconUrl = trayIconUrl;
emit trayIconUrlChanged();
}
}
bool UiLogic::getTrayActionDisconnectEnabled() const
{
return m_trayActionDisconnectEnabled;
}
void UiLogic::setTrayActionDisconnectEnabled(bool trayActionDisconnectEnabled)
{
if (m_trayActionDisconnectEnabled != trayActionDisconnectEnabled) {
m_trayActionDisconnectEnabled = trayActionDisconnectEnabled;
emit trayActionDisconnectEnabledChanged();
}
}
bool UiLogic::getTrayActionConnectEnabled() const
{
return m_trayActionConnectEnabled;
}
void UiLogic::setTrayActionConnectEnabled(bool trayActionConnectEnabled)
{
if (m_trayActionConnectEnabled != trayActionConnectEnabled) {
m_trayActionConnectEnabled = trayActionConnectEnabled;
emit trayActionConnectEnabledChanged();
}
}
QString UiLogic::getDialogConnectErrorText() const QString UiLogic::getDialogConnectErrorText() const
{ {
return m_dialogConnectErrorText; return m_dialogConnectErrorText;
@ -641,12 +599,22 @@ ErrorCode UiLogic::doInstallAction(const std::function<ErrorCode()> &action,
void UiLogic::setupTray() void UiLogic::setupTray()
{ {
m_tray = new QSystemTrayIcon(qmlRoot());
setTrayState(VpnProtocol::Disconnected); setTrayState(VpnProtocol::Disconnected);
m_tray->show();
connect(m_tray, &QSystemTrayIcon::activated, this, &UiLogic::onTrayActivated);
} }
void UiLogic::setTrayIcon(const QString &iconPath) void UiLogic::setTrayIcon(const QString &iconPath)
{ {
setTrayIconUrl(iconPath); m_tray->setIcon(QIcon(QPixmap(iconPath).scaled(128,128)));
}
void UiLogic::onTrayActivated(QSystemTrayIcon::ActivationReason reason)
{
emit raise();
} }
PageProtocolLogicBase *UiLogic::protocolLogic(Protocol p) { PageProtocolLogicBase *UiLogic::protocolLogic(Protocol p) {
@ -658,6 +626,16 @@ PageProtocolLogicBase *UiLogic::protocolLogic(Protocol p) {
} }
} }
QObject *UiLogic::qmlRoot() const
{
return m_qmlRoot;
}
void UiLogic::setQmlRoot(QObject *newQmlRoot)
{
m_qmlRoot = newQmlRoot;
}
PageEnumNS::Page UiLogic::currentPage() PageEnumNS::Page UiLogic::currentPage()
{ {
return static_cast<PageEnumNS::Page>(currentPageValue()); return static_cast<PageEnumNS::Page>(currentPageValue());
@ -665,10 +643,7 @@ PageEnumNS::Page UiLogic::currentPage()
void UiLogic::setTrayState(VpnProtocol::ConnectionState state) void UiLogic::setTrayState(VpnProtocol::ConnectionState state)
{ {
QString resourcesPath = "qrc:/images/tray/%1"; QString resourcesPath = ":/images/tray/%1";
setTrayActionDisconnectEnabled(state == VpnProtocol::Connected);
setTrayActionConnectEnabled(state == VpnProtocol::Disconnected);
switch (state) { switch (state) {
case VpnProtocol::Disconnected: case VpnProtocol::Disconnected:
@ -704,7 +679,6 @@ void UiLogic::setTrayState(VpnProtocol::ConnectionState state)
// resourcesPath = ":/images_mac/tray_icon/%1"; // resourcesPath = ":/images_mac/tray_icon/%1";
// useIconName = useIconName.replace(".png", darkTaskBar ? "@2x.png" : " dark@2x.png"); // useIconName = useIconName.replace(".png", darkTaskBar ? "@2x.png" : " dark@2x.png");
//#endif //#endif
} }

View file

@ -6,6 +6,7 @@
#include <functional> #include <functional>
#include <QKeyEvent> #include <QKeyEvent>
#include <QThread> #include <QThread>
#include <QSystemTrayIcon>
#include "property_helper.h" #include "property_helper.h"
#include "pages.h" #include "pages.h"
@ -53,9 +54,6 @@ class UiLogic : public QObject
READONLY_PROPERTY(QObject *, protocolsModel) READONLY_PROPERTY(QObject *, protocolsModel)
// TODO: review // TODO: review
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)
Q_PROPERTY(QString dialogConnectErrorText READ getDialogConnectErrorText WRITE setDialogConnectErrorText NOTIFY dialogConnectErrorTextChanged) Q_PROPERTY(QString dialogConnectErrorText READ getDialogConnectErrorText WRITE setDialogConnectErrorText NOTIFY dialogConnectErrorTextChanged)
public: public:
@ -105,13 +103,6 @@ public:
Q_INVOKABLE bool saveBinaryFile(const QString& desc, const QString& ext, const QString& data); Q_INVOKABLE bool saveBinaryFile(const QString& desc, const QString& ext, const QString& data);
Q_INVOKABLE void copyToClipboard(const QString& text); Q_INVOKABLE void copyToClipboard(const QString& text);
QString getTrayIconUrl() const;
void setTrayIconUrl(const QString &trayIconUrl);
bool getTrayActionDisconnectEnabled() const;
void setTrayActionDisconnectEnabled(bool trayActionDisconnectEnabled);
bool getTrayActionConnectEnabled() const;
void setTrayActionConnectEnabled(bool trayActionConnectEnabled);
QString getDialogConnectErrorText() const; QString getDialogConnectErrorText() const;
void setDialogConnectErrorText(const QString &dialogConnectErrorText); void setDialogConnectErrorText(const QString &dialogConnectErrorText);
@ -132,11 +123,10 @@ signals:
void showConnectErrorDialog(); void showConnectErrorDialog();
void show(); void show();
void hide(); void hide();
void raise();
private: private:
QString m_trayIconUrl; QSystemTrayIcon *m_tray;
bool m_trayActionDisconnectEnabled;
bool m_trayActionConnectEnabled;
QString m_dialogConnectErrorText; QString m_dialogConnectErrorText;
@ -145,6 +135,7 @@ private slots:
void installServer(QMap<DockerContainer, QJsonObject> &containers); void installServer(QMap<DockerContainer, QJsonObject> &containers);
void setTrayState(VpnProtocol::ConnectionState state); void setTrayState(VpnProtocol::ConnectionState state);
void onTrayActivated(QSystemTrayIcon::ActivationReason reason);
private: private:
PageEnumNS::Page currentPage(); PageEnumNS::Page currentPage();
@ -201,7 +192,12 @@ public:
Q_INVOKABLE PageProtocolLogicBase *protocolLogic(Protocol p); Q_INVOKABLE PageProtocolLogicBase *protocolLogic(Protocol p);
QObject *qmlRoot() const;
void setQmlRoot(QObject *newQmlRoot);
private: private:
QObject *m_qmlRoot{nullptr};
AppSettingsLogic *m_appSettingsLogic; AppSettingsLogic *m_appSettingsLogic;
GeneralSettingsLogic *m_generalSettingsLogic; GeneralSettingsLogic *m_generalSettingsLogic;
NetworkSettingsLogic *m_networkSettingsLogic; NetworkSettingsLogic *m_networkSettingsLogic;