call: add audio/video muting

Refs #75601

Change-Id: Ib48aeb7e1fee4fa6af321d3e6c216841bf7cc91c
diff --git a/videooverlay.cpp b/videooverlay.cpp
index c50f82b..c3bcc79 100644
--- a/videooverlay.cpp
+++ b/videooverlay.cpp
@@ -31,11 +31,48 @@
 
     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<UserActionModel::Action>()) {
+               case UserActionModel::Action::MUTE_AUDIO:
+                muteAudio->setChecked(idx.data(Qt::CheckStateRole).value<bool>());
+                muteAudio->setEnabled(idx.flags() & Qt::ItemIsEnabled);
+                break;
+            case UserActionModel::Action::MUTE_VIDEO:
+                muteVideo->setChecked(idx.data(Qt::CheckStateRole).value<bool>());
+                muteVideo->setEnabled(idx.flags() & Qt::ItemIsEnabled);
+                break;
+            default:
+                break;
+            }
+        }
+    });
+
+    ui->moreButton->setMenu(menu_);
 }
 
 VideoOverlay::~VideoOverlay()
 {
     delete ui;
+    delete menu_;
 }
 
 void