Skip to content

Commit d42abea

Browse files
committed
add system tray support
closes #15
1 parent 4718299 commit d42abea

File tree

5 files changed

+116
-20
lines changed

5 files changed

+116
-20
lines changed

src/glate.pro

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ SOURCES += \
4141
settings.cpp \
4242
share.cpp \
4343
slider.cpp \
44+
systemtraymanager.cpp \
4445
translationdownloader.cpp \
4546
utils.cpp \
4647
waitingspinnerwidget.cpp
@@ -55,6 +56,7 @@ HEADERS += \
5556
settings.h \
5657
share.h \
5758
slider.h \
59+
systemtraymanager.h \
5860
translationdownloader.h \
5961
utils.h \
6062
waitingspinnerwidget.h

src/mainwindow.cpp

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,15 @@
11
#include "mainwindow.h"
22
#include "ui_mainwindow.h"
3-
#include <QMessageBox>
4-
#include <QMimeData>
5-
#include <QTimer>
6-
7-
#include <QDesktopWidget>
8-
#include <QJsonArray>
9-
#include <QJsonDocument>
10-
#include <QJsonObject>
11-
#include <QMediaPlaylist>
12-
#include <QScreen>
13-
#include <QScrollBar>
14-
#include <QVariant>
15-
16-
#include <QKeyEvent>
17-
#include <QKeySequence>
18-
#include <QShortcut>
193

204
MainWindow::MainWindow(QWidget *parent)
215
: QMainWindow(parent), ui(new Ui::MainWindow) {
226
ui->setupUi(this);
7+
8+
SystemTrayManager *trayManager = new SystemTrayManager(this);
9+
10+
connect(trayManager, &SystemTrayManager::showWindow, this, &MainWindow::show);
11+
connect(trayManager, &SystemTrayManager::hideWindow, this, &MainWindow::hide);
12+
2313
this->setWindowTitle(QApplication::applicationName() + " v" +
2414
QApplication::applicationVersion());
2515
this->setWindowIcon(QIcon(":/icons/app/icon-64.png"));
@@ -430,12 +420,11 @@ void MainWindow::translate_clicked() {
430420
qDebug() << urlStr;
431421

432422
if (urlStr.isEmpty()) {
433-
showError("Invalid Input.");
423+
showError("Invalid Input.");
434424
} else {
435-
_request->get(QUrl(urlStr));
436-
translationId = utils::generateRandomId(20);
425+
_request->get(QUrl(urlStr));
426+
translationId = utils::generateRandomId(20);
437427
}
438-
439428
}
440429
}
441430

src/mainwindow.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,27 @@
33

44
#include <QClipboard>
55
#include <QDebug>
6+
#include <QDesktopWidget>
67
#include <QFile>
78
#include <QHotkey>
9+
#include <QJsonArray>
10+
#include <QJsonDocument>
11+
#include <QJsonObject>
12+
#include <QKeyEvent>
13+
#include <QKeySequence>
814
#include <QMainWindow>
915
#include <QMediaPlayer>
16+
#include <QMediaPlaylist>
17+
#include <QMessageBox>
18+
#include <QMimeData>
1019
#include <QPushButton>
20+
#include <QScreen>
21+
#include <QScrollBar>
1122
#include <QSettings>
23+
#include <QShortcut>
1224
#include <QTextEdit>
25+
#include <QTimer>
26+
#include <QVariant>
1327

1428
#include "controlbutton.h"
1529
#include "error.h"
@@ -22,6 +36,7 @@
2236
#include "ui_textoptionform.h"
2337
#include "utils.h"
2438
#include "waitingspinnerwidget.h"
39+
#include "systemtraymanager.h"
2540

2641
namespace Ui {
2742
class MainWindow;

src/systemtraymanager.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include "systemtraymanager.h"
2+
3+
SystemTrayManager::SystemTrayManager(QObject *parent) : QObject{parent} {
4+
if (QSystemTrayIcon::isSystemTrayAvailable()) {
5+
trayIcon =
6+
new QSystemTrayIcon(QIcon(":/icons/app/icon-64.png"), this->parent());
7+
8+
trayMenu = new QMenu(0);
9+
showAction = new QAction("Show", this);
10+
hideAction = new QAction("Hide", this);
11+
quitAction = new QAction("Quit", this);
12+
13+
showAction->setDisabled(true);
14+
15+
trayMenu->addAction(showAction);
16+
trayMenu->addAction(hideAction);
17+
trayMenu->addSeparator();
18+
trayMenu->addAction(quitAction);
19+
20+
trayIcon->setContextMenu(trayMenu);
21+
22+
connect(showAction, &QAction::triggered, this,
23+
&SystemTrayManager::showMainWindow);
24+
connect(hideAction, &QAction::triggered, this,
25+
&SystemTrayManager::hideMainWindow);
26+
connect(quitAction, &QAction::triggered, this,
27+
&SystemTrayManager::quitApplication);
28+
29+
trayIcon->show();
30+
} else {
31+
QMessageBox::information(nullptr, "Information",
32+
"Unable to find System tray.");
33+
}
34+
}
35+
36+
SystemTrayManager::~SystemTrayManager() {
37+
if (trayIcon)
38+
delete trayIcon;
39+
}
40+
41+
void SystemTrayManager::showMainWindow() {
42+
emit showWindow();
43+
showAction->setDisabled(true);
44+
hideAction->setDisabled(false);
45+
}
46+
47+
void SystemTrayManager::hideMainWindow() {
48+
emit hideWindow();
49+
hideAction->setDisabled(true);
50+
showAction->setDisabled(false);
51+
}
52+
53+
void SystemTrayManager::quitApplication() { qApp->quit(); }

src/systemtraymanager.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#ifndef SYSTEMTRAYMANAGER_H
2+
#define SYSTEMTRAYMANAGER_H
3+
4+
#include <QAction>
5+
#include <QApplication>
6+
#include <QMenu>
7+
#include <QMessageBox>
8+
#include <QObject>
9+
#include <QSystemTrayIcon>
10+
11+
class SystemTrayManager : public QObject {
12+
Q_OBJECT
13+
public:
14+
explicit SystemTrayManager(QObject *parent = nullptr);
15+
16+
~SystemTrayManager();
17+
18+
signals:
19+
void showWindow();
20+
void hideWindow();
21+
22+
private:
23+
QSystemTrayIcon *trayIcon = nullptr;
24+
QMenu *trayMenu = nullptr;
25+
QAction *showAction = nullptr;
26+
QAction *hideAction = nullptr;
27+
QAction *quitAction = nullptr;
28+
29+
private slots:
30+
void showMainWindow();
31+
32+
void hideMainWindow();
33+
34+
void quitApplication();
35+
};
36+
37+
#endif // SYSTEMTRAYMANAGER_H

0 commit comments

Comments
 (0)