From 51e80b841c2c20ddedc8781cbb00a891bb31ecfe Mon Sep 17 00:00:00 2001 From: Qv2ray-dev <59914293+Qv2ray-dev@users.noreply.github.com> Date: Fri, 17 Apr 2020 22:06:56 +0800 Subject: [PATCH] add: added colorful system tray icon, fixed #214 --- .../icons/ui_dark/design/tray-connected.svg | 310 +++++++++++++++ .../icons/ui_dark/design/tray-systemproxy.svg | 309 +++++++++++++++ assets/icons/ui_dark/tray-connected.png | Bin 0 -> 3106 bytes assets/icons/ui_dark/tray-systemproxy.png | Bin 0 -> 2927 bytes .../icons/ui_light/design/tray-connected.svg | 356 +++++++++++++++++ .../ui_light/design/tray-systemproxy.svg | 359 ++++++++++++++++++ assets/icons/ui_light/tray-connected.png | Bin 0 -> 3729 bytes assets/icons/ui_light/tray-systemproxy.png | Bin 0 -> 3770 bytes makespec/BUILDVERSION | 2 +- resources.qrc | 4 + src/base/Qv2rayBase.hpp | 6 +- src/components/plugins/toolbar/QvToolbar.cpp | 12 +- src/core/handler/ConfigHandler.hpp | 5 - src/core/handler/KernelInstanceHandler.cpp | 11 +- src/ui/w_MainWindow.cpp | 10 +- src/ui/w_MainWindow_extra.cpp | 2 + 16 files changed, 1365 insertions(+), 21 deletions(-) create mode 100644 assets/icons/ui_dark/design/tray-connected.svg create mode 100644 assets/icons/ui_dark/design/tray-systemproxy.svg create mode 100644 assets/icons/ui_dark/tray-connected.png create mode 100644 assets/icons/ui_dark/tray-systemproxy.png create mode 100644 assets/icons/ui_light/design/tray-connected.svg create mode 100644 assets/icons/ui_light/design/tray-systemproxy.svg create mode 100644 assets/icons/ui_light/tray-connected.png create mode 100644 assets/icons/ui_light/tray-systemproxy.png diff --git a/assets/icons/ui_dark/design/tray-connected.svg b/assets/icons/ui_dark/design/tray-connected.svg new file mode 100644 index 00000000..ca95e7bd --- /dev/null +++ b/assets/icons/ui_dark/design/tray-connected.svg @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/assets/icons/ui_dark/design/tray-systemproxy.svg b/assets/icons/ui_dark/design/tray-systemproxy.svg new file mode 100644 index 00000000..fd542395 --- /dev/null +++ b/assets/icons/ui_dark/design/tray-systemproxy.svg @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/assets/icons/ui_dark/tray-connected.png b/assets/icons/ui_dark/tray-connected.png new file mode 100644 index 0000000000000000000000000000000000000000..10dc8cd0d46e760d31e402e6fa4a818451bf1565 GIT binary patch literal 3106 zcmZuzcU05M681 zL&t{{0i%GxrCwTS!pnVsy+7`rGy9z_XJ=<-XXi_?wlw8n6=DSdfWzDjX-h}qKLTZ< z_r3bqemX!xjm+(#^cD^EB+%2k=+veT=wDo(-g7t4vI|CgYR4mL_SU_O1#HXw=rI-&9 z6LZFAp2NuiFCA`AAw@GVFeDpSjBHyRJyuwF0sMr-fMAhX1;Z(G5~hq<@BIKkP8nxiE0jF5i#F zY33>{v;zWNc9u0eLDExl4O9MBMV@kUpS(c%q9<^xC0nJeTCf>rD^_HcF$4{)u-<=E zyuuh_2@IUr7RH|&*aHtgd6SNkT!L7m(P7x^!bn;E$k<|@E?5pvC`c0UkUxAwbU6?`}1IB5YBQRV*6DBlC|`Ip?P=}oF%m~Z*iQJzK{+8 zCwvG(b;&1KqF7qQI1$zT56Q~A%s-WX@#s#MdUp3mQ0FU z<3(IK04fcYt~f((!SgS!LbzlOY%KU=1y~y`06jguM2FfvQ5W$Ocp?)2tgVeuG()syrsf8ezb>}Y7Cgn_c&#!5LT-!NpYkB+0%_gHvT#7nA7OrySuyVCeZ+3p3|e4 zx4L_@x7vwqnzEnBKO8SCEL=)&%?<=T>FH525Q{}n`EJu7)%4}&`!DaXB=_D92uPIg zXX(FrIUf-|B~=}uRzKk6o;hjFr+tpZNeSQCG_nY5miT<&HYMWP8%u7}dNO8d=2|R=5RY=<>emnM~ z3O)yaut3Sk$c)a+q@AALe{u7zLz`RVCuz`(@_`MXF(i_4WOOuE&3lOG_%0m!ID`5h ziiS%FW7nf_Y&V3RFY{J?IB(hPSZrgk%3qxwJbou_hCgfBT1rdB($dqh^B>b+-!(JK zP1|G`sM0yG(G|10N_+_@KJAsnB~`*%`kUL@s#;pm7fyVxL&y`&KdIH{M(#A7C3R<# zZ;xu~cdTBSn>hh3gzVvQ;o$-@R;5Ty5yflM!6J=V&Mf?vhxt-5k#r@-r=+ChwvUg^ zV&XNEV9(z&0*XRv!_3nDYp>b%@*LuC^`LLum}GVzugcWd4(z+%o=l|2g6(B$j#OCt z>_)ta&{nwaY@>XT9q(d|$y#50LH9tXBn;z!N~KCTIXk1h7#0mh>dv5cUwuOFNqi*N z>XXg7HCtQ92O#HP`qwCAg_HH=y?#_u~rrJ%% z^*~?W5T9}L1TG?{i{eDe%F4?A#zrk6wd!G$#Rx{9WSQqnZZOMvVjt+v0$N_2c@tXp z;q*wy<$fCP&CmG;H5eC~b|2Zc;Uc8`VO?DvWfC9t2d3Hu1nkc8_EZ!Y zu0uh~?wfP(98fkwl`DeRA$l377VQvV8UJS{2iGXW=V^LnFboR|6D5w_cB+FKR`h-A zOEnByB+3pBa0sE)&x1$k$zAL5rF$&f;!PzCpDsSo;Z*fZ+6XwZF5#psEGRwRYBV2b z;ypiG_<}iiD1)5ukN>a^HQS3y5xe{%Q5qr<-qC@-!E7s;EozULz9 z_cXAqzKDtFJ2yxMdln23M z#sN<75_lZSCUL9M!BHUrz$@$MeBAMwPtcDa(9oVo8AKsTHES*ENb;Y|&J&TFa` z>xc70;a{Nr%;RO3-GA}?&+g%dWdjmR8_j#)d5rt|jj7F)L0fsg{$%rSDuY!b$pvU{ z{?$l~C*=arMd>f~lOdAtu1|+)IqDbz+LDzQ0Y1x^*Cw*oI{9OQ?DOxHgRN?gK8mZ= z;1#W*2pQK`grtHqp(5Jg{#!%JPlNOCrR%{%4Mn$_B4y>|zFT~7aLP z;-}sGDHKY5;H>tz8c0}aj`58y36WUAoD+t{vV7P2LX2DSYM4^U&CNYC8?P1s=R9d` zi6D=46hjpMID96rPyPj7yt zIc=aEUr%P;vxTmr}#G?F1`;^{aCa!(a(eJs={k7;Xd z)z?*1t9tO-h;?WJKkpwvZn4^y@^tJ=(pgx1w&^5_L5`1)m-$aOuNb3jGU!#M*W|Zb z$Sd`J6MAWI$&nHT>h&*HwGNh adj^8kUAYO%N0`$2JYbHpMAjL($Nd*BF`%yi literal 0 HcmV?d00001 diff --git a/assets/icons/ui_dark/tray-systemproxy.png b/assets/icons/ui_dark/tray-systemproxy.png new file mode 100644 index 0000000000000000000000000000000000000000..035ddabdac6f753a3fcbd758569d657e7c9fc8c1 GIT binary patch literal 2927 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/assets/icons/ui_light/design/tray-systemproxy.svg b/assets/icons/ui_light/design/tray-systemproxy.svg new file mode 100644 index 00000000..239b4758 --- /dev/null +++ b/assets/icons/ui_light/design/tray-systemproxy.svg @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/assets/icons/ui_light/tray-connected.png b/assets/icons/ui_light/tray-connected.png new file mode 100644 index 0000000000000000000000000000000000000000..5760b02122ce49f8e221f90a9e217a7dcc775d93 GIT binary patch literal 3729 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/icons/ui_light/locate.png assets/icons/ui_dark/sort.png assets/icons/ui_light/sort.png + assets/icons/ui_dark/tray-connected.png + assets/icons/ui_dark/tray-systemproxy.png + assets/icons/ui_light/tray-connected.png + assets/icons/ui_light/tray-systemproxy.png diff --git a/src/base/Qv2rayBase.hpp b/src/base/Qv2rayBase.hpp index 6b03ee7c..55d89ea8 100644 --- a/src/base/Qv2rayBase.hpp +++ b/src/base/Qv2rayBase.hpp @@ -97,9 +97,11 @@ using namespace Qv2ray::base::objects::transfer; #define ACCESS_OPTIONAL_VALUE(obj) (obj.value()) #endif -#define QV2RAY_UI_COLORSCHEME_ROOT \ +#define Q_TRAYICON(name) (QIcon(GlobalConfig.uiConfig.useDarkTrayIcon ? ":/assets/icons/ui_dark/" name : ":/assets/icons/ui_light/" name)) + +#define QV2RAY_COLORSCHEME_ROOT \ ((GlobalConfig.uiConfig.useDarkTheme) ? QStringLiteral(":/assets/icons/ui_dark/") : QStringLiteral(":/assets/icons/ui_light/")) -#define QICON_R(file) QIcon(QV2RAY_UI_COLORSCHEME_ROOT + file) +#define QICON_R(file) QIcon(QV2RAY_COLORSCHEME_ROOT + file) #define QSTRN(num) QString::number(num) diff --git a/src/components/plugins/toolbar/QvToolbar.cpp b/src/components/plugins/toolbar/QvToolbar.cpp index 6c6cde88..967bfd22 100644 --- a/src/components/plugins/toolbar/QvToolbar.cpp +++ b/src/components/plugins/toolbar/QvToolbar.cpp @@ -89,15 +89,15 @@ namespace Qv2ray::components::plugins case 104: { // Current Connection Name - CL.Message = GetDisplayName(ConnectionManager->CurrentConnection()); + CL.Message = GetDisplayName(KernelInstance->CurrentConnection()); break; } case 105: { // Current Connection Status - CL.Message = ConnectionManager->CurrentConnection() == NullConnectionId ? QObject::tr("Not connected") : - QObject::tr("Connected"); + CL.Message = KernelInstance->CurrentConnection() == NullConnectionId ? QObject::tr("Not connected") : + QObject::tr("Connected"); break; } @@ -132,14 +132,14 @@ namespace Qv2ray::components::plugins case 301: { // Total Upload - CL.Message = FormatBytes(get<0>(GetConnectionUsageAmount(ConnectionManager->CurrentConnection()))); + CL.Message = FormatBytes(get<0>(GetConnectionUsageAmount(KernelInstance->CurrentConnection()))); break; } case 302: { // Total download - CL.Message = FormatBytes(get<1>(GetConnectionUsageAmount(ConnectionManager->CurrentConnection()))); + CL.Message = FormatBytes(get<1>(GetConnectionUsageAmount(KernelInstance->CurrentConnection()))); break; } @@ -160,7 +160,7 @@ namespace Qv2ray::components::plugins case 305: { // Connection latency - CL.Message = QSTRN(GetConnectionLatency(ConnectionManager->CurrentConnection())) + " ms"; + CL.Message = QSTRN(GetConnectionLatency(KernelInstance->CurrentConnection())) + " ms"; break; } default: diff --git a/src/core/handler/ConfigHandler.hpp b/src/core/handler/ConfigHandler.hpp index 8dc430a9..d4220c28 100644 --- a/src/core/handler/ConfigHandler.hpp +++ b/src/core/handler/ConfigHandler.hpp @@ -29,11 +29,6 @@ namespace Qv2ray::core::handlers ~QvConfigHandler(); public slots: - // - inline const ConnectionId CurrentConnection() const - { - return kernelHandler->CurrentConnection(); - } inline const QList Connections() const { return connections.keys(); diff --git a/src/core/handler/KernelInstanceHandler.cpp b/src/core/handler/KernelInstanceHandler.cpp index 5a26b38c..80408904 100644 --- a/src/core/handler/KernelInstanceHandler.cpp +++ b/src/core/handler/KernelInstanceHandler.cpp @@ -4,8 +4,10 @@ #include "core/connection/Generation.hpp" namespace Qv2ray::core::handlers { +#define isConnected (vCoreInstance->KernelStarted || !activeKernels.isEmpty()) KernelInstanceHandler::KernelInstanceHandler(QObject *parent) : QObject(parent) { + KernelInstance = this; vCoreInstance = new V2rayKernelInstance(this); connect(vCoreInstance, &V2rayKernelInstance::OnNewStatsDataArrived, this, &KernelInstanceHandler::OnStatsDataArrived_p); connect(vCoreInstance, &V2rayKernelInstance::OnProcessOutputReadyRead, this, &KernelInstanceHandler::OnKernelLogAvailable_p); @@ -25,7 +27,7 @@ namespace Qv2ray::core::handlers std::optional KernelInstanceHandler::StartConnection(const ConnectionId &id, const CONFIGROOT &root) { - if (vCoreInstance->KernelStarted || !activeKernels.isEmpty()) + if (isConnected) { StopConnection(); } @@ -240,7 +242,7 @@ namespace Qv2ray::core::handlers void KernelInstanceHandler::StopConnection() { - if (vCoreInstance->KernelStarted || !activeKernels.isEmpty()) + if (isConnected) { PluginHost->Send_ConnectivityEvent({ GetDisplayName(currentConnectionId), {}, Events::Connectivity::QvConnecticity_Disconnecting }); if (vCoreInstance->KernelStarted) @@ -267,6 +269,9 @@ namespace Qv2ray::core::handlers void KernelInstanceHandler::OnStatsDataArrived_p(const quint64 uploadSpeed, const quint64 downloadSpeed) { - emit OnStatsDataAvailable(currentConnectionId, uploadSpeed, downloadSpeed); + if (isConnected) + { + emit OnStatsDataAvailable(currentConnectionId, uploadSpeed, downloadSpeed); + } } } // namespace Qv2ray::core::handlers diff --git a/src/ui/w_MainWindow.cpp b/src/ui/w_MainWindow.cpp index f8fb0fdc..3ecc22ef 100644 --- a/src/ui/w_MainWindow.cpp +++ b/src/ui/w_MainWindow.cpp @@ -51,11 +51,11 @@ QvMessageBusSlotImpl(MainWindow) void MainWindow::UpdateColorScheme() { - hTray.setIcon(QIcon(GlobalConfig.uiConfig.useDarkTrayIcon ? ":/assets/icons/ui_dark/tray.png" : ":/assets/icons/ui_light/tray.png")); + hTray.setIcon(KernelInstance->CurrentConnection() == NullConnectionId ? Q_TRAYICON("tray.png") : Q_TRAYICON("tray-connected.png")); // importConfigButton->setIcon(QICON_R("import.png")); - updownImageBox->setStyleSheet("image: url(" + QV2RAY_UI_COLORSCHEME_ROOT + "netspeed_arrow.png)"); - updownImageBox_2->setStyleSheet("image: url(" + QV2RAY_UI_COLORSCHEME_ROOT + "netspeed_arrow.png)"); + updownImageBox->setStyleSheet("image: url(" + QV2RAY_COLORSCHEME_ROOT + "netspeed_arrow.png)"); + updownImageBox_2->setStyleSheet("image: url(" + QV2RAY_COLORSCHEME_ROOT + "netspeed_arrow.png)"); // tray_action_ShowHide->setIcon(this->windowIcon()); action_RCM_Start->setIcon(QICON_R("connect.png")); @@ -583,6 +583,7 @@ void MainWindow::on_connectionListWidget_itemDoubleClicked(QTreeWidgetItem *item void MainWindow::OnDisconnected(const ConnectionId &id) { Q_UNUSED(id) + hTray.setIcon(Q_TRAYICON("tray.png")); tray_action_Start->setEnabled(true); tray_action_Stop->setEnabled(false); tray_action_Restart->setEnabled(false); @@ -606,6 +607,7 @@ void MainWindow::OnDisconnected(const ConnectionId &id) void MainWindow::OnConnected(const ConnectionId &id) { Q_UNUSED(id) + hTray.setIcon(Q_TRAYICON("tray-connected.png")); tray_action_Start->setEnabled(false); tray_action_Stop->setEnabled(true); tray_action_Restart->setEnabled(true); @@ -817,7 +819,7 @@ void MainWindow::OnGroupDeleted(const GroupId &id, const QList &co void MainWindow::on_locateBtn_clicked() { - auto id = ConnectionManager->CurrentConnection(); + auto id = KernelInstance->CurrentConnection(); if (id != NullConnectionId) { connectionListWidget->setCurrentItem(connectionNodes.value(id).get()); diff --git a/src/ui/w_MainWindow_extra.cpp b/src/ui/w_MainWindow_extra.cpp index eb059a48..62c87969 100644 --- a/src/ui/w_MainWindow_extra.cpp +++ b/src/ui/w_MainWindow_extra.cpp @@ -16,6 +16,7 @@ void MainWindow::MWSetSystemProxy() { proxyAddress = "127.0.0.1"; SetSystemProxy(proxyAddress, httpPort, socksPort); + hTray.setIcon(Q_TRAYICON("tray-systemproxy.png")); if (!GlobalConfig.uiConfig.quietMode) { hTray.showMessage("Qv2ray", tr("System proxy configured.")); @@ -31,6 +32,7 @@ void MainWindow::MWSetSystemProxy() void MainWindow::MWClearSystemProxy() { ClearSystemProxy(); + hTray.setIcon(KernelInstance->CurrentConnection() == NullConnectionId ? Q_TRAYICON("tray.png") : Q_TRAYICON("tray-connected.png")); if (!GlobalConfig.uiConfig.quietMode) { hTray.showMessage("Qv2ray", tr("System proxy removed."));