Update GraphEdit when GraphNode's slot is updated

This commit is contained in:
Kongfa Waroros 2021-02-10 21:18:34 +07:00
parent b1c60c757f
commit fe6c8d48e6
4 changed files with 22 additions and 0 deletions

View file

@ -260,6 +260,13 @@
Emitted when the GraphNode is moved. Emitted when the GraphNode is moved.
</description> </description>
</signal> </signal>
<signal name="slot_updated">
<argument index="0" name="idx" type="int">
</argument>
<description>
Emitted when any GraphNode's slot is updated.
</description>
</signal>
<signal name="raise_request"> <signal name="raise_request">
<description> <description>
Emitted when the GraphNode is requested to be displayed over other ones. Happens on focusing (clicking into) the GraphNode. Emitted when the GraphNode is requested to be displayed over other ones. Happens on focusing (clicking into) the GraphNode.

View file

@ -385,6 +385,15 @@ void GraphEdit::_graph_node_moved(Node *p_gn) {
connections_layer->update(); connections_layer->update();
} }
void GraphEdit::_graph_node_slot_updated(int p_index, Node *p_gn) {
GraphNode *gn = Object::cast_to<GraphNode>(p_gn);
ERR_FAIL_COND(!gn);
top_layer->update();
minimap->update();
update();
connections_layer->update();
}
void GraphEdit::add_child_notify(Node *p_child) { void GraphEdit::add_child_notify(Node *p_child) {
Control::add_child_notify(p_child); Control::add_child_notify(p_child);
@ -394,6 +403,7 @@ void GraphEdit::add_child_notify(Node *p_child) {
if (gn) { if (gn) {
gn->set_scale(Vector2(zoom, zoom)); gn->set_scale(Vector2(zoom, zoom));
gn->connect("position_offset_changed", callable_mp(this, &GraphEdit::_graph_node_moved), varray(gn)); gn->connect("position_offset_changed", callable_mp(this, &GraphEdit::_graph_node_moved), varray(gn));
gn->connect("slot_updated", callable_mp(this, &GraphEdit::_graph_node_slot_updated), varray(gn));
gn->connect("raise_request", callable_mp(this, &GraphEdit::_graph_node_raised), varray(gn)); gn->connect("raise_request", callable_mp(this, &GraphEdit::_graph_node_raised), varray(gn));
gn->connect("item_rect_changed", callable_mp((CanvasItem *)connections_layer, &CanvasItem::update)); gn->connect("item_rect_changed", callable_mp((CanvasItem *)connections_layer, &CanvasItem::update));
gn->connect("item_rect_changed", callable_mp((CanvasItem *)minimap, &GraphEditMinimap::update)); gn->connect("item_rect_changed", callable_mp((CanvasItem *)minimap, &GraphEditMinimap::update));
@ -419,6 +429,7 @@ void GraphEdit::remove_child_notify(Node *p_child) {
GraphNode *gn = Object::cast_to<GraphNode>(p_child); GraphNode *gn = Object::cast_to<GraphNode>(p_child);
if (gn) { if (gn) {
gn->disconnect("position_offset_changed", callable_mp(this, &GraphEdit::_graph_node_moved)); gn->disconnect("position_offset_changed", callable_mp(this, &GraphEdit::_graph_node_moved));
gn->disconnect("slot_updated", callable_mp(this, &GraphEdit::_graph_node_slot_updated));
gn->disconnect("raise_request", callable_mp(this, &GraphEdit::_graph_node_raised)); gn->disconnect("raise_request", callable_mp(this, &GraphEdit::_graph_node_raised));
// In case of the whole GraphEdit being destroyed these references can already be freed. // In case of the whole GraphEdit being destroyed these references can already be freed.

View file

@ -167,6 +167,7 @@ private:
void _graph_node_raised(Node *p_gn); void _graph_node_raised(Node *p_gn);
void _graph_node_moved(Node *p_gn); void _graph_node_moved(Node *p_gn);
void _graph_node_slot_updated(int p_index, Node *p_gn);
void _update_scroll(); void _update_scroll();
void _scroll_moved(double); void _scroll_moved(double);

View file

@ -384,6 +384,8 @@ void GraphNode::set_slot(int p_idx, bool p_enable_left, int p_type_left, const C
slot_info[p_idx] = s; slot_info[p_idx] = s;
update(); update();
connpos_dirty = true; connpos_dirty = true;
emit_signal("slot_updated", p_idx);
} }
void GraphNode::clear_slot(int p_idx) { void GraphNode::clear_slot(int p_idx) {
@ -838,6 +840,7 @@ void GraphNode::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "overlay", PROPERTY_HINT_ENUM, "Disabled,Breakpoint,Position"), "set_overlay", "get_overlay"); ADD_PROPERTY(PropertyInfo(Variant::INT, "overlay", PROPERTY_HINT_ENUM, "Disabled,Breakpoint,Position"), "set_overlay", "get_overlay");
ADD_SIGNAL(MethodInfo("position_offset_changed")); ADD_SIGNAL(MethodInfo("position_offset_changed"));
ADD_SIGNAL(MethodInfo("slot_updated", PropertyInfo(Variant::INT, "idx")));
ADD_SIGNAL(MethodInfo("dragged", PropertyInfo(Variant::VECTOR2, "from"), PropertyInfo(Variant::VECTOR2, "to"))); ADD_SIGNAL(MethodInfo("dragged", PropertyInfo(Variant::VECTOR2, "from"), PropertyInfo(Variant::VECTOR2, "to")));
ADD_SIGNAL(MethodInfo("raise_request")); ADD_SIGNAL(MethodInfo("raise_request"));
ADD_SIGNAL(MethodInfo("close_request")); ADD_SIGNAL(MethodInfo("close_request"));