UI: Replace SIGNAL and SLOT macros for AddProjectorMenuMonitors method

A small refactor of AddProjectorMenuMonitors, as template functions need
to be fully defined in header files.
Also makes the function static as there is no point of it being a
non-static member function. In theory it could also be moved out of
OBSBasic but there isn't really a better place for it so let's leave it
where it is for simplicity.
This commit is contained in:
gxalpha
2023-07-21 13:19:52 +02:00
parent 61781d154d
commit ef26f14f18
3 changed files with 35 additions and 26 deletions
+17 -18
View File
@@ -2230,7 +2230,7 @@ void OBSBasic::OBSInit()
ui->viewMenu->addSeparator();
AddProjectorMenuMonitors(ui->multiviewProjectorMenu, this,
SLOT(OpenMultiviewProjector()));
&OBSBasic::OpenMultiviewProjector);
connect(ui->viewMenu->menuAction(), &QAction::hovered, this,
&OBSBasic::UpdateMultiviewProjectorMenu);
@@ -2490,7 +2490,7 @@ void OBSBasic::UpdateMultiviewProjectorMenu()
{
ui->multiviewProjectorMenu->clear();
AddProjectorMenuMonitors(ui->multiviewProjectorMenu, this,
SLOT(OpenMultiviewProjector()));
&OBSBasic::OpenMultiviewProjector);
}
void OBSBasic::InitHotkeys()
@@ -5347,10 +5347,9 @@ void OBSBasic::EditSceneName()
item->setFlags(flags);
}
void OBSBasic::AddProjectorMenuMonitors(QMenu *parent, QObject *target,
const char *slot)
QList<QString> OBSBasic::GetProjectorMenuMonitorsFormatted()
{
QAction *action;
QList<QString> projectorsFormatted;
QList<QScreen *> screens = QGuiApplication::screens();
for (int i = 0; i < screens.size(); i++) {
QScreen *screen = screens[i];
@@ -5387,10 +5386,9 @@ void OBSBasic::AddProjectorMenuMonitors(QMenu *parent, QObject *target,
ratio),
QString::number(screenGeometry.x()),
QString::number(screenGeometry.y()));
action = parent->addAction(str, target, slot);
action->setProperty("monitor", i);
projectorsFormatted.push_back(str);
}
return projectorsFormatted;
}
void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos)
@@ -5441,7 +5439,7 @@ void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos)
delete sceneProjectorMenu;
sceneProjectorMenu = new QMenu(QTStr("SceneProjector"));
AddProjectorMenuMonitors(sceneProjectorMenu, this,
SLOT(OpenSceneProjector()));
&OBSBasic::OpenSceneProjector);
popup.addMenu(sceneProjectorMenu);
QAction *sceneWindow = popup.addAction(
@@ -5888,7 +5886,7 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview)
previewProjectorSource = new QMenu(QTStr("PreviewProjector"));
AddProjectorMenuMonitors(previewProjectorSource, this,
SLOT(OpenPreviewProjector()));
&OBSBasic::OpenPreviewProjector);
popup.addMenu(previewProjectorSource);
@@ -6003,8 +6001,9 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview)
popup.addSeparator();
sourceProjector = new QMenu(QTStr("SourceProjector"));
AddProjectorMenuMonitors(sourceProjector, this,
SLOT(OpenSourceProjector()));
AddProjectorMenuMonitors(
sourceProjector, this,
&OBSBasic::OpenSourceProjector);
popup.addMenu(sourceProjector);
popup.addAction(QTStr("SourceWindow"), this,
&OBSBasic::OpenSourceWindow);
@@ -8236,7 +8235,7 @@ void OBSBasic::ProgramViewContextMenuRequested()
studioProgramProjector = new QMenu(QTStr("StudioProgramProjector"));
AddProjectorMenuMonitors(studioProgramProjector, this,
SLOT(OpenStudioProgramProjector()));
&OBSBasic::OpenStudioProgramProjector);
popup.addMenu(studioProgramProjector);
@@ -8265,7 +8264,7 @@ void OBSBasic::on_previewDisabledWidget_customContextMenuRequested()
previewProjectorMain = new QMenu(QTStr("PreviewProjector"));
AddProjectorMenuMonitors(previewProjectorMain, this,
SLOT(OpenPreviewProjector()));
&OBSBasic::OpenPreviewProjector);
QAction *previewWindow = popup.addAction(QTStr("PreviewWindow"), this,
&OBSBasic::OpenPreviewWindow);
@@ -9669,9 +9668,9 @@ void OBSBasic::SystemTrayInit()
previewProjector = new QMenu(QTStr("PreviewProjector"));
studioProgramProjector = new QMenu(QTStr("StudioProgramProjector"));
AddProjectorMenuMonitors(previewProjector, this,
SLOT(OpenPreviewProjector()));
&OBSBasic::OpenPreviewProjector);
AddProjectorMenuMonitors(studioProgramProjector, this,
SLOT(OpenStudioProgramProjector()));
&OBSBasic::OpenStudioProgramProjector);
trayMenu->addAction(showHide);
trayMenu->addSeparator();
trayMenu->addMenu(previewProjector);
@@ -9714,9 +9713,9 @@ void OBSBasic::IconActivated(QSystemTrayIcon::ActivationReason reason)
previewProjector->clear();
studioProgramProjector->clear();
AddProjectorMenuMonitors(previewProjector, this,
SLOT(OpenPreviewProjector()));
&OBSBasic::OpenPreviewProjector);
AddProjectorMenuMonitors(studioProgramProjector, this,
SLOT(OpenStudioProgramProjector()));
&OBSBasic::OpenStudioProgramProjector);
#ifdef __APPLE__
UNUSED_PARAMETER(reason);
+13 -2
View File
@@ -982,8 +982,19 @@ public:
const char *GetCurrentOutputPath();
void DeleteProjector(OBSProjector *projector);
void AddProjectorMenuMonitors(QMenu *parent, QObject *target,
const char *slot);
static QList<QString> GetProjectorMenuMonitorsFormatted();
template<typename Receiver, typename... Args>
static void AddProjectorMenuMonitors(QMenu *parent, Receiver *target,
void (Receiver::*slot)(Args...))
{
auto projectors = GetProjectorMenuMonitorsFormatted();
for (int i = 0; i < projectors.size(); i++) {
QString str = projectors[i];
QAction *action = parent->addAction(str, target, slot);
action->setProperty("monitor", i);
}
}
QIcon GetSourceIcon(const char *id) const;
QIcon GetGroupIcon() const;
+5 -6
View File
@@ -256,13 +256,12 @@ void OBSProjector::mousePressEvent(QMouseEvent *event)
OBSQTDisplay::mousePressEvent(event);
if (event->button() == Qt::RightButton) {
OBSBasic *main =
reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
QMenu popup(this);
QMenu *projectorMenu = new QMenu(QTStr("Fullscreen"));
main->AddProjectorMenuMonitors(projectorMenu, this,
SLOT(OpenFullScreenProjector()));
OBSBasic::AddProjectorMenuMonitors(
projectorMenu, this,
&OBSProjector::OpenFullScreenProjector);
QMenu popup(this);
popup.addMenu(projectorMenu);
if (GetMonitor() > -1) {