Преглед изворни кода

UI: Update quick transitions on transition add/removal

Fixes a bug where the individual drop-down lists of each quick
transition would not have the correct available transitions listed if
transitions were added, renamed, or removed
jp9000 пре 8 година
родитељ
комит
b2e376b022
2 измењених фајлова са 36 додато и 1 уклоњено
  1. 35 1
      UI/window-basic-main-transitions.cpp
  2. 1 0
      UI/window-basic-main.hpp

+ 35 - 1
UI/window-basic-main-transitions.cpp

@@ -392,6 +392,9 @@ void OBSBasic::AddTransition()
 
 		if (api)
 			api->on_event(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
+
+		ClearQuickTransitionWidgets();
+		RefreshQuickTransitions();
 	}
 }
 
@@ -445,6 +448,9 @@ void OBSBasic::on_transitionRemove_clicked()
 
 	if (api)
 		api->on_event(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
+
+	ClearQuickTransitionWidgets();
+	RefreshQuickTransitions();
 }
 
 void OBSBasic::RenameTransition()
@@ -483,8 +489,11 @@ void OBSBasic::RenameTransition()
 
 		obs_source_set_name(transition, name.c_str());
 		int idx = ui->transitions->findData(variant);
-		if (idx != -1)
+		if (idx != -1) {
 			ui->transitions->setItemText(idx, QT_UTF8(name.c_str()));
+			ClearQuickTransitionWidgets();
+			RefreshQuickTransitions();
+		}
 	}
 }
 
@@ -919,6 +928,31 @@ void OBSBasic::QuickTransitionRemoveClicked()
 	quickTransitions.erase(quickTransitions.begin() + idx);
 }
 
+void OBSBasic::ClearQuickTransitionWidgets()
+{
+	if (!IsPreviewProgramMode())
+		return;
+
+	QVBoxLayout *programLayout =
+		reinterpret_cast<QVBoxLayout*>(programOptions->layout());
+
+	for (int idx = 0;; idx++) {
+		QLayoutItem *item = programLayout->itemAt(idx);
+		if (!item)
+			break;
+
+		QWidget *widget = item->widget();
+		if (!widget)
+			continue;
+
+		int id = widget->property("id").toInt();
+		if (id != 0) {
+			delete widget;
+			idx--;
+		}
+	}
+}
+
 void OBSBasic::RefreshQuickTransitions()
 {
 	if (!IsPreviewProgramMode())

+ 1 - 0
UI/window-basic-main.hpp

@@ -282,6 +282,7 @@ private:
 	void RemoveQuickTransitionHotkey(QuickTransition *qt);
 	void LoadQuickTransitions(obs_data_array_t *array);
 	obs_data_array_t *SaveQuickTransitions();
+	void ClearQuickTransitionWidgets();
 	void RefreshQuickTransitions();
 	void CreateDefaultQuickTransitions();