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();