VideoOverlay::VideoOverlay(QWidget* parent) : QWidget(parent), ui(new Ui::VideoOverlay), transferDialog_(new CallUtilsDialog()), qualityDialog_(new QualityDialog()) { ui->setupUi(this); ui->chatButton->setCheckable(true); actionModel_ = CallModel::instance().userActionModel(); setAttribute(Qt::WA_NoSystemBackground); ui->noMicButton->setCheckable(true); connect(actionModel_,&UserActionModel::dataChanged, [=](const QModelIndex& tl, const QModelIndex& br) { const int first(tl.row()),last(br.row()); for(int i = first; i <= last;i++) { const QModelIndex& idx = actionModel_->index(i,0); switch (idx.data(UserActionModel::Role::ACTION).value<UserActionModel::Action>()) { case UserActionModel::Action::MUTE_AUDIO: ui->noMicButton->setChecked(idx.data(Qt::CheckStateRole).value<bool>()); ui->noMicButton->setEnabled(idx.flags() & Qt::ItemIsEnabled); break; case UserActionModel::Action::MUTE_VIDEO: ui->noVideoButton->setChecked(idx.data(Qt::CheckStateRole).value<bool>()); ui->noVideoButton->setEnabled(idx.flags() & Qt::ItemIsEnabled); break; case UserActionModel::Action::HOLD: ui->holdButton->setChecked(idx.data(Qt::CheckStateRole).value<bool>()); ui->holdButton->setEnabled(idx.flags() & Qt::ItemIsEnabled); ui->onHoldLabel->setVisible(idx.data(Qt::CheckStateRole).value<bool>()); break; case UserActionModel::Action::RECORD: ui->recButton->setChecked(idx.data(Qt::CheckStateRole).value<bool>()); ui->recButton->setEnabled(idx.flags() & Qt::ItemIsEnabled); default: break; } } }); connect(CallModel::instance().selectionModel(), &QItemSelectionModel::currentChanged, [=](const QModelIndex ¤t, const QModelIndex &previous) { Q_UNUSED(previous) Call* c = current.data(static_cast<int>(Call::Role::Object)).value<Call*>(); if (c) { if (c->hasParentCall()) { ui->holdButton->hide(); ui->transferButton->hide(); ui->addPersonButton->hide(); ui->chatButton->hide(); ui->joinButton->show(); } else { ui->holdButton->show(); ui->transferButton->show(); ui->addPersonButton->show(); ui->chatButton->show(); ui->joinButton->hide(); } if (auto contactMethod = c->peerContactMethod()) ui->addToContactButton->setVisible(not contactMethod->contact() || contactMethod->contact()->isPlaceHolder()); } }); transferDialog_->setAttribute(Qt::WA_TranslucentBackground); connect(transferDialog_, &CallUtilsDialog::isVisible, [this] (bool visible) { dialogVisible_ = visible; }); qualityDialog_->setAttribute(Qt::WA_TranslucentBackground); connect(qualityDialog_, &QualityDialog::isVisible, [this] (bool visible) { dialogVisible_ = visible; }); }