diff options
Diffstat (limited to 'src/trayicon.cpp')
-rw-r--r-- | src/trayicon.cpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/trayicon.cpp b/src/trayicon.cpp new file mode 100644 index 00000000..7e89a82d --- /dev/null +++ b/src/trayicon.cpp @@ -0,0 +1,108 @@ +#include "trayicon.h" + +/** + * @brief TrayIcon::TrayIcon use a (system) tray icon with a nice QtPass logo on + * it (currently) only Quits. + * @param parent + */ +TrayIcon::TrayIcon(QMainWindow *parent) { + parentwin = parent; + + createActions(); + createTrayIcon(); + + sysTrayIcon->setIcon(QIcon(":/artwork/icon.png")); + + sysTrayIcon->show(); + + QObject::connect(sysTrayIcon, + SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, + SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); +} + +/** + * @brief TrayIcon::setVisible show or hide the icon. + * @param visible + */ +void TrayIcon::setVisible(bool visible) { + if (visible == true) + parentwin->show(); + else + parentwin->hide(); +} + +/** + * @brief TrayIcon::createActions setup the signals. + */ +void TrayIcon::createActions() { + showAction = new QAction(tr("&Show"), this); + connect(showAction, SIGNAL(triggered()), parentwin, SLOT(show())); + hideAction = new QAction(tr("&Hide"), this); + connect(hideAction, SIGNAL(triggered()), parentwin, SLOT(hide())); + + minimizeAction = new QAction(tr("Mi&nimize"), this); + connect(minimizeAction, SIGNAL(triggered()), parentwin, + SLOT(showMinimized())); + maximizeAction = new QAction(tr("Ma&ximize"), this); + connect(maximizeAction, SIGNAL(triggered()), parentwin, + SLOT(showMaximized())); + restoreAction = new QAction(tr("&Restore"), this); + connect(restoreAction, SIGNAL(triggered()), parentwin, SLOT(showNormal())); + + quitAction = new QAction(tr("&Quit"), this); + connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); +} + +/** + * @brief TrayIcon::createTrayIcon set up menu. + */ +void TrayIcon::createTrayIcon() { + trayIconMenu = new QMenu(this); + trayIconMenu->addAction(showAction); + trayIconMenu->addAction(hideAction); + trayIconMenu->addAction(minimizeAction); + trayIconMenu->addAction(maximizeAction); + trayIconMenu->addAction(restoreAction); + trayIconMenu->addSeparator(); + trayIconMenu->addAction(quitAction); + + sysTrayIcon = new QSystemTrayIcon(this); + sysTrayIcon->setContextMenu(trayIconMenu); +} + +/** + * @brief TrayIcon::showHideParent toggle app visibility. + */ +void TrayIcon::showHideParent() { + if (parentwin->isVisible() == true) + parentwin->hide(); + else + parentwin->show(); +} + +/** + * @brief TrayIcon::iconActivated you clicked on the trayicon. + * @param reason + */ +void TrayIcon::iconActivated(QSystemTrayIcon::ActivationReason reason) { + switch (reason) { + case QSystemTrayIcon::Trigger: + case QSystemTrayIcon::DoubleClick: + showHideParent(); + break; + case QSystemTrayIcon::MiddleClick: + showMessage("test", "test msg", 1000); + break; + default: {}; + } +} + +/** + * @brief TrayIcon::showMessage show a systray message for notification. + * @param title + * @param msg + * @param time + */ +void TrayIcon::showMessage(QString title, QString msg, int time) { + sysTrayIcon->showMessage(title, msg, QSystemTrayIcon::Information, time); +} |