Browse Source

Update GraphEdit when GraphNode's slot is updated

Kongfa Waroros 4 years ago
parent
commit
fe6c8d48e6
4 changed files with 22 additions and 0 deletions
  1. 7 0
      doc/classes/GraphNode.xml
  2. 11 0
      scene/gui/graph_edit.cpp
  3. 1 0
      scene/gui/graph_edit.h
  4. 3 0
      scene/gui/graph_node.cpp

+ 7 - 0
doc/classes/GraphNode.xml

@@ -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.

+ 11 - 0
scene/gui/graph_edit.cpp

@@ -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.

+ 1 - 0
scene/gui/graph_edit.h

@@ -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);

+ 3 - 0
scene/gui/graph_node.cpp

@@ -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"));