提交 8f4edede 编写于 作者: C cg2121 提交者: jp9000

UI: Add confirmation dialog if there are no sources

This adds a confirmation dialog for streaming or recording if
there are no sources.

Closes obsproject/obs-studio#1344
上级 3fd33478
......@@ -845,3 +845,8 @@ OutputWarnings.MP4Recording="Warning: Recordings saved to MP4 will be unrecovera
# deleting final scene
FinalScene.Title="Delete Scene"
FinalScene.Text="There needs to be at least one scene."
# no sources
NoSources.Title="No Sources"
NoSources.Text="It looks like you haven't added any video sources yet, so you will only be outputting a blank screen. Are you sure you want to do this?"
NoSources.Text.AddSource="You can add sources by clicking the + icon under the Sources box in the main window at any time."
......@@ -143,6 +143,26 @@ 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;
}
OBSBasic::OBSBasic(QWidget *parent)
: OBSMainWindow (parent),
ui (new Ui::OBSBasic)
......@@ -4936,6 +4956,11 @@ void OBSBasic::StartReplayBuffer()
if (disableOutputsRef)
return;
if (!NoSourcesConfirmation()) {
replayBufferButton->setChecked(false);
return;
}
obs_output_t *output = outputHandler->replayBuffer;
obs_data_t *hotkeys = obs_hotkeys_save_output(output);
obs_data_array_t *bindings = obs_data_get_array(hotkeys,
......@@ -5065,6 +5090,28 @@ 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(QMessageBox::Question,
QTStr("NoSources.title"),
msg,
QMessageBox::Yes | QMessageBox::No,
this);
messageBox.setDefaultButton(QMessageBox::No);
if (QMessageBox::No == messageBox.exec())
return false;
}
return true;
}
void OBSBasic::on_streamButton_clicked()
{
if (outputHandler->StreamingActive()) {
......@@ -5085,6 +5132,11 @@ void OBSBasic::on_streamButton_clicked()
StopStreaming();
} else {
if (!NoSourcesConfirmation()) {
ui->streamButton->setChecked(false);
return;
}
bool confirm = config_get_bool(GetGlobalConfig(), "BasicWindow",
"WarnBeforeStartingStream");
......@@ -5106,10 +5158,16 @@ void OBSBasic::on_streamButton_clicked()
void OBSBasic::on_recordButton_clicked()
{
if (outputHandler->RecordingActive())
if (outputHandler->RecordingActive()) {
StopRecording();
else
} else {
if (!NoSourcesConfirmation()) {
ui->recordButton->setChecked(false);
return;
}
StartRecording();
}
}
void OBSBasic::on_settingsButton_clicked()
......
......@@ -372,6 +372,8 @@ private:
void ReceivedIntroJson(const QString &text);
bool NoSourcesConfirmation();
public slots:
void DeferSaveBegin();
void DeferSaveEnd();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册