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

UI: Update Edit Transform dialog on scene switch

Closes obsproject/obs-studio#4312
Mike пре 4 година
родитељ
комит
9267c7e53d
3 измењених фајлова са 22 додато и 0 уклоњено
  1. 2 0
      UI/window-basic-main.cpp
  2. 16 0
      UI/window-basic-transform.cpp
  3. 4 0
      UI/window-basic-transform.hpp

+ 2 - 0
UI/window-basic-main.cpp

@@ -7714,6 +7714,8 @@ void OBSBasic::on_actionEditTransform_triggered()
 		return;
 
 	transformWindow = new OBSBasicTransform(this);
+	connect(ui->scenes, &QListWidget::currentItemChanged, transformWindow,
+		&OBSBasicTransform::OnSceneChanged);
 	transformWindow->show();
 	transformWindow->setAttribute(Qt::WA_DeleteOnClose, true);
 }

+ 16 - 0
UI/window-basic-transform.cpp

@@ -2,6 +2,7 @@
 #include "window-basic-transform.hpp"
 #include "window-basic-main.hpp"
 
+Q_DECLARE_METATYPE(OBSScene);
 Q_DECLARE_METATYPE(OBSSceneItem);
 
 static bool find_sel(obs_scene_t *, obs_sceneitem_t *item, void *param)
@@ -351,3 +352,18 @@ void OBSBasicTransform::on_resetButton_clicked()
 {
 	main->on_actionResetTransform_triggered();
 }
+
+template<typename T> static T GetOBSRef(QListWidgetItem *item)
+{
+	return item->data(static_cast<int>(QtDataRole::OBSRef)).value<T>();
+}
+
+void OBSBasicTransform::OnSceneChanged(QListWidgetItem *current,
+				       QListWidgetItem *)
+{
+	if (!current)
+		return;
+
+	obs_scene_t *scene = GetOBSRef<OBSScene>(current);
+	this->SetScene(scene);
+}

+ 4 - 0
UI/window-basic-transform.hpp

@@ -6,6 +6,7 @@
 #include "ui_OBSBasicTransform.h"
 
 class OBSBasic;
+class QListWidgetItem;
 
 class OBSBasicTransform : public QDialog {
 	Q_OBJECT
@@ -49,4 +50,7 @@ private slots:
 public:
 	OBSBasicTransform(OBSBasic *parent);
 	~OBSBasicTransform();
+
+public slots:
+	void OnSceneChanged(QListWidgetItem *current, QListWidgetItem *prev);
 };