Merge pull request #2955 from cg2121/group-signals
UI: Make select/deselect signals work w/ group itemsmaster
commit
a9c65aeabf
|
@ -151,6 +151,7 @@ void SourceTreeItem::DisconnectSignals()
|
||||||
{
|
{
|
||||||
sceneRemoveSignal.Disconnect();
|
sceneRemoveSignal.Disconnect();
|
||||||
itemRemoveSignal.Disconnect();
|
itemRemoveSignal.Disconnect();
|
||||||
|
selectSignal.Disconnect();
|
||||||
deselectSignal.Disconnect();
|
deselectSignal.Disconnect();
|
||||||
visibleSignal.Disconnect();
|
visibleSignal.Disconnect();
|
||||||
lockedSignal.Disconnect();
|
lockedSignal.Disconnect();
|
||||||
|
@ -212,6 +213,16 @@ void SourceTreeItem::ReconnectSignals()
|
||||||
Q_ARG(bool, locked));
|
Q_ARG(bool, locked));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto itemSelect = [](void *data, calldata_t *cd) {
|
||||||
|
SourceTreeItem *this_ =
|
||||||
|
reinterpret_cast<SourceTreeItem *>(data);
|
||||||
|
obs_sceneitem_t *curItem =
|
||||||
|
(obs_sceneitem_t *)calldata_ptr(cd, "item");
|
||||||
|
|
||||||
|
if (curItem == this_->sceneitem)
|
||||||
|
QMetaObject::invokeMethod(this_, "Select");
|
||||||
|
};
|
||||||
|
|
||||||
auto itemDeselect = [](void *data, calldata_t *cd) {
|
auto itemDeselect = [](void *data, calldata_t *cd) {
|
||||||
SourceTreeItem *this_ =
|
SourceTreeItem *this_ =
|
||||||
reinterpret_cast<SourceTreeItem *>(data);
|
reinterpret_cast<SourceTreeItem *>(data);
|
||||||
|
@ -236,6 +247,8 @@ void SourceTreeItem::ReconnectSignals()
|
||||||
itemRemoveSignal.Connect(signal, "item_remove", removeItem, this);
|
itemRemoveSignal.Connect(signal, "item_remove", removeItem, this);
|
||||||
visibleSignal.Connect(signal, "item_visible", itemVisible, this);
|
visibleSignal.Connect(signal, "item_visible", itemVisible, this);
|
||||||
lockedSignal.Connect(signal, "item_locked", itemLocked, this);
|
lockedSignal.Connect(signal, "item_locked", itemLocked, this);
|
||||||
|
selectSignal.Connect(signal, "item_select", itemSelect, this);
|
||||||
|
deselectSignal.Connect(signal, "item_deselect", itemDeselect, this);
|
||||||
|
|
||||||
if (obs_sceneitem_is_group(sceneitem)) {
|
if (obs_sceneitem_is_group(sceneitem)) {
|
||||||
obs_source_t *source = obs_sceneitem_get_source(sceneitem);
|
obs_source_t *source = obs_sceneitem_get_source(sceneitem);
|
||||||
|
@ -245,10 +258,6 @@ void SourceTreeItem::ReconnectSignals()
|
||||||
this);
|
this);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scene != GetCurrentScene())
|
|
||||||
deselectSignal.Connect(signal, "item_deselect", itemDeselect,
|
|
||||||
this);
|
|
||||||
|
|
||||||
/* --------------------------------------------------------- */
|
/* --------------------------------------------------------- */
|
||||||
|
|
||||||
auto renamed = [](void *data, calldata_t *cd) {
|
auto renamed = [](void *data, calldata_t *cd) {
|
||||||
|
@ -516,6 +525,11 @@ void SourceTreeItem::ExpandClicked(bool checked)
|
||||||
tree->GetStm()->CollapseGroup(sceneitem);
|
tree->GetStm()->CollapseGroup(sceneitem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SourceTreeItem::Select()
|
||||||
|
{
|
||||||
|
tree->SelectItem(sceneitem, true);
|
||||||
|
}
|
||||||
|
|
||||||
void SourceTreeItem::Deselect()
|
void SourceTreeItem::Deselect()
|
||||||
{
|
{
|
||||||
tree->SelectItem(sceneitem, false);
|
tree->SelectItem(sceneitem, false);
|
||||||
|
|
|
@ -70,6 +70,7 @@ private:
|
||||||
OBSSignal sceneRemoveSignal;
|
OBSSignal sceneRemoveSignal;
|
||||||
OBSSignal itemRemoveSignal;
|
OBSSignal itemRemoveSignal;
|
||||||
OBSSignal groupReorderSignal;
|
OBSSignal groupReorderSignal;
|
||||||
|
OBSSignal selectSignal;
|
||||||
OBSSignal deselectSignal;
|
OBSSignal deselectSignal;
|
||||||
OBSSignal visibleSignal;
|
OBSSignal visibleSignal;
|
||||||
OBSSignal lockedSignal;
|
OBSSignal lockedSignal;
|
||||||
|
@ -90,6 +91,7 @@ private slots:
|
||||||
|
|
||||||
void ExpandClicked(bool checked);
|
void ExpandClicked(bool checked);
|
||||||
|
|
||||||
|
void Select();
|
||||||
void Deselect();
|
void Deselect();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2677,11 +2677,6 @@ void OBSBasic::AddScene(OBSSource source)
|
||||||
container.handlers.assign({
|
container.handlers.assign({
|
||||||
std::make_shared<OBSSignal>(handler, "item_add",
|
std::make_shared<OBSSignal>(handler, "item_add",
|
||||||
OBSBasic::SceneItemAdded, this),
|
OBSBasic::SceneItemAdded, this),
|
||||||
std::make_shared<OBSSignal>(handler, "item_select",
|
|
||||||
OBSBasic::SceneItemSelected, this),
|
|
||||||
std::make_shared<OBSSignal>(handler, "item_deselect",
|
|
||||||
OBSBasic::SceneItemDeselected,
|
|
||||||
this),
|
|
||||||
std::make_shared<OBSSignal>(handler, "reorder",
|
std::make_shared<OBSSignal>(handler, "reorder",
|
||||||
OBSBasic::SceneReordered, this),
|
OBSBasic::SceneReordered, this),
|
||||||
std::make_shared<OBSSignal>(handler, "refresh",
|
std::make_shared<OBSSignal>(handler, "refresh",
|
||||||
|
@ -2851,16 +2846,6 @@ void OBSBasic::RenameSources(OBSSource source, QString newName,
|
||||||
OBSProjector::UpdateMultiviewProjectors();
|
OBSProjector::UpdateMultiviewProjectors();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OBSBasic::SelectSceneItem(OBSScene scene, OBSSceneItem item, bool select)
|
|
||||||
{
|
|
||||||
SignalBlocker sourcesSignalBlocker(ui->sources);
|
|
||||||
|
|
||||||
if (scene != GetCurrentScene() || ignoreSelectionUpdate)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ui->sources->SelectItem(item, select);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool SourceMixerHidden(obs_source_t *source)
|
static inline bool SourceMixerHidden(obs_source_t *source)
|
||||||
{
|
{
|
||||||
obs_data_t *priv_settings = obs_source_get_private_settings(source);
|
obs_data_t *priv_settings = obs_source_get_private_settings(source);
|
||||||
|
@ -3463,31 +3448,6 @@ void OBSBasic::SceneItemAdded(void *data, calldata_t *params)
|
||||||
Q_ARG(OBSSceneItem, OBSSceneItem(item)));
|
Q_ARG(OBSSceneItem, OBSSceneItem(item)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void OBSBasic::SceneItemSelected(void *data, calldata_t *params)
|
|
||||||
{
|
|
||||||
OBSBasic *window = static_cast<OBSBasic *>(data);
|
|
||||||
|
|
||||||
obs_scene_t *scene = (obs_scene_t *)calldata_ptr(params, "scene");
|
|
||||||
obs_sceneitem_t *item = (obs_sceneitem_t *)calldata_ptr(params, "item");
|
|
||||||
|
|
||||||
QMetaObject::invokeMethod(window, "SelectSceneItem",
|
|
||||||
Q_ARG(OBSScene, scene),
|
|
||||||
Q_ARG(OBSSceneItem, item), Q_ARG(bool, true));
|
|
||||||
}
|
|
||||||
|
|
||||||
void OBSBasic::SceneItemDeselected(void *data, calldata_t *params)
|
|
||||||
{
|
|
||||||
OBSBasic *window = static_cast<OBSBasic *>(data);
|
|
||||||
|
|
||||||
obs_scene_t *scene = (obs_scene_t *)calldata_ptr(params, "scene");
|
|
||||||
obs_sceneitem_t *item = (obs_sceneitem_t *)calldata_ptr(params, "item");
|
|
||||||
|
|
||||||
QMetaObject::invokeMethod(window, "SelectSceneItem",
|
|
||||||
Q_ARG(OBSScene, scene),
|
|
||||||
Q_ARG(OBSSceneItem, item),
|
|
||||||
Q_ARG(bool, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
void OBSBasic::SourceCreated(void *data, calldata_t *params)
|
void OBSBasic::SourceCreated(void *data, calldata_t *params)
|
||||||
{
|
{
|
||||||
obs_source_t *source = (obs_source_t *)calldata_ptr(params, "source");
|
obs_source_t *source = (obs_source_t *)calldata_ptr(params, "source");
|
||||||
|
|
|
@ -232,7 +232,6 @@ private:
|
||||||
gs_vertbuffer_t *circle = nullptr;
|
gs_vertbuffer_t *circle = nullptr;
|
||||||
|
|
||||||
bool sceneChanging = false;
|
bool sceneChanging = false;
|
||||||
bool ignoreSelectionUpdate = false;
|
|
||||||
|
|
||||||
int previewX = 0, previewY = 0;
|
int previewX = 0, previewY = 0;
|
||||||
int previewCX = 0, previewCY = 0;
|
int previewCX = 0, previewCY = 0;
|
||||||
|
@ -595,8 +594,6 @@ private slots:
|
||||||
void RemoveScene(OBSSource source);
|
void RemoveScene(OBSSource source);
|
||||||
void RenameSources(OBSSource source, QString newName, QString prevName);
|
void RenameSources(OBSSource source, QString newName, QString prevName);
|
||||||
|
|
||||||
void SelectSceneItem(OBSScene scene, OBSSceneItem item, bool select);
|
|
||||||
|
|
||||||
void ActivateAudioSource(OBSSource source);
|
void ActivateAudioSource(OBSSource source);
|
||||||
void DeactivateAudioSource(OBSSource source);
|
void DeactivateAudioSource(OBSSource source);
|
||||||
|
|
||||||
|
@ -693,8 +690,6 @@ private:
|
||||||
static void SceneReordered(void *data, calldata_t *params);
|
static void SceneReordered(void *data, calldata_t *params);
|
||||||
static void SceneRefreshed(void *data, calldata_t *params);
|
static void SceneRefreshed(void *data, calldata_t *params);
|
||||||
static void SceneItemAdded(void *data, calldata_t *params);
|
static void SceneItemAdded(void *data, calldata_t *params);
|
||||||
static void SceneItemSelected(void *data, calldata_t *params);
|
|
||||||
static void SceneItemDeselected(void *data, calldata_t *params);
|
|
||||||
static void SourceCreated(void *data, calldata_t *params);
|
static void SourceCreated(void *data, calldata_t *params);
|
||||||
static void SourceRemoved(void *data, calldata_t *params);
|
static void SourceRemoved(void *data, calldata_t *params);
|
||||||
static void SourceActivated(void *data, calldata_t *params);
|
static void SourceActivated(void *data, calldata_t *params);
|
||||||
|
|
Loading…
Reference in New Issue