UI: Create UI Validation Helper Class
Pull UI validation and its helpers to their own class. This class will be used to validate forms and perform UI-action checks such as checking stream keys aren't empty and in this diff now holds the logic to ensure there is a source before the person starts a stream.master
parent
bcddf4ddbf
commit
c4396e03a7
|
@ -245,6 +245,7 @@ set(obs_SOURCES
|
|||
combobox-ignorewheel.cpp
|
||||
spinbox-ignorewheel.cpp
|
||||
record-button.cpp
|
||||
ui-validation.cpp
|
||||
url-push-button.cpp
|
||||
volume-control.cpp
|
||||
adv-audio-control.cpp
|
||||
|
@ -302,6 +303,7 @@ set(obs_HEADERS
|
|||
menu-button.hpp
|
||||
mute-checkbox.hpp
|
||||
record-button.hpp
|
||||
ui-validation.hpp
|
||||
url-push-button.hpp
|
||||
volume-control.hpp
|
||||
adv-audio-control.hpp
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
#include "ui-validation.hpp"
|
||||
|
||||
#include <obs.hpp>
|
||||
#include <QString>
|
||||
#include <QMessageBox>
|
||||
#include <QPushButton>
|
||||
|
||||
#include <obs-app.hpp>
|
||||
|
||||
static int CountVideoSources()
|
||||
{
|
||||
int count = 0;
|
||||
auto countSources = [](void *param, obs_source_t *source) {
|
||||
if (!source)
|
||||
return true;
|
||||
|
||||
uint32_t flags = obs_source_get_output_flags(source);
|
||||
if ((flags & OBS_SOURCE_VIDEO) != 0)
|
||||
(*reinterpret_cast<int *>(param))++;
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
obs_enum_sources(countSources, &count);
|
||||
return count;
|
||||
}
|
||||
|
||||
bool UIValidation::NoSourcesConfirmation(QWidget *parent)
|
||||
{
|
||||
// There are sources, don't need confirmation
|
||||
if (CountVideoSources() != 0)
|
||||
return true;
|
||||
|
||||
// Ignore no video if no parent is visible to alert on
|
||||
if (!parent->isVisible())
|
||||
return true;
|
||||
|
||||
QString msg = QTStr("NoSources.Text");
|
||||
msg += "\n\n";
|
||||
msg += QTStr("NoSources.Text.AddSource");
|
||||
|
||||
QMessageBox messageBox(parent);
|
||||
messageBox.setWindowTitle(QTStr("NoSources.Title"));
|
||||
messageBox.setText(msg);
|
||||
|
||||
QAbstractButton *yesButton =
|
||||
messageBox.addButton(QTStr("Yes"), QMessageBox::YesRole);
|
||||
messageBox.addButton(QTStr("No"), QMessageBox::NoRole);
|
||||
messageBox.setIcon(QMessageBox::Question);
|
||||
messageBox.exec();
|
||||
|
||||
if (messageBox.clickedButton() != yesButton)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#pragma once
|
||||
|
||||
#include <QObject>
|
||||
#include <QWidget>
|
||||
|
||||
class UIValidation : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
// Shows alert box notifying there are no video sources
|
||||
// Returns true if user clicks "Yes"
|
||||
// Returns false if user clicks "No"
|
||||
// Blocks UI
|
||||
static bool NoSourcesConfirmation(QWidget *parent);
|
||||
};
|
|
@ -54,6 +54,7 @@
|
|||
#include "display-helpers.hpp"
|
||||
#include "volume-control.hpp"
|
||||
#include "remote-text.hpp"
|
||||
#include "ui-validation.hpp"
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
|
||||
|
@ -163,25 +164,6 @@ static void AddExtraModulePaths()
|
|||
|
||||
extern obs_frontend_callbacks *InitializeAPIInterface(OBSBasic *main);
|
||||
|
||||
static int CountVideoSources()
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
auto countSources = [](void *param, obs_source_t *source) {
|
||||
if (!source)
|
||||
return true;
|
||||
|
||||
uint32_t flags = obs_source_get_output_flags(source);
|
||||
if ((flags & OBS_SOURCE_VIDEO) != 0)
|
||||
(*reinterpret_cast<int *>(param))++;
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
obs_enum_sources(countSources, &count);
|
||||
return count;
|
||||
}
|
||||
|
||||
void assignDockToggle(QDockWidget *dock, QAction *action)
|
||||
{
|
||||
auto handleWindowToggle = [action](bool vis) {
|
||||
|
@ -5600,7 +5582,7 @@ void OBSBasic::StartReplayBuffer()
|
|||
if (disableOutputsRef)
|
||||
return;
|
||||
|
||||
if (!NoSourcesConfirmation()) {
|
||||
if (!UIValidation::NoSourcesConfirmation(this)) {
|
||||
replayBufferButton->setChecked(false);
|
||||
return;
|
||||
}
|
||||
|
@ -5745,30 +5727,6 @@ void OBSBasic::ReplayBufferStop(int code)
|
|||
OnDeactivate();
|
||||
}
|
||||
|
||||
bool OBSBasic::NoSourcesConfirmation()
|
||||
{
|
||||
if (CountVideoSources() == 0 && isVisible()) {
|
||||
QString msg;
|
||||
msg = QTStr("NoSources.Text");
|
||||
msg += "\n\n";
|
||||
msg += QTStr("NoSources.Text.AddSource");
|
||||
|
||||
QMessageBox messageBox(this);
|
||||
messageBox.setWindowTitle(QTStr("NoSources.Title"));
|
||||
messageBox.setText(msg);
|
||||
QAbstractButton *Yes = messageBox.addButton(
|
||||
QTStr("Yes"), QMessageBox::YesRole);
|
||||
messageBox.addButton(QTStr("No"), QMessageBox::NoRole);
|
||||
messageBox.setIcon(QMessageBox::Question);
|
||||
messageBox.exec();
|
||||
|
||||
if (messageBox.clickedButton() != Yes)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void OBSBasic::on_streamButton_clicked()
|
||||
{
|
||||
if (outputHandler->StreamingActive()) {
|
||||
|
@ -5791,7 +5749,7 @@ void OBSBasic::on_streamButton_clicked()
|
|||
|
||||
StopStreaming();
|
||||
} else {
|
||||
if (!NoSourcesConfirmation()) {
|
||||
if (!UIValidation::NoSourcesConfirmation(this)) {
|
||||
ui->streamButton->setChecked(false);
|
||||
return;
|
||||
}
|
||||
|
@ -5852,7 +5810,7 @@ void OBSBasic::on_recordButton_clicked()
|
|||
}
|
||||
StopRecording();
|
||||
} else {
|
||||
if (!NoSourcesConfirmation()) {
|
||||
if (!UIValidation::NoSourcesConfirmation(this)) {
|
||||
ui->recordButton->setChecked(false);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -456,8 +456,6 @@ private:
|
|||
|
||||
void ReceivedIntroJson(const QString &text);
|
||||
|
||||
bool NoSourcesConfirmation();
|
||||
|
||||
#ifdef BROWSER_AVAILABLE
|
||||
QList<QSharedPointer<QDockWidget>> extraBrowserDocks;
|
||||
QList<QSharedPointer<QAction>> extraBrowserDockActions;
|
||||
|
|
Loading…
Reference in New Issue