Skip to content

Commit

Permalink
working tray icon example. no bells and whistles
Browse files Browse the repository at this point in the history
  • Loading branch information
relipse committed Sep 13, 2013
1 parent 6c14b08 commit 30029fd
Show file tree
Hide file tree
Showing 4 changed files with 151 additions and 1 deletion.
3 changes: 3 additions & 0 deletions JsRoboKey.pro
Expand Up @@ -47,3 +47,6 @@ FORMS += dlgjsrobokey.ui


VERSION = 130805

RESOURCES += \
resources.qrc
113 changes: 113 additions & 0 deletions dlgjsrobokey.cpp
Expand Up @@ -49,9 +49,122 @@ DlgJsRoboKey::DlgJsRoboKey(QWidget *parent) :
editor.setColor(JSEdit::BracketError, QColor("#A82224"));
editor.setColor(JSEdit::FoldIndicator, QColor("#555555"));

createActions();
createTrayIcon();

connect(trayIcon, SIGNAL(messageClicked()), this, SLOT(messageClicked()));
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));

setIcon(1);
trayIcon->show();


//initalize the v8 engine
initialize();
}

void DlgJsRoboKey::createActions()
{
minimizeAction = new QAction(tr("Mi&nimize"), this);
connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide()));

maximizeAction = new QAction(tr("Ma&ximize"), this);
connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()));

restoreAction = new QAction(tr("&Restore"), this);
connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));

quitAction = new QAction(tr("&Quit"), this);
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
}


void DlgJsRoboKey::createTrayIcon()
{
trayIconMenu = new QMenu(this);
trayIconMenu->addAction(minimizeAction);
trayIconMenu->addAction(maximizeAction);
trayIconMenu->addAction(restoreAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(quitAction);

trayIcon = new QSystemTrayIcon(this);
trayIcon->setContextMenu(trayIconMenu);
}

void DlgJsRoboKey::showMessage(const QString& title, const QString& body, int iicon, int ms_duration, const QJSValue& callback,
const QString& action, const QString& param1)
{
//actions are to be defined in nature
//TODO: notice, this will screw up the previous callback, does it matter?
trayJsCallback = callback;
trayAction = action;
trayParam1 = param1;
// NoIcon, Information, Warning, Critical
QSystemTrayIcon::MessageIcon icon = (QSystemTrayIcon::MessageIcon)iicon;
trayIcon->showMessage(title, body, icon, ms_duration);
}


void DlgJsRoboKey::setVisible(bool visible)
{
minimizeAction->setEnabled(visible);
maximizeAction->setEnabled(!isMaximized());
restoreAction->setEnabled(isMaximized() || !visible);
QDialog::setVisible(visible);
}

void DlgJsRoboKey::closeEvent(QCloseEvent *event)
{
if (trayIcon->isVisible()) {
/*
QMessageBox::information(this, tr("Systray"),
tr("The program will keep running in the "
"system tray. To terminate the program, "
"choose <b>Quit</b> in the context menu "
"of the system tray entry."));*/
showMessage("JsRoboKey is still running in the tray",
"To exit the program completly and all running scripts, Right click -> quit ", 1);
hide();
event->ignore();
}
}

void DlgJsRoboKey::messageClicked()
{
//TODO: depending on the action we need to do something
if (trayJsCallback.isCallable()){
trayJsCallback.call();
//it was already called, now make it undefined
trayJsCallback = QJSValue();
}
}

void DlgJsRoboKey::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason) {
case QSystemTrayIcon::Trigger:
case QSystemTrayIcon::DoubleClick:
//do something
setVisible(true);
break;
case QSystemTrayIcon::MiddleClick:
//what the heck are we going to do with a middle click?
break;
default:
;
}
}

void DlgJsRoboKey::setIcon(int index)
{

QIcon icon = QIcon(tr(":/jsrobokeyicon%1.png").arg(index));
trayIcon->setIcon(icon);
setWindowIcon(icon);
}

DlgJsRoboKey::~DlgJsRoboKey()
{
delete m_jsengine;
Expand Down
29 changes: 28 additions & 1 deletion dlgjsrobokey.h
Expand Up @@ -13,6 +13,8 @@
#include <QClipboard>
#include <QDesktopServices>
#include <QUrl>
#include <QSystemTrayIcon>
#include <QMenu>

#include "jsrobokey.h"
class JsRoboKey;
Expand All @@ -37,12 +39,23 @@ class DlgJsRoboKey : public QDialog
bool loadJS(const QString& code, const QString &module_or_filename);
QJSEngine* jsengine();

void setIcon(int index = 1);
void iconActivated(QSystemTrayIcon::ActivationReason reason);
void showMessage(const QString &title, const QString &body, int iicon = 0,
int ms_duration = 3500, const QJSValue &callback = QJSValue(), const QString &action="", const QString &param1="");
void setVisible(bool visible);
void createTrayIcon();
void createActions();
private slots:
void on_btnInstaRun_clicked();

void on_btnUnloadAll_clicked();
void messageClicked();

protected:
virtual void closeEvent(QCloseEvent *event);

private:

Ui::DlgJsRoboKey *ui;
QJSEngine* m_jsengine;
QJSValue m_rk;
Expand All @@ -51,6 +64,20 @@ private slots:
QString m_lastRunCode;
QString m_lastRunFileOrModule;
JsRoboKey* m_pjsrobokey;


QAction *minimizeAction;
QAction *maximizeAction;
QAction *restoreAction;
QAction *quitAction;


QSystemTrayIcon *trayIcon;
QMenu *trayIconMenu;

QString trayAction;
QString trayParam1;
QJSValue trayJsCallback;
};


Expand Down
7 changes: 7 additions & 0 deletions resources.qrc
@@ -0,0 +1,7 @@
<RCC>
<qresource prefix="/" >
<file>jsrobokeyicon1.icns</file>
<file>jsrobokeyicon1.ico</file>
<file>jsrobokeyicon1.png</file>
</qresource>
</RCC>

0 comments on commit 30029fd

Please sign in to comment.