sessions dynamically removed
This commit is contained in:
parent
0dd016bb16
commit
5211b70669
9 changed files with 114 additions and 73 deletions
|
|
@ -95,6 +95,11 @@ void SessionWidget::updateMainVolume(int newValue){
|
|||
this->sh->setVolume(osh->getGuid(), AudioChannel::CHANNEL_MAIN, newValue);
|
||||
}
|
||||
|
||||
SessionWidget::~SessionWidget() {
|
||||
volumePoller->stop();
|
||||
delete volumePoller;
|
||||
}
|
||||
|
||||
EndpointWidget::EndpointWidget(uint64_t idx, EndpointHandler* eph, QWidget *parent) : QWidget(parent){
|
||||
//todo: based on qgridlayout, name+mute should be its own widget, same with channels
|
||||
row = 0;
|
||||
|
|
@ -261,12 +266,17 @@ EndpointWidget::EndpointWidget(uint64_t idx, EndpointHandler* eph, QWidget *pare
|
|||
layout->addWidget(sessionWidget, row, 4);
|
||||
row++;
|
||||
sessionWidgets.push_back(sessionWidget);
|
||||
eph->getSessionHandlers().at(i)->setFrontIndex(i);
|
||||
}
|
||||
|
||||
/* New SessionWidget callback */
|
||||
/* Add/Remove SessionWidget callback */
|
||||
eph->setAddSessionWidgetFunction([this](SessionHandler* sessionHandler) {
|
||||
QCoreApplication::instance()->postEvent(this, new CustomWidgetEvent<SessionHandler*>((QEvent::Type)CustomQEvent::SessionWidgetCreated, sessionHandler));
|
||||
});
|
||||
|
||||
eph->setRemoveSessionWidgetFunction([this](SessionHandler* sessionHandler) {
|
||||
QCoreApplication::instance()->postEvent(this, new CustomWidgetEvent<SessionHandler*>((QEvent::Type)CustomQEvent::SessionWidgetObsolete, sessionHandler));
|
||||
});
|
||||
|
||||
//todo parent?
|
||||
layout->addItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::Minimum), 1, 0);
|
||||
|
|
@ -277,23 +287,34 @@ EndpointWidget::EndpointWidget(uint64_t idx, EndpointHandler* eph, QWidget *pare
|
|||
}
|
||||
|
||||
void EndpointWidget::addSessionWidget(CustomWidgetEvent<SessionHandler*>* ev){
|
||||
SessionWidget* sw = new SessionWidget(this->sessionWidgets.size(), ev->payload, this);
|
||||
uint64_t index = this->sessionWidgets.size();
|
||||
SessionWidget* sw = new SessionWidget(index, ev->payload, this);
|
||||
ev->payload->setFrontIndex(index);
|
||||
this->layout->addWidget(sw, row, 4);
|
||||
row++;
|
||||
sessionWidgets.push_back(sw);
|
||||
return;
|
||||
}
|
||||
|
||||
void EndpointWidget::removeSessionWidget(CustomWidgetEvent<SessionHandler*>* ev){
|
||||
uint64_t i = ev->payload->getFrontIndex();
|
||||
this->sessionWidgets.at(i)->setParent(nullptr);
|
||||
this->layout->removeWidget(sessionWidgets.at(i));
|
||||
delete sessionWidgets.at(i);
|
||||
sessionWidgets.at(i) = nullptr;
|
||||
ev->payload->setFrontIndex(INT_MAX);
|
||||
//this->sessionWidgetsUpdateTimer->start();
|
||||
return;
|
||||
}
|
||||
|
||||
void EndpointWidget::customEvent(QEvent* ev) {
|
||||
if (ev->type() == (QEvent::Type)CustomQEvent::SessionWidgetCreated) {
|
||||
ev->setAccepted(true);
|
||||
this->addSessionWidget((CustomWidgetEvent<SessionHandler*>*) ev);
|
||||
return;
|
||||
} else if (ev->type() == (QEvent::Type)CustomQEvent::SessionWidgetObsolete) {
|
||||
ev->setAccepted(true);
|
||||
//this->addEndpointWidget((CustomWidgetEvent<EndpointHandler*>*)ev);
|
||||
this->removeSessionWidget((CustomWidgetEvent<SessionHandler*>*) ev);
|
||||
}
|
||||
// Make sure the rest of events are handled
|
||||
QWidget::customEvent(ev);
|
||||
}
|
||||
|
||||
|
|
@ -308,12 +329,10 @@ void MainWindow::customEvent(QEvent* ev) {
|
|||
if (ev->type() == CustomQEvent::EndpointWidgetObsolete) {
|
||||
ev->setAccepted(true);
|
||||
this->removeEndpointWidget((CustomWidgetEvent<uint64_t>*)ev);
|
||||
return;
|
||||
} else if (ev->type() == (QEvent::Type)CustomQEvent::EndpointWidgetCreated) {
|
||||
ev->setAccepted(true);
|
||||
this->addEndpointWidget((CustomWidgetEvent<EndpointHandler*>*)ev);
|
||||
}
|
||||
// Make sure the rest of events are handled
|
||||
QMainWindow::customEvent(ev);
|
||||
}
|
||||
|
||||
|
|
@ -326,15 +345,6 @@ void MainWindow::removeEndpointWidget(CustomWidgetEvent<uint64_t>* ev){
|
|||
delete ews.at(i);
|
||||
ews.at(i) = nullptr;
|
||||
this->ewsUpdateTimer->start();
|
||||
|
||||
/*
|
||||
* while ((i + 1) < ews.size()) {
|
||||
* ews.at(i) = ews.at(i + 1);
|
||||
* ews.at(i)->setIndex(i);
|
||||
* i++;
|
||||
* }
|
||||
* ews.pop_back();
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -346,6 +356,7 @@ void MainWindow::addEndpointWidget(CustomWidgetEvent<EndpointHandler*>* ev){
|
|||
}
|
||||
|
||||
void MainWindow::reorderEndpointWidgetCollection() {
|
||||
/* Flatten */
|
||||
size_t firstNullPosition = 0;
|
||||
size_t ewsSize = ews.size();
|
||||
bool breakSorting = false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue