diff --git a/assets.qrc b/assets.qrc
new file mode 100644
index 0000000..8b63932
--- /dev/null
+++ b/assets.qrc
@@ -0,0 +1,5 @@
+
+
+ assets/notificationAreaIcon.png
+
+
diff --git a/assets/notificationAreaIcon.png b/assets/notificationAreaIcon.png
new file mode 100644
index 0000000..0252332
Binary files /dev/null and b/assets/notificationAreaIcon.png differ
diff --git a/qtest.pro b/qtest.pro
index 511e78a..c96012e 100644
--- a/qtest.pro
+++ b/qtest.pro
@@ -1,12 +1,16 @@
QMAKE_CXXFLAGS += --target=x86_64-w64-mingw32 -g -gcodeview
#QMAKE_LINK += clang++
-QMAKE_LFLAGS += --target=x86_64-w64-mingw32 -g -gcodeview -Wl,-pdb= -v
+QMAKE_LFLAGS += --target=x86_64-w64-mingw32 -g -Wl,-pdb= -v
+
DEFINES += DEBUG
CONFIG += debug console
+
QT += widgets
INCLUDEPATH += "$$PWD\src" "$$PWD\src\qt" "$$PWD\src\back" "$$PWD\src\cont"
DESTPATH += "$$PWD\src" "$$PWD\src\qt" "$$PWD\src\back" "$$PWD\src\cont"
VPATH += "$$PWD\src" "$$PWD\src\qt" "$$PWD\src\back" "$$PWD\src\cont"
SOURCES += qtestmain.cpp qtclasses.cpp backlasses.cpp contclasses.cpp
HEADERS += qtclasses.h backlasses.h contclasses.h global.h debug.h backfuncs.h
+RESOURCES = assets.qrc
+
#DESTDIR += "build"
diff --git a/src/global.h b/src/global.h
index b17f1bd..8d5a768 100644
--- a/src/global.h
+++ b/src/global.h
@@ -7,12 +7,11 @@
#include "debug.h"
-//#define ENDPOINT_MASTER_VOLUME -1
-/* #define ENDPOINT_LEFT_CHANNEL_VOLUME 0 */
-/* #define ENDPOINT_RIGHT_CHANNEL_VOLUME 1 */
-
+//TODO: Use tr();? QTranslator
#define STRING_MUTE "Mute"
#define STRING_UNMUTE "Unmute"
+#define STRING_QUIT "Quit"
+#define STRING_TITLE "Mixer Fachero"
//INIT BACK
class OverseerHandler;
diff --git a/src/qt/qtclasses.cpp b/src/qt/qtclasses.cpp
index bd3c220..53bd91a 100644
--- a/src/qt/qtclasses.cpp
+++ b/src/qt/qtclasses.cpp
@@ -1,21 +1,5 @@
#include "qtclasses.h"
-/*
- * ToggleButton::ToggleButton(QWidget *parent) : QAbstractButton(parent) {
- * this->setCheckable(true);
- * }
- *
- * ToggleButton::~ToggleButton(){
- *
- * }
- *
- * void ToggleButton::checkStateSet(){ }
- *
- * bool hitButton(const QPoint &pos) {
- *
- * }
- */
-
EndpointWidget::EndpointWidget(uint64_t idx, EndpointHandler* eph, QWidget *parent) : QWidget(parent){
this->idx = idx;
this->eph = eph;
@@ -173,14 +157,53 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
// setCentralWidget(centralWidget);
widget = new QWidget();
layout = new QGridLayout();
+ trayIcon = new QSystemTrayIcon();
+ trayIconMenu = new QMenu();
+ trayIconMenuQuit = new QAction(STRING_QUIT);
widget->setLayout(layout);
setCentralWidget(widget);
//layout->addWidget(pintas, 0, 0);
- setWindowTitle("slidea resbala nu c");
+ setWindowTitle(STRING_TITLE);
reloadEndpointWidgets();
+
+ //Tray Icon
+ trayIconMenu->addSeparator();
+ trayIconMenu->addAction(trayIconMenuQuit);
+ connect(trayIconMenuQuit, &QAction::triggered, qApp, &QCoreApplication::quit);
+ trayIcon->setIcon(QIcon(":/assets/notificationAreaIcon.png"));
+ setWindowIcon(QIcon(":/assets/notificationAreaIcon.png"));
+ //TODO: Extend qsystemtrayicon to change mouse click?
+ //show before setting tooltip required; smells like bug to me!
+ trayIcon->show();
+ trayIcon->setToolTip(STRING_TITLE);
+ trayIcon->setContextMenu(trayIconMenu);
+ QString as = trayIcon->toolTip();
+ connect(trayIcon, &QSystemTrayIcon::activated, this, &MainWindow::trayIconActivated);
+}
+
+void MainWindow::closeEvent(QCloseEvent *event) {
+ if (!event->spontaneous() || !isVisible()) return;
+
+ if (trayIcon->isVisible()) {
+ //todo: would be nice to show this to 1st time users; ini-san will come...
+ //this->trayIcon->showMessage("ini file calling","tratarte como un gilipollas la primera vez", QSystemTrayIcon::Information);
+
+ hide();
+ event->ignore();
+ }
+}
+
+void MainWindow::trayIconActivated(QSystemTrayIcon::ActivationReason reason) {
+ switch (reason) {
+ case QSystemTrayIcon::Trigger:
+ this->showNormal();
+ break;
+ default:
+ break;
+ }
}
void MainWindow::reloadEndpointWidgets() {
@@ -209,21 +232,3 @@ void MainWindow::reloadEndpointWidgets() {
*/
}
-/*
- * void MainWindow::setPlotButton() {
- * button = new QPushButton("push"),
- * button->setCheckable(true);
- * connect(button, SIGNAL(toggled(bool)), this, SLOT(toggled(bool)))
- * QHBoxLayout *plotsLayout = new QHBoxLayout;
- * plotsLayout->setSpacing(10);
- * plotsLayout->addWidget(funPlot);
- * QHBoxLayout *buttonsLayout = new QHBoxLayout ;
- * buttonsLayout->addWidget(button);
- * QVBoxLayout *widgetLayout = new QVBoxLayout;
- * widgetLayout->addLayout(plotsLayout);
- * widgetLayout->addLayout(buttonsLayout);
- * setLayout(widgetLayout);
- * ...
- */
-
-
diff --git a/src/qt/qtclasses.h b/src/qt/qtclasses.h
index 3011021..b8cffe8 100644
--- a/src/qt/qtclasses.h
+++ b/src/qt/qtclasses.h
@@ -5,6 +5,13 @@
#include
#include
+#include
+
+#include
+#include
+#include
+//#include
+
#include
#include
#include
@@ -79,7 +86,7 @@ public:
public slots:
void updateMainVolume(int newValue);
void updateMute(int checked);
-
+
private:
QTimer* timer = nullptr;
uint64_t idx;
@@ -99,6 +106,11 @@ public:
MainWindow(QWidget *parent = nullptr);
void reloadEndpointWidgets();
+protected:
+ void closeEvent(QCloseEvent *event) override;
+
+private slots:
+ void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
//TODO: destroy/empty existing EndpointWidgets
//void setEndpointHandlers(std::vector *ephs);
@@ -107,8 +119,10 @@ private:
std::vector ews;
QWidget *widget;
QGridLayout *layout;
- //QLabel *pintas;
+ QSystemTrayIcon *trayIcon;
+ QMenu *trayIconMenu;
+ QAction *trayIconMenuQuit;
//public slots:
// void setEndpointHandlers(std::vector *ephs);
diff --git a/src/qtestmain.cpp b/src/qtestmain.cpp
index 15d18fc..22d5e9f 100644
--- a/src/qtestmain.cpp
+++ b/src/qtestmain.cpp
@@ -30,6 +30,7 @@ int main (int argc, char* argv[]) {
QScopedPointer app(createApplication(argc, argv));
MainWindow window = MainWindow();
//window.setEndpointHandlers(ephs);
+ QApplication::setQuitOnLastWindowClosed(false);
app->setStyle("windowsvista");
window.show();
return app->exec();