Skip to content

Commit

Permalink
UI: Disable edit transform if item is locked
Browse files Browse the repository at this point in the history
The transform window was still accessible if the scene item
was locked.
  • Loading branch information
cg2121 committed Sep 9, 2023
1 parent af2136d commit c04269a
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 4 deletions.
5 changes: 4 additions & 1 deletion UI/window-basic-main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8566,8 +8566,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(hasCopiedTransform &&
videoCount > 0);
Expand Down
23 changes: 20 additions & 3 deletions UI/window-basic-transform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -139,6 +140,8 @@ void OBSBasicTransform::SetScene(OBSScene scene)
this);
deselectSignal.Connect(signal, "item_deselect",
OBSSceneItemDeselect, this);
lockSignal.Connect(signal, "item_locked",
OBSSceneItemLocked, this);
}
}

Expand All @@ -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)
Expand Down Expand Up @@ -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,
Expand Down
3 changes: 3 additions & 0 deletions UI/window-basic-transform.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class OBSBasicTransform : public QDialog {
OBSSignal removeSignal;
OBSSignal selectSignal;
OBSSignal deselectSignal;
OBSSignal lockSignal;

std::string undo_data;

Expand All @@ -45,13 +46,15 @@ class OBSBasicTransform : public QDialog {
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();
void SetItemQt(OBSSceneItem newItem);
void OnBoundsType(int index);
void OnControlChanged();
void OnCropChanged();
void SetEnabled(bool enable);

public:
OBSBasicTransform(OBSSceneItem item, OBSBasic *parent);
Expand Down

0 comments on commit c04269a

Please sign in to comment.