#pragma once #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include //#include #include #include #include #include #include #include /* * #else * class QSlider; * class QLabel; * class QGridLayout; * class QPushButton; * class QWidget; * class QMainWindow; * #endif */ #include "global.h" #include "contclasses.h" //class EndpointHandler; /* * class ToggleButton : public QAbstractButton { * Q_OBJECT * * public: * ToggleButton(QWidget *parent = nullptr); * void checkStateSet(); * bool hitButton(const QPoint &pos) const; * void nextCheckState(); * void changeEvent(QEvent *e) override; * bool event(QEvent *e) override; * void focusInEvent(QFocusEvent *e) override; * void focusOutEvent(QFocusEvent *e) override; * void keyPressEvent(QKeyEvent *e) override; * void keyReleaseEvent(QKeyEvent *e) override; * void mouseMoveEvent(QMouseEvent *e) override; * void mousePressEvent(QMouseEvent *e) override; * void mouseReleaseEvent(QMouseEvent *e) override; * void paintEvent(QPaintEvent *e) override = 0; * void timerEvent(QTimerEvent *e) override; * ToggleButton(QWidget *parent = nullptr); * }; */ enum CustomQEvent { EndpointWidgetObsolete = 1001, EndpointWidgetCreated = 1002, EndpointDefaultChange = 1003, }; template class EndpointWidgetEvent : public QEvent { public: EndpointWidgetEvent(QEvent::Type type, T payload); T payload; }; //Q_DECLARE_METATYPE(EndpointWidgetEvent) class ExtendedCheckBox : public QCheckBox { Q_OBJECT protected: void customEvent(QEvent* ev) override; public: //c++11: this inherits all parent's constructors unconditionally using QCheckBox::QCheckBox; //alternative being calling parent ctor directly after declaring child ctor: //B(int x) : A(x) { } }; class EndpointWidget : public QWidget { Q_OBJECT public: EndpointWidget(uint64_t idx, EndpointHandler* eph, QWidget *parent = nullptr); EndpointHandler* getEndpointHandler(); void updateFrontIndex(uint64_t index); void setIndex(uint64_t idx); uint64_t getIndex(); void setVolume(int channel, float volume); QCheckBox *muteButton = nullptr; QLabel *mainLabel = nullptr, *leftChannelLabel = nullptr, *rightChannelLabel = nullptr; QSlider *mainSlider = nullptr; std::vector channelSliders; std::vector channelLabels; QGridLayout *layout = nullptr; QGridLayout *mainMuteLayout = nullptr; std::map defaultRolesCheckBoxes; ~EndpointWidget(); //void updateMainVolume(float newValue); //void updateVolume(uint32_t channel, float newValue); //void updateMute(bool muted); //void populateEndpointWidget(EndpointHandler *eph); //void setEndpointHandlers(std::vector *ephs); public slots: void updateMainVolume(int newValue); void updateMute(int checked); private: EndpointHandler* eph; size_t defaultRolesVectorSize = 4; QTimer* timer = nullptr; uint64_t idx; //std::vector *ephs; //std::vector *sliders; //signals: //void valueChanged(int value); }; class MainWindow : public QMainWindow { Q_OBJECT //QWidget *centralWidget; public: MainWindow(QWidget *parent = nullptr); void reloadEndpointWidgets(); protected: void closeEvent(QCloseEvent *event) override; void customEvent(QEvent* ev) override; private slots: void trayIconActivated(QSystemTrayIcon::ActivationReason reason); void removeEndpointWidget(EndpointWidgetEvent* ev); void addEndpointWidget(EndpointWidgetEvent* ev); //TODO: destroy/empty existing EndpointWidgets //void setEndpointHandlers(std::vector *ephs); private: //std::vector *ephs; std::vector ews; QWidget *widget; QGridLayout *layout; QSystemTrayIcon *trayIcon; QMenu *trayIconMenu; QAction *trayIconMenuQuit; //public slots: // void setEndpointHandlers(std::vector *ephs); //signals: //void valueChanged(int value); }; #endif