[Bf-blender-cvs] [9eb238db2d1] temp-geometry-nodes-expandable-geometry-socket-prototype: add remove button

Jacques Lucke noreply at git.blender.org
Fri Aug 6 13:29:05 CEST 2021


Commit: 9eb238db2d1c2f3d0de7c65b06e5abd71f99d178
Author: Jacques Lucke
Date:   Fri Aug 6 11:45:08 2021 +0200
Branches: temp-geometry-nodes-expandable-geometry-socket-prototype
https://developer.blender.org/rB9eb238db2d1c2f3d0de7c65b06e5abd71f99d178

add remove button

===================================================================

M	source/blender/editors/space_node/node_edit.cc
M	source/blender/editors/space_node/node_intern.h
M	source/blender/editors/space_node/node_ops.c
M	source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc

===================================================================

diff --git a/source/blender/editors/space_node/node_edit.cc b/source/blender/editors/space_node/node_edit.cc
index 7572dbcace1..25786ba503a 100644
--- a/source/blender/editors/space_node/node_edit.cc
+++ b/source/blender/editors/space_node/node_edit.cc
@@ -3154,3 +3154,47 @@ void NODE_OT_geometry_expander_output_add(wmOperatorType *ot)
   RNA_def_enum_funcs(prop, node_geometry_expander_output_add_items);
   ot->prop = prop;
 }
+
+static int node_geometry_expander_output_remove_exec(bContext *C, wmOperator *op)
+{
+  SpaceNode *snode = CTX_wm_space_node(C);
+  bNodeTree *ntree = snode->edittree;
+  PointerRNA ptr = CTX_data_pointer_get(C, "node");
+  bNode *node = (bNode *)ptr.data;
+  if (node == nullptr) {
+    return OPERATOR_CANCELLED;
+  }
+  NodeGeometryGeometryExpander *storage = (NodeGeometryGeometryExpander *)node->storage;
+
+  const int output_index = RNA_int_get(op->ptr, "output_index");
+  GeometryExpanderOutput *expander_output = (GeometryExpanderOutput *)BLI_findlink(
+      &storage->outputs, output_index);
+  BLI_remlink(&storage->outputs, expander_output);
+  MEM_freeN(expander_output);
+
+  nodeUpdate(ntree, node);
+  ntreeUpdateTree(CTX_data_main(C), ntree);
+
+  snode_notify(C, snode);
+  snode_dag_update(C, snode);
+
+  return OPERATOR_FINISHED;
+}
+
+void NODE_OT_geometry_expander_output_remove(wmOperatorType *ot)
+{
+  /* identifiers */
+  ot->name = "Remove Geometry Expander Output";
+  ot->description = "Remove geometry expander output";
+  ot->idname = "NODE_OT_geometry_expander_output_remove";
+
+  /* callbacks */
+  ot->exec = node_geometry_expander_output_remove_exec;
+  ot->poll = ED_operator_node_editable;
+
+  /* flags */
+  ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+  RNA_def_int(
+      ot->srna, "output_index", 0, 0, 1000, "Output Index", "Output index to remove", 0, 1000);
+}
diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h
index 73520bf3262..c61a87e7b78 100644
--- a/source/blender/editors/space_node/node_intern.h
+++ b/source/blender/editors/space_node/node_intern.h
@@ -313,6 +313,7 @@ void NODE_OT_cryptomatte_layer_add(struct wmOperatorType *ot);
 void NODE_OT_cryptomatte_layer_remove(struct wmOperatorType *ot);
 
 void NODE_OT_geometry_expander_output_add(struct wmOperatorType *ot);
+void NODE_OT_geometry_expander_output_remove(struct wmOperatorType *ot);
 
 /* node_geometry_attribute_search.cc */
 void node_geometry_add_attribute_search_button(const struct bContext *C,
diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c
index ffe8e9469da..f36e1cafb13 100644
--- a/source/blender/editors/space_node/node_ops.c
+++ b/source/blender/editors/space_node/node_ops.c
@@ -126,6 +126,7 @@ void node_operatortypes(void)
   WM_operatortype_append(NODE_OT_cryptomatte_layer_remove);
 
   WM_operatortype_append(NODE_OT_geometry_expander_output_add);
+  WM_operatortype_append(NODE_OT_geometry_expander_output_remove);
 }
 
 void ED_operatormacros_node(void)
diff --git a/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc b/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
index b945fb37b29..bd3157f6136 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
@@ -63,12 +63,15 @@ static bool geo_node_geometry_expander_socket_layout(const bContext *UNUSED(C),
   uiLayout *row = uiLayoutRow(layout, true);
   uiLayout *split = uiLayoutSplit(row, 0.7, false);
   uiItemL(split, expander_output->display_name_cache, ICON_NONE);
+  uiLayout *subrow = uiLayoutRow(split, true);
   if (expander_output->is_outdated) {
-    uiItemL(split, "", ICON_ERROR);
+    uiItemL(subrow, "", ICON_ERROR);
   }
   else {
-    uiItemR(split, &expander_output_ptr, "array_source", 0, "", ICON_NONE);
+    uiItemR(subrow, &expander_output_ptr, "array_source", 0, "", ICON_NONE);
   }
+  uiItemIntO(
+      subrow, "", ICON_X, "node.geometry_expander_output_remove", "output_index", socket_index);
 
   return true;
 }



More information about the Bf-blender-cvs mailing list