UI: Make select/deselect signals work w/ group items

This commit is contained in:
Clayton Groeneveld
2020-05-19 06:25:06 -05:00
parent efa9ee0f3d
commit 2fe749fc84
4 changed files with 20 additions and 49 deletions

View File

@@ -151,6 +151,7 @@ void SourceTreeItem::DisconnectSignals()
{
sceneRemoveSignal.Disconnect();
itemRemoveSignal.Disconnect();
selectSignal.Disconnect();
deselectSignal.Disconnect();
visibleSignal.Disconnect();
lockedSignal.Disconnect();
@@ -212,6 +213,16 @@ void SourceTreeItem::ReconnectSignals()
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) {
SourceTreeItem *this_ =
reinterpret_cast<SourceTreeItem *>(data);
@@ -236,6 +247,8 @@ void SourceTreeItem::ReconnectSignals()
itemRemoveSignal.Connect(signal, "item_remove", removeItem, this);
visibleSignal.Connect(signal, "item_visible", itemVisible, 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)) {
obs_source_t *source = obs_sceneitem_get_source(sceneitem);
@@ -245,10 +258,6 @@ void SourceTreeItem::ReconnectSignals()
this);
}
if (scene != GetCurrentScene())
deselectSignal.Connect(signal, "item_deselect", itemDeselect,
this);
/* --------------------------------------------------------- */
auto renamed = [](void *data, calldata_t *cd) {
@@ -516,6 +525,11 @@ void SourceTreeItem::ExpandClicked(bool checked)
tree->GetStm()->CollapseGroup(sceneitem);
}
void SourceTreeItem::Select()
{
tree->SelectItem(sceneitem, true);
}
void SourceTreeItem::Deselect()
{
tree->SelectItem(sceneitem, false);