Emit signals for GraphEdit multi-node selection and unselection

Emit `node_selected` and `node_deselected` signals where appropriate
when selecting or unselecting multiple GraphEdit nodes at once.

(cherry picked from commit c1d5c7727c)
This commit is contained in:
Maganty Rushyendra 2020-07-09 17:47:22 +08:00 committed by Rémi Verschelde
parent ac3ff49ae5
commit e76a9a51df
1 changed files with 23 additions and 4 deletions

View File

@ -849,10 +849,22 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) {
r.size *= zoom; r.size *= zoom;
bool in_box = r.intersects(box_selecting_rect); bool in_box = r.intersects(box_selecting_rect);
if (in_box) if (in_box) {
if (!gn->is_selected() && box_selection_mode_additive) {
emit_signal("node_selected", gn);
} else if (gn->is_selected() && !box_selection_mode_additive) {
emit_signal("node_unselected", gn);
}
gn->set_selected(box_selection_mode_additive); gn->set_selected(box_selection_mode_additive);
else } else {
gn->set_selected(previus_selected.find(gn) != NULL); bool select = (previus_selected.find(gn) != NULL);
if (gn->is_selected() && !select) {
emit_signal("node_unselected", gn);
} else if (!gn->is_selected() && select) {
emit_signal("node_selected", gn);
}
gn->set_selected(select);
}
} }
top_layer->update(); top_layer->update();
@ -870,7 +882,13 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) {
if (!gn) if (!gn)
continue; continue;
gn->set_selected(previus_selected.find(gn) != NULL); bool select = (previus_selected.find(gn) != NULL);
if (gn->is_selected() && !select) {
emit_signal("node_unselected", gn);
} else if (!gn->is_selected() && select) {
emit_signal("node_selected", gn);
}
gn->set_selected(select);
} }
top_layer->update(); top_layer->update();
} else { } else {
@ -893,6 +911,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) {
Rect2 r = gn->get_rect(); Rect2 r = gn->get_rect();
r.size *= zoom; r.size *= zoom;
if (r.has_point(b->get_position())) { if (r.has_point(b->get_position())) {
emit_signal("node_unselected", gn);
gn->set_selected(false); gn->set_selected(false);
} }
} }