瀏覽代碼

Merge pull request #82 from Socapex/master

Small usability enhancements.
Jim 11 年之前
父節點
當前提交
29443eaa15

+ 7 - 0
build/data/obs-studio/locale/en.txt

@@ -42,10 +42,17 @@ Basic.DisplayCapture="Display Capture"
 Basic.Main.AddSceneDlg.Title="Add Scene"
 Basic.Main.AddSceneDlg.Title="Add Scene"
 Basic.Main.AddSceneDlg.Text="Please enter the name of the scene"
 Basic.Main.AddSceneDlg.Text="Please enter the name of the scene"
 
 
+# add scene suggested name
+Basic.Main.DefaultSceneName.Text="Scene %1"
+
 # add source dialog
 # add source dialog
 Basic.SourceSelect.CreateNew="Create new"
 Basic.SourceSelect.CreateNew="Create new"
 Basic.SourceSelect.AddExisting="Add Existing"
 Basic.SourceSelect.AddExisting="Add Existing"
 
 
+# no scene warning
+Basic.Main.AddSourceHelp.Title="Cannot Add Source"
+Basic.Main.AddSourceHelp.Text="You need to have at least 1 scene to add a source."
+
 # basic mode main window
 # basic mode main window
 Basic.Main.Scenes="Scenes"
 Basic.Main.Scenes="Scenes"
 Basic.Main.Sources="Sources"
 Basic.Main.Sources="Sources"

+ 12 - 2
obs/window-basic-main.cpp

@@ -958,10 +958,14 @@ void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos)
 void OBSBasic::on_actionAddScene_triggered()
 void OBSBasic::on_actionAddScene_triggered()
 {
 {
 	string name;
 	string name;
+	QString format{QTStr("Basic.Main.DefaultSceneName.Text")};
+	QString placeHolderText = format.arg(ui->scenes->count() + 1);
+
 	bool accepted = NameDialog::AskForName(this,
 	bool accepted = NameDialog::AskForName(this,
 			QTStr("MainWindow.AddSceneDlg.Title"),
 			QTStr("MainWindow.AddSceneDlg.Title"),
 			QTStr("MainWindow.AddSceneDlg.Text"),
 			QTStr("MainWindow.AddSceneDlg.Text"),
-			name);
+			name,
+			placeHolderText);
 
 
 	if (accepted) {
 	if (accepted) {
 		if (name.empty()) {
 		if (name.empty()) {
@@ -1045,8 +1049,14 @@ void OBSBasic::AddSourcePopupMenu(const QPoint &pos)
 	bool foundValues = false;
 	bool foundValues = false;
 	size_t idx = 0;
 	size_t idx = 0;
 
 
-	if (!GetCurrentScene())
+	if (!GetCurrentScene()) {
+		// Tell the user he needs a scene first (help beginners).
+		QMessageBox::information(this,
+				QTStr("Basic.Main.AddSourceHelp.Title"),
+				QTStr("Basic.Main.AddSourceHelp.Text"));
 		return;
 		return;
+	}
+
 
 
 	QMenu popup;
 	QMenu popup;
 	while (obs_enum_input_types(idx++, &type)) {
 	while (obs_enum_input_types(idx++, &type)) {

+ 20 - 10
obs/window-basic-settings.cpp

@@ -158,6 +158,9 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
 	HookWidget(ui->fpsNumerator,         SCROLL_CHANGED, VIDEO_CHANGED);
 	HookWidget(ui->fpsNumerator,         SCROLL_CHANGED, VIDEO_CHANGED);
 	HookWidget(ui->fpsDenominator,       SCROLL_CHANGED, VIDEO_CHANGED);
 	HookWidget(ui->fpsDenominator,       SCROLL_CHANGED, VIDEO_CHANGED);
 
 
+	//Apply button disabled until change.
+	EnableApplyButton(false);
+
 	LoadServiceTypes();
 	LoadServiceTypes();
 	LoadServiceInfo();
 	LoadServiceInfo();
 	LoadSettings(false);
 	LoadSettings(false);
@@ -664,11 +667,6 @@ void OBSBasicSettings::on_listWidget_itemSelectionChanged()
 	if (loading || row == pageIndex)
 	if (loading || row == pageIndex)
 		return;
 		return;
 
 
-	if (Changed() && !QueryChanges()) {
-		ui->listWidget->setCurrentRow(pageIndex);
-		return;
-	}
-
 	pageIndex = row;
 	pageIndex = row;
 }
 }
 
 
@@ -744,20 +742,26 @@ void OBSBasicSettings::on_baseResolution_editTextChanged(const QString &text)
 
 
 void OBSBasicSettings::GeneralChanged()
 void OBSBasicSettings::GeneralChanged()
 {
 {
-	if (!loading)
+	if (!loading) {
 		generalChanged = true;
 		generalChanged = true;
+		EnableApplyButton(true);
+	}
 }
 }
 
 
 void OBSBasicSettings::OutputsChanged()
 void OBSBasicSettings::OutputsChanged()
 {
 {
-	if (!loading)
+	if (!loading) {
 		outputsChanged = true;
 		outputsChanged = true;
+		EnableApplyButton(true);
+	}
 }
 }
 
 
 void OBSBasicSettings::AudioChanged()
 void OBSBasicSettings::AudioChanged()
 {
 {
-	if (!loading)
+	if (!loading) {
 		audioChanged = true;
 		audioChanged = true;
+		EnableApplyButton(true);
+	}
 }
 }
 
 
 void OBSBasicSettings::AudioChangedRestart()
 void OBSBasicSettings::AudioChangedRestart()
@@ -765,6 +769,7 @@ void OBSBasicSettings::AudioChangedRestart()
 	if (!loading) {
 	if (!loading) {
 		audioChanged = true;
 		audioChanged = true;
 		ui->audioMsg->setText(QTStr("Basic.Settings.ProgramRestart"));
 		ui->audioMsg->setText(QTStr("Basic.Settings.ProgramRestart"));
+		EnableApplyButton(true);
 	}
 	}
 }
 }
 
 
@@ -773,17 +778,22 @@ void OBSBasicSettings::VideoChangedRestart()
 	if (!loading) {
 	if (!loading) {
 		videoChanged = true;
 		videoChanged = true;
 		ui->videoMsg->setText(QTStr("Basic.Settings.ProgramRestart"));
 		ui->videoMsg->setText(QTStr("Basic.Settings.ProgramRestart"));
+		EnableApplyButton(true);
 	}
 	}
 }
 }
 
 
 void OBSBasicSettings::VideoChangedResolution()
 void OBSBasicSettings::VideoChangedResolution()
 {
 {
-	if (!loading && ValidResolutions(ui.get()))
+	if (!loading && ValidResolutions(ui.get())) {
 		videoChanged = true;
 		videoChanged = true;
+		EnableApplyButton(true);
+	}
 }
 }
 
 
 void OBSBasicSettings::VideoChanged()
 void OBSBasicSettings::VideoChanged()
 {
 {
-	if (!loading)
+	if (!loading) {
 		videoChanged = true;
 		videoChanged = true;
+		EnableApplyButton(true);
+	}
 }
 }

+ 6 - 0
obs/window-basic-settings.hpp

@@ -53,12 +53,18 @@ private:
 			audioChanged || videoChanged;
 			audioChanged || videoChanged;
 	}
 	}
 
 
+	inline void EnableApplyButton(bool en)
+	{
+		ui->buttonBox->button(QDialogButtonBox::Apply)->setEnabled(en);
+	}
+
 	inline void ClearChanged()
 	inline void ClearChanged()
 	{
 	{
 		generalChanged = false;
 		generalChanged = false;
 		outputsChanged = false;
 		outputsChanged = false;
 		audioChanged   = false;
 		audioChanged   = false;
 		videoChanged   = false;
 		videoChanged   = false;
+		EnableApplyButton(false);
 	}
 	}
 
 
 	void HookWidget(QWidget *widget, const char *signal, const char *slot);
 	void HookWidget(QWidget *widget, const char *signal, const char *slot);

+ 9 - 0
obs/window-basic-source-select.cpp

@@ -18,6 +18,7 @@
 #include "window-basic-main.hpp"
 #include "window-basic-main.hpp"
 #include "window-basic-source-select.hpp"
 #include "window-basic-source-select.hpp"
 #include "qt-wrappers.hpp"
 #include "qt-wrappers.hpp"
+#include "obs-app.hpp"
 
 
 bool OBSBasicSourceSelect::EnumSources(void *data, obs_source_t source)
 bool OBSBasicSourceSelect::EnumSources(void *data, obs_source_t source)
 {
 {
@@ -143,5 +144,13 @@ OBSBasicSourceSelect::OBSBasicSourceSelect(OBSBasic *parent, const char *type_)
 {
 {
 	ui->setupUi(this);
 	ui->setupUi(this);
 
 
+	const char *placeHolderText = obs_source_getdisplayname(
+		OBS_SOURCE_TYPE_INPUT,
+		type_, App()->GetLocale());
+
+	ui->sourceName->setText(QT_UTF8(placeHolderText));
+	ui->sourceName->setFocus();	//Fixes deselect of text.
+	ui->sourceName->selectAll();
+
 	obs_enum_sources(EnumSources, this);
 	obs_enum_sources(EnumSources, this);
 }
 }

+ 3 - 1
obs/window-namedialog.cpp

@@ -28,11 +28,13 @@ NameDialog::NameDialog(QWidget *parent)
 }
 }
 
 
 bool NameDialog::AskForName(QWidget *parent, const QString &title,
 bool NameDialog::AskForName(QWidget *parent, const QString &title,
-		const QString &text, string &str)
+		const QString &text, string &str, const QString &placeHolder)
 {
 {
 	NameDialog dialog(parent);
 	NameDialog dialog(parent);
 	dialog.setWindowTitle(title);
 	dialog.setWindowTitle(title);
 	dialog.ui->label->setText(text);
 	dialog.ui->label->setText(text);
+	dialog.ui->userText->setText(placeHolder);
+	dialog.ui->userText->selectAll();
 
 
 	bool accepted = (dialog.exec() == DialogCode::Accepted);
 	bool accepted = (dialog.exec() == DialogCode::Accepted);
 	if (accepted)
 	if (accepted)

+ 2 - 1
obs/window-namedialog.hpp

@@ -33,5 +33,6 @@ public:
 	NameDialog(QWidget *parent);
 	NameDialog(QWidget *parent);
 
 
 	static bool AskForName(QWidget *parent, const QString &title,
 	static bool AskForName(QWidget *parent, const QString &title,
-			const QString &text, std::string &str);
+			const QString &text, std::string &str,
+			const QString &placeHolder = QString(""));
 };
 };