Browse Source

UI: Disable edit transform if item is locked

The transform window was still accessible if the scene item
was locked.
cg2121 2 years ago
parent
commit
ef99553a7e
3 changed files with 27 additions and 4 deletions
  1. 4 1
      UI/window-basic-main.cpp
  2. 20 3
      UI/window-basic-transform.cpp
  3. 3 0
      UI/window-basic-transform.hpp

+ 4 - 1
UI/window-basic-main.cpp

@@ -8581,8 +8581,11 @@ void OBSBasic::UpdateEditMenu()
 	}
 	const bool canTransformSingle = videoCount == 1 && totalCount == 1;
 
+	OBSSceneItem curItem = GetCurrentSceneItem();
+	bool locked = obs_sceneitem_locked(curItem);
+
 	ui->actionCopySource->setEnabled(totalCount > 0);
-	ui->actionEditTransform->setEnabled(canTransformSingle);
+	ui->actionEditTransform->setEnabled(canTransformSingle && !locked);
 	ui->actionCopyTransform->setEnabled(canTransformSingle);
 	ui->actionPasteTransform->setEnabled(
 		canTransformMultiple && hasCopiedTransform && videoCount > 0);

+ 20 - 3
UI/window-basic-transform.cpp

@@ -125,6 +125,7 @@ void OBSBasicTransform::SetScene(OBSScene scene)
 	selectSignal.Disconnect();
 	deselectSignal.Disconnect();
 	removeSignal.Disconnect();
+	lockSignal.Disconnect();
 
 	if (scene) {
 		OBSSource source = obs_scene_get_source(scene);
@@ -139,6 +140,8 @@ void OBSBasicTransform::SetScene(OBSScene scene)
 				     this);
 		deselectSignal.Connect(signal, "item_deselect",
 				       OBSSceneItemDeselect, this);
+		lockSignal.Connect(signal, "item_locked", OBSSceneItemLocked,
+				   this);
 	}
 }
 
@@ -148,15 +151,20 @@ void OBSBasicTransform::SetItem(OBSSceneItem newItem)
 				  Q_ARG(OBSSceneItem, OBSSceneItem(newItem)));
 }
 
+void OBSBasicTransform::SetEnabled(bool enable)
+{
+	ui->container->setEnabled(enable);
+	ui->buttonBox->button(QDialogButtonBox::Reset)->setEnabled(enable);
+}
+
 void OBSBasicTransform::SetItemQt(OBSSceneItem newItem)
 {
 	item = newItem;
 	if (item)
 		RefreshControls();
 
-	bool enable = !!item;
-	ui->container->setEnabled(enable);
-	ui->buttonBox->button(QDialogButtonBox::Reset)->setEnabled(enable);
+	bool enable = !!item && !obs_sceneitem_locked(item);
+	SetEnabled(enable);
 }
 
 void OBSBasicTransform::OBSChannelChanged(void *param, calldata_t *data)
@@ -222,6 +230,15 @@ void OBSBasicTransform::OBSSceneItemDeselect(void *param, calldata_t *data)
 	}
 }
 
+void OBSBasicTransform::OBSSceneItemLocked(void *param, calldata_t *data)
+{
+	OBSBasicTransform *window =
+		reinterpret_cast<OBSBasicTransform *>(param);
+	bool locked = calldata_bool(data, "locked");
+
+	QMetaObject::invokeMethod(window, "SetEnabled", Q_ARG(bool, !locked));
+}
+
 static const uint32_t listToAlign[] = {OBS_ALIGN_TOP | OBS_ALIGN_LEFT,
 				       OBS_ALIGN_TOP,
 				       OBS_ALIGN_TOP | OBS_ALIGN_RIGHT,

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

@@ -21,6 +21,7 @@ private:
 	OBSSignal removeSignal;
 	OBSSignal selectSignal;
 	OBSSignal deselectSignal;
+	OBSSignal lockSignal;
 
 	std::string undo_data;
 
@@ -45,6 +46,7 @@ private:
 	static void OBSSceneItemRemoved(void *param, calldata_t *data);
 	static void OBSSceneItemSelect(void *param, calldata_t *data);
 	static void OBSSceneItemDeselect(void *param, calldata_t *data);
+	static void OBSSceneItemLocked(void *param, calldata_t *data);
 
 private slots:
 	void RefreshControls();
@@ -52,6 +54,7 @@ private slots:
 	void OnBoundsType(int index);
 	void OnControlChanged();
 	void OnCropChanged();
+	void SetEnabled(bool enable);
 
 public:
 	OBSBasicTransform(OBSSceneItem item, OBSBasic *parent);