diff --git a/videooverlay.cpp b/videooverlay.cpp index c50f82bce773f26c4899d4e15e5a50edd7e5776e..c3bcc79a0d9f1f8f449a0f3c71e113b847810864 100644 --- a/videooverlay.cpp +++ b/videooverlay.cpp @@ -31,11 +31,48 @@ VideoOverlay::VideoOverlay(QWidget *parent) : actionModel_ = CallModel::instance()->userActionModel(); setAttribute(Qt::WA_NoSystemBackground); + + menu_ = new QMenu(this); + auto muteAudio = new QAction("Mute Audio", this); + muteAudio->setCheckable(true); + connect(muteAudio, &QAction::triggered, [=](bool) { + actionModel_->execute(UserActionModel::Action::MUTE_AUDIO); + }); + menu_->addAction(muteAudio); + + auto muteVideo = new QAction("Mute Video", this); + muteVideo->setCheckable(true); + connect(muteVideo, &QAction::triggered, [=](bool) { + actionModel_->execute(UserActionModel::Action::MUTE_VIDEO); + }); + menu_->addAction(muteVideo); + + 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()) { + case UserActionModel::Action::MUTE_AUDIO: + muteAudio->setChecked(idx.data(Qt::CheckStateRole).value()); + muteAudio->setEnabled(idx.flags() & Qt::ItemIsEnabled); + break; + case UserActionModel::Action::MUTE_VIDEO: + muteVideo->setChecked(idx.data(Qt::CheckStateRole).value()); + muteVideo->setEnabled(idx.flags() & Qt::ItemIsEnabled); + break; + default: + break; + } + } + }); + + ui->moreButton->setMenu(menu_); } VideoOverlay::~VideoOverlay() { delete ui; + delete menu_; } void diff --git a/videooverlay.h b/videooverlay.h index e31d0f9e51389094b63e280836bbf782ade2a67f..8568a845d04baa83a1491893a406161ccf77859a 100644 --- a/videooverlay.h +++ b/videooverlay.h @@ -20,6 +20,7 @@ #define VIDEOOVERLAY_H #include +#include #include "useractionmodel.h" @@ -48,6 +49,7 @@ private slots: private: Ui::VideoOverlay *ui; UserActionModel* actionModel_; + QMenu* menu_; signals: void setChatVisibility(bool visible); diff --git a/videooverlay.ui b/videooverlay.ui index 092208aee904ca490aa9f6b8c6163b56e5e26008..19a3c003ed2fa15e7cb234ec008762f2a8cdfe1c 100644 --- a/videooverlay.ui +++ b/videooverlay.ui @@ -17,13 +17,6 @@ Form - - - - Hangup - - - @@ -54,7 +47,7 @@ - + Qt::Horizontal @@ -111,7 +104,7 @@ - + @@ -155,6 +148,20 @@ + + + + Hangup + + + + + + + ... + + +