From 4d9bae4c87672e15c86bcd929411ef8975e6dbc5 Mon Sep 17 00:00:00 2001 From: Hane Date: Sun, 13 Aug 2023 18:29:24 +0200 Subject: [PATCH] wip channel callback --- src/back/backlasses.cpp | 4 ++++ src/cont/contclasses.cpp | 7 ++++++ src/cont/contclasses.h | 1 + src/global.h | 5 ++-- src/qt/qtclasses.cpp | 50 ++++++++-------------------------------- src/qt/qtclasses.h | 8 +++---- 6 files changed, 28 insertions(+), 47 deletions(-) diff --git a/src/back/backlasses.cpp b/src/back/backlasses.cpp index 5f643f8..928750e 100644 --- a/src/back/backlasses.cpp +++ b/src/back/backlasses.cpp @@ -49,6 +49,10 @@ HRESULT EndpointCallback::OnNotify(PAUDIO_VOLUME_NOTIFICATION_DATA pNotify) { log_debugcpp("Onnanokotify says Grace of God: " << eventData.guidEventContext.Data1); osh->updateMuteCallback(this->ep->getIndex(), eventData.bMuted); osh->updateMainVolumeCallback(this->ep->getIndex(), eventData.fMasterVolume); + log_debugcpp("Onnanokotify says Reported Channel Qty: " << eventData.nChannels); + for(UINT i = 0; i < eventData.nChannels; i++) { + osh->updateChannelVolumeCallback(this->ep->getIndex(), (uint32_t)i, eventData.afChannelVolumes[i]); + } } return S_OK; diff --git a/src/cont/contclasses.cpp b/src/cont/contclasses.cpp index 86820c8..304547d 100644 --- a/src/cont/contclasses.cpp +++ b/src/cont/contclasses.cpp @@ -125,3 +125,10 @@ void OverseerHandler::updateMainVolumeCallback(uint64_t idx, float newVal){ epwMainVolumeFunc f = &EndpointWidget::updateMainVolume; std::invoke(f, endpointWidgets.at(idx), newVal); } + +void OverseerHandler::updateChannelVolumeCallback(uint64_t idx, uint32_t channel, float newVal){ + //int translatedNewVal = newVal * 100; + log_debugcpp("chanel: " << channel << " volcallback float: " << newVal); + epwChannelVolumeFunc f = &EndpointWidget::updateChannelVolume; + std::invoke(f, endpointWidgets.at(idx), channel, newVal); +} diff --git a/src/cont/contclasses.h b/src/cont/contclasses.h index f41549f..59dd035 100644 --- a/src/cont/contclasses.h +++ b/src/cont/contclasses.h @@ -64,6 +64,7 @@ public: NGuid* getGuid(); void updateMuteCallback(uint64_t idx, bool muted); void updateMainVolumeCallback(uint64_t idx, float newVal); + void updateChannelVolumeCallback(uint64_t idx, uint32_t channel, float newVal); //void parseExternalEndpointCallback(EndpointCallback *epc, PAUDIO_VOLUME_NOTIFICATION_DATA pNotify); //static Overseer* getOverseer(); diff --git a/src/global.h b/src/global.h index eaf2968..c4cf2af 100644 --- a/src/global.h +++ b/src/global.h @@ -7,10 +7,9 @@ #include "debug.h" -//TODO enum capullo #define ENDPOINT_MASTER_VOLUME -1 -#define ENDPOINT_LEFT_CHANNEL_VOLUME 0 -#define ENDPOINT_RIGHT_CHANNEL_VOLUME 1 +/* #define ENDPOINT_LEFT_CHANNEL_VOLUME 0 */ +/* #define ENDPOINT_RIGHT_CHANNEL_VOLUME 1 */ #define STRING_MUTE "Mute" #define STRING_UNMUTE "Unmute" diff --git a/src/qt/qtclasses.cpp b/src/qt/qtclasses.cpp index d58d7e9..79da832 100644 --- a/src/qt/qtclasses.cpp +++ b/src/qt/qtclasses.cpp @@ -25,41 +25,19 @@ EndpointWidget::EndpointWidget(EndpointHandler* eph, QWidget *parent) : QWidget( muteButton = new QCheckBox(); mainLabel = new QLabel(QString::fromStdWString(eph->getName())); - //leftChannelLabel = new QLabel("88"); - //rightChannelLabel = new QLabel("77"); mainSlider = new QSlider(Qt::Horizontal); - //leftChannelSlider = new QSlider(Qt::Horizontal); - //rightChannelSlider = new QSlider(Qt::Horizontal); - + //muteButton->setStyleSheet("background-color: #A3C1DA; color: red"); mainSlider->setFocusPolicy(Qt::StrongFocus); mainSlider->setTickPosition(QSlider::TicksBothSides); mainSlider->setTickInterval(5); mainSlider->setSingleStep(1); mainSlider->setRange(0,100); - - /* - * leftChannelSlider->setTickInterval(5); - * leftChannelSlider->setSingleStep(1); - * leftChannelSlider->setRange(0,100); - * rightChannelSlider->setTickInterval(5); - * rightChannelSlider->setSingleStep(1); - * rightChannelSlider->setRange(0,100); - */ muteButton->setCheckState((eph->getMute() == false ? Qt::Unchecked : Qt::Checked)); muteButton->setText(eph->getMute() ? STRING_UNMUTE : STRING_MUTE); float volume = eph->getVolume(ENDPOINT_MASTER_VOLUME) * 100; mainSlider->setValue((int)volume); - volume = eph->getVolume(ENDPOINT_LEFT_CHANNEL_VOLUME) * 100; - - /* - * leftChannelSlider->setValue((int)volume); - * leftChannelLabel->setText(QString::number(volume)); - * volume = eph->getVolume(ENDPOINT_RIGHT_CHANNEL_VOLUME) * 100; - * rightChannelSlider->setValue((int)volume); - * rightChannelLabel->setText(QString::number(volume)); - */ log_debugcpp("ENDPOINT SET WITH VOLUME " << volume); mainMuteLayout = new QGridLayout(); @@ -68,24 +46,9 @@ EndpointWidget::EndpointWidget(EndpointHandler* eph, QWidget *parent) : QWidget( mainMuteLayout->addWidget(muteButton, 0, 1); layout->addWidget(mainSlider, 0, 1); - /* - * layout->addWidget(leftChannelSlider, 1, 0); - * layout->addWidget(leftChannelLabel, 2, 0); - * layout->addWidget(rightChannelSlider, 1, 1); - * layout->addWidget(rightChannelLabel, 2, 1); - */ - /* - * layout->addItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding), 3, 0); - * layout->addItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding), 3, 1); - */ - connect(mainSlider, &QSlider::valueChanged, this,&EndpointWidget::updateMainVolume); - /* - * connect(leftChannelSlider, &QSlider::valueChanged, [this](int newValue){ this->eph->setVolume(osh->getGuid(), ENDPOINT_LEFT_CHANNEL_VOLUME, newValue); this->leftChannelLabel->setText(QString::number(newValue)); }); - * connect(rightChannelSlider, &QSlider::valueChanged, [this](int newValue){ this->eph->setVolume(osh->getGuid(), ENDPOINT_RIGHT_CHANNEL_VOLUME, newValue); this->rightChannelLabel->setText(QString::number(newValue)); }); - */ connect(muteButton, &QCheckBox::stateChanged, this, (&EndpointWidget::updateMute)); - + for(uint32_t i = 0; i < eph->getChannelCount(); i++){ QSlider* tmp = new QSlider(Qt::Horizontal); QLabel* tmpLb = new QLabel(""); @@ -101,6 +64,7 @@ EndpointWidget::EndpointWidget(EndpointHandler* eph, QWidget *parent) : QWidget( layout->addWidget(tmpLb, 2, i); connect(tmp, &QSlider::valueChanged, [this, i](int newValue){ this->eph->setVolume(osh->getGuid(), i, newValue); this->channelLabels.at(i)->setText(QString::number(newValue)); }); } + layout->addItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding), 3, 0); layout->addItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding), 3, 1); log_debugcpp("ENDPOINT_WIDGETED"); @@ -127,7 +91,6 @@ void EndpointWidget::updateMainVolume(int newValue){ this->eph->setVolume(osh->getGuid(), ENDPOINT_MASTER_VOLUME, newValue); } - void EndpointWidget::updateMainVolume(float newValue){ int newVal = newValue * 100; if(this->mainSlider->value() != newVal) { @@ -135,6 +98,13 @@ void EndpointWidget::updateMainVolume(float newValue){ } } +void EndpointWidget::updateChannelVolume(uint32_t channel, float newValue){ + int newVal = newValue * 100; + if(this->channelSliders.at(channel)->value() != newVal) { + this->channelSliders.at(channel)->setValue(newVal); + this->channelLabels.at(channel)->setText(QString::number((int)(newValue * 100))); + } +} void EndpointWidget::setIndex(uint64_t idx){ this->idx = idx; diff --git a/src/qt/qtclasses.h b/src/qt/qtclasses.h index aa134fb..79acc74 100644 --- a/src/qt/qtclasses.h +++ b/src/qt/qtclasses.h @@ -66,16 +66,15 @@ public: QSlider *mainSlider = nullptr; std::vector channelSliders; std::vector channelLabels; - /* - * QSlider *leftChannelSlider = nullptr; - * QSlider *rightChannelSlider = nullptr; - */ QGridLayout *layout = nullptr; QGridLayout *mainMuteLayout = nullptr; void updateMainVolume(float newValue); + void updateChannelVolume(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); @@ -93,6 +92,7 @@ private: typedef void (EndpointWidget::*epwMuteFunc)(bool muted); typedef void (EndpointWidget::*epwMainVolumeFunc)(float newValue); +typedef void (EndpointWidget::*epwChannelVolumeFunc)(uint32_t channel, float newValue); class MainWindow : public QMainWindow { Q_OBJECT