From 5b3b50a0d289ce35879cca15361abdb714877aac Mon Sep 17 00:00:00 2001 From: Hane Date: Wed, 17 Apr 2024 20:18:29 +0200 Subject: [PATCH] wip: fixed role setting --- src/back/backlasses.cpp | 2 +- src/cont/contclasses.cpp | 2 - src/qt/qtclasses.cpp | 107 +++++++++++++++++++++++---------------- src/qt/qtclasses.h | 2 +- 4 files changed, 64 insertions(+), 49 deletions(-) diff --git a/src/back/backlasses.cpp b/src/back/backlasses.cpp index f307361..1b54f79 100644 --- a/src/back/backlasses.cpp +++ b/src/back/backlasses.cpp @@ -426,7 +426,7 @@ void Endpoint::setRoles(Roles role){ SecureZeroMemory(&processInfo, sizeof(PROCESS_INFORMATION)); std::wstring command = L"SoundVolumeView.exe /SetDefault " + endpointId + L" "; - std::wstring troublePair = L"0"; + std::wstring troublePair = L"1"; switch (role) { case Roles::ROLE_ALL: /* diff --git a/src/cont/contclasses.cpp b/src/cont/contclasses.cpp index d9fe2d0..5e0a4ee 100644 --- a/src/cont/contclasses.cpp +++ b/src/cont/contclasses.cpp @@ -310,7 +310,6 @@ void OverseerHandler::reviseEndpointShowing(std::wstring endpointId, EndpointSta Flows flow; if (!eph) { if (state ^ EndpointState::ENDPOINT_ACTIVE) return; - //return; //flow = Flows::FLOW_CAPTURE; eph = osh->addEndpoint(endpointId, &flow); } else @@ -319,7 +318,6 @@ void OverseerHandler::reviseEndpointShowing(std::wstring endpointId, EndpointSta //todo: mic done but disabled. Tab-kun will come... if (flow == Flows::FLOW_CAPTURE) return; - if(eph && EndpointState::ENDPOINT_ACTIVE & state) { this->addEndpointWidget(eph); } else if (eph && eph->getFrontVisibilityState() == EndpointState::ENDPOINT_ACTIVE){ diff --git a/src/qt/qtclasses.cpp b/src/qt/qtclasses.cpp index 4b8f044..0f8869a 100644 --- a/src/qt/qtclasses.cpp +++ b/src/qt/qtclasses.cpp @@ -295,7 +295,7 @@ void ChannelWidget::updateChannel(int channel) { this->channelSliders.at(channel)->blockSignals(false); } -EndpointWidget::EndpointWidget(uint64_t idx, EndpointHandler* eph, QWidget *parent) : QWidget(parent) { +EndpointWidget::EndpointWidget(EndpointHandler* eph, QWidget *parent, uint64_t idx) : QWidget(parent) { //todo: based on qgridlayout, name+mute should be its own widget, same with channels row = 0; this->idx = idx; @@ -520,7 +520,7 @@ void MainWindow::removeEndpointWidget(CustomWidgetEvent* ev){ } void MainWindow::addEndpointWidget(CustomWidgetEvent* ev){ - EndpointWidget* epw = new EndpointWidget(this->ews.size(), ev->payload, widget); + EndpointWidget* epw = new EndpointWidget(ev->payload, widget, this->ews.size()); //epw->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); this->widgetLayout->addWidget(epw); ews.push_back(epw); @@ -621,7 +621,7 @@ EndpointHandler* EndpointWidget::getEndpointHandler(){ void EndpointWidget::setIndex(uint64_t idx){ this->idx = idx; - this->eph->setFrontVisibilityInfo(EndpointState::ENDPOINT_ACTIVE, this->idx); + this->eph->setState(EndpointState::ENDPOINT_ACTIVE, this->idx); } uint64_t EndpointWidget::getIndex(){ @@ -733,42 +733,59 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { * Set of function callback definitons for EndpointSituationCallback */ osh->setChangeFrontDefaultsFunction([this](Roles role, std::wstring endpointId) { - for (auto epw : this->ews) { - /* - * Is this the new default endpoint? - */ + EndpointWidget *newDef = nullptr, *oldDef = nullptr; + for (int i = 0; i < ews.size(); i++) { + auto epw = this->ews.at(i); + if (!epw) continue; if (epw->getEndpointHandler()->getId() == endpointId) { - //not necessary to keep endpointState flags up to date right now, but updating it will allow for later config files / profiles - epw->getDefaultRolesWidgets().at(role)->blockSignals(true); - epw->getEndpointHandler()->assignRoles(role); - epw->getDefaultRolesWidgets().at(role)->blockSignals(false); - QCoreApplication::instance()->postEvent(epw->getDefaultRolesWidgets().at(role), new QEvent((QEvent::Type)CustomQEvent::EndpointDefaultChange)); - //epw->defaultRolesCheckBoxes.at(role)->postEnableChange(); - /* - * And were you THE default? - */ - if (epw->getEndpointHandler()->getRoles() == Roles::ROLE_ALL) { - QCoreApplication::instance()->postEvent(epw->getDefaultRolesWidgets().at(Roles::ROLE_ALL), new QEvent((QEvent::Type)CustomQEvent::EndpointDefaultChange)); - } - /* - * Are you the dethroned king? - */ - } else if (epw->getEndpointHandler()->getRoles() & role) { - /* - * And were you THE default up until now? - */ - if (epw->getEndpointHandler()->getRoles() == Roles::ROLE_ALL) { - QCoreApplication::instance()->postEvent(epw->getDefaultRolesWidgets().at(Roles::ROLE_ALL), new QEvent((QEvent::Type)CustomQEvent::EndpointDefaultChange)); - } - - epw->getDefaultRolesWidgets().at(role)->blockSignals(true); - //Same as before. ini-san will come... - epw->getEndpointHandler()->removeRoles(role); - epw->getDefaultRolesWidgets().at(role)->blockSignals(false); - QCoreApplication::instance()->postEvent(epw->getDefaultRolesWidgets().at(role), new QEvent((QEvent::Type)CustomQEvent::EndpointDefaultChange)); - - } - } + newDef = epw; + continue; } + if (epw->getEndpointHandler()->getRoles() & role) { + oldDef = epw; + continue; } + } + + //debug if (role != Roles::ROLE_COMMUNICATIONS) return; + if (oldDef && newDef) { + this->ews.at(oldDef->getIndex()) = nullptr; + this->ews.at(newDef->getIndex()) = nullptr; + newDef->getDefaultRolesWidgets().at(role)->blockSignals(true); + newDef->getEndpointHandler()->assignRoles(role); + QCoreApplication::instance()->postEvent(newDef->getDefaultRolesWidgets().at(role), new QEvent((QEvent::Type)CustomQEvent::EndpointDefaultChange)); + uint8_t newDefIdx = newDef->getIndex(); + uint8_t newDefRoles = newDef->getEndpointHandler()->getRoles(); + if (newDefRoles == Roles::ROLE_ALL) { + newDef->setIndex(0); + this->ews[0] = newDef; + QCoreApplication::instance()->postEvent(newDef->getDefaultRolesWidgets().at(Roles::ROLE_ALL), new QEvent((QEvent::Type)CustomQEvent::EndpointDefaultChange)); + } else if ((newDefRoles & Roles::ROLE_MULTIMEDIA) || + (newDefRoles & Roles::ROLE_CONSOLE)){ newDef->setIndex(0); + this->ews[0] = newDef; + } else if (newDefRoles & Roles::ROLE_COMMUNICATIONS) { newDef->setIndex(1); + this->ews[1] = newDef;} + log_debugcpp("newDef new idx: " + std::to_string(newDef->getIndex())); + newDef->getDefaultRolesWidgets().at(role)->blockSignals(false); + + oldDef->getDefaultRolesWidgets().at(role)->blockSignals(true); + uint8_t oldDefRoles = oldDef->getEndpointHandler()->getRoles(); + if (oldDefRoles == Roles::ROLE_ALL) QCoreApplication::instance()->postEvent(oldDef->getDefaultRolesWidgets().at(Roles::ROLE_ALL), new QEvent((QEvent::Type)CustomQEvent::EndpointDefaultChange)); + oldDef->getEndpointHandler()->removeRoles(role); + QCoreApplication::instance()->postEvent(oldDef->getDefaultRolesWidgets().at(role), new QEvent((QEvent::Type)CustomQEvent::EndpointDefaultChange)); + oldDefRoles = oldDef->getEndpointHandler()->getRoles(); + //this->ews[oldDef->getIndex()] = nullptr; + if ((oldDefRoles & Roles::ROLE_MULTIMEDIA) && + (oldDefRoles & Roles::ROLE_CONSOLE)) { this-> ews[0] = oldDef; + oldDef->setIndex(0); + } else if (oldDefRoles & Roles::ROLE_COMMUNICATIONS) { this-> ews[1] = oldDef; + oldDef->setIndex(1); + } else { if (newDefIdx > 1) { this->ews[newDefIdx] = oldDef; + oldDef->setIndex(newDefIdx); + } else { this->ews.push_back(oldDef); + oldDef->setIndex(this->ews.size() - 1); + } } + log_debugcpp("oldDef new idx: " + std::to_string(oldDef->getIndex())); + oldDef->getDefaultRolesWidgets().at(role)->blockSignals(false); + } }); osh->setRemoveEndpointWidgetFunction([this](uint64_t index) { @@ -809,18 +826,18 @@ void MainWindow::reloadEndpointWidgets() { size_t i = 2; ews.resize(2); //widgetLayout->addItem(&lastRowSpacer, i++, 0); - for (size_t epwIndex = 0; i < (osh->getPlaybackEndpointHandlers().size()); i++) { + for (size_t epwIndex = 2; i < (osh->getPlaybackEndpointHandlers().size()); i++) { if (osh->getPlaybackEndpointHandlers().at(i)->getState() == EndpointState::ENDPOINT_ACTIVE){ log_debugcpp("EPWidget creation"); //osh->getPlaybackEndpointHandlers().at(i)->getCallbackInfo()->caller = osh->getGuid(); - EndpointWidget *epw = new EndpointWidget(epwIndex, osh->getPlaybackEndpointHandlers().at(i), widget); - if ((epw->getEndpointHandler()->getRoles() & Roles::ROLE_ALL) || + EndpointWidget *epw = new EndpointWidget(osh->getPlaybackEndpointHandlers().at(i), widget); + if ((epw->getEndpointHandler()->getRoles() == Roles::ROLE_ALL) || (epw->getEndpointHandler()->getRoles() & Roles::ROLE_MULTIMEDIA)) - { ews[0] = epw; widgetLayout->addWidget(epw, 0, 0); } - else if (epw->getEndpointHandler()->getRoles() & Roles::ROLE_CONSOLE) - { ews[0] = epw; widgetLayout->addWidget(epw, 1, 0); } + { ews[0] = epw; widgetLayout->addWidget(epw, 0, 0); epw->setIndex(0); } + else if (epw->getEndpointHandler()->getRoles() & Roles::ROLE_COMMUNICATIONS) + { ews[1] = epw; widgetLayout->addWidget(epw, 1, 0); epw->setIndex(1); } else { - epwIndex++; + epw->setIndex(epwIndex++); //alfinal estoes solopara inicializarlmao ews.push_back(epw); widgetLayout->addWidget(epw, i, 0); } diff --git a/src/qt/qtclasses.h b/src/qt/qtclasses.h index 0132e45..96268cb 100644 --- a/src/qt/qtclasses.h +++ b/src/qt/qtclasses.h @@ -124,7 +124,7 @@ class EndpointWidget : public QWidget { Q_OBJECT public: - EndpointWidget(uint64_t idx, EndpointHandler* eph, QWidget *parent = nullptr); + EndpointWidget(EndpointHandler* eph, QWidget *parent = nullptr, uint64_t idx = INT_MAX); //QSize minimumSizeHint() const override; //void setMinimum(uint64_t height, double heightRatio);