UI: Use std::bind for visibility undo/redo action
This is better and slightly more optimal code over what it was before.
This commit is contained in:
parent
20bbc9794d
commit
0d482be14a
@ -130,34 +130,35 @@ SourceTreeItem::SourceTreeItem(SourceTree *tree_, OBSSceneItem sceneitem_)
|
|||||||
|
|
||||||
/* --------------------------------------------------------- */
|
/* --------------------------------------------------------- */
|
||||||
|
|
||||||
auto setItemVisible = [this](bool checked) {
|
auto setItemVisible = [this](bool val) {
|
||||||
obs_scene_t *scene = obs_sceneitem_get_scene(sceneitem);
|
obs_scene_t *scene = obs_sceneitem_get_scene(sceneitem);
|
||||||
obs_source_t *scenesource = obs_scene_get_source(scene);
|
obs_source_t *scenesource = obs_scene_get_source(scene);
|
||||||
int64_t id = obs_sceneitem_get_id(sceneitem);
|
int64_t id = obs_sceneitem_get_id(sceneitem);
|
||||||
std::string name = obs_source_get_name(scenesource);
|
const char *name = obs_source_get_name(scenesource);
|
||||||
obs_source_t *source = obs_sceneitem_get_source(sceneitem);
|
obs_source_t *source = obs_sceneitem_get_source(sceneitem);
|
||||||
|
|
||||||
auto undo_redo = [id, name](const std::string &val) {
|
auto undo_redo = [](const std::string &name, int64_t id,
|
||||||
bool vis = val[0] == '1';
|
bool val) {
|
||||||
obs_scene_t *s = obs_get_scene_by_name(name.c_str());
|
obs_scene_t *s = obs_get_scene_by_name(name.c_str());
|
||||||
obs_sceneitem_t *si =
|
obs_sceneitem_t *si =
|
||||||
obs_scene_find_sceneitem_by_id(s, id);
|
obs_scene_find_sceneitem_by_id(s, id);
|
||||||
if (si)
|
if (si)
|
||||||
obs_sceneitem_set_visible(si, vis);
|
obs_sceneitem_set_visible(si, val);
|
||||||
obs_scene_release(s);
|
obs_scene_release(s);
|
||||||
};
|
};
|
||||||
|
|
||||||
QString str = QTStr(checked ? "Undo.ShowSceneItem"
|
QString str = QTStr(val ? "Undo.ShowSceneItem"
|
||||||
: "Undo.HideSceneItem");
|
: "Undo.HideSceneItem");
|
||||||
str = str.arg(obs_source_get_name(source), name.c_str());
|
|
||||||
|
|
||||||
OBSBasic *main = OBSBasic::Get();
|
OBSBasic *main = OBSBasic::Get();
|
||||||
main->undo_s.add_action(str, undo_redo, undo_redo,
|
main->undo_s.add_action(
|
||||||
checked ? "0" : "1",
|
str.arg(obs_source_get_name(source), name),
|
||||||
checked ? "1" : "0");
|
std::bind(undo_redo, std::placeholders::_1, id, !val),
|
||||||
|
std::bind(undo_redo, std::placeholders::_1, id, val),
|
||||||
|
name, name);
|
||||||
|
|
||||||
SignalBlocker sourcesSignalBlocker(this);
|
SignalBlocker sourcesSignalBlocker(this);
|
||||||
obs_sceneitem_set_visible(sceneitem, checked);
|
obs_sceneitem_set_visible(sceneitem, val);
|
||||||
};
|
};
|
||||||
|
|
||||||
auto setItemLocked = [this](bool checked) {
|
auto setItemLocked = [this](bool checked) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user