[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