diff options
-rw-r--r-- | source/blender/editors/include/UI_interface.h | 2 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_templates.c | 16 | ||||
-rw-r--r-- | source/blender/editors/space_node/drawnode.c | 45 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_draw.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_intern.h | 2 | ||||
-rw-r--r-- | source/blender/makesrna/RNA_access.h | 1 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_nodetree.c | 41 |
7 files changed, 55 insertions, 54 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 0b7499b947a..5344c1a617f 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -642,6 +642,8 @@ void uiTemplateHeader(uiLayout *layout, struct bContext *C, int menus); void uiTemplateDopeSheetFilter(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr); void uiTemplateID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop); +void uiTemplateIDBrowse(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, + char *newop, char *openop, char *unlinkop); void uiTemplateIDPreview(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, int rows, int cols); void uiTemplateAnyID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 106875e3907..e00cd8986e0 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -446,12 +446,11 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str uiBlockEndAlign(block); } -static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, int previews, int prv_rows, int prv_cols) +static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, int flag, int prv_rows, int prv_cols) { TemplateID *template; PropertyRNA *prop; StructRNA *type; - int flag; prop= RNA_struct_find_property(ptr, propname); @@ -466,14 +465,10 @@ static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char template->prv_rows = prv_rows; template->prv_cols = prv_cols; - flag= UI_ID_BROWSE|UI_ID_RENAME|UI_ID_DELETE; - if(newop) flag |= UI_ID_ADD_NEW; if(openop) flag |= UI_ID_OPEN; - if(previews) - flag |= UI_ID_PREVIEWS; type= RNA_property_pointer_type(ptr, prop); template->idlb= wich_libbase(CTX_data_main(C), RNA_type_to_ID_code(type)); @@ -492,12 +487,17 @@ static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char void uiTemplateID(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop) { - ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, 0, 0, 0); + ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_DELETE, 0, 0); +} + +void uiTemplateIDBrowse(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop) +{ + ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, UI_ID_BROWSE|UI_ID_RENAME, 0, 0); } void uiTemplateIDPreview(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, int rows, int cols) { - ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, 1, rows, cols); + ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_DELETE|UI_ID_PREVIEWS, rows, cols); } /************************ ID Chooser Template ***************************/ diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 7f8bf2618a4..5c5e316663c 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -94,54 +94,13 @@ #include "node_intern.h" -/* ****************** GENERAL CALLBACKS FOR NODES ***************** */ - -#if 0 -/* XXX not used yet, make compiler happy :) */ -static void node_group_alone_cb(bContext *C, void *node_v, void *unused_v) -{ - bNode *node= node_v; - - nodeCopyGroup(node); - - // allqueue(REDRAWNODE, 0); -} /* ****************** BUTTON CALLBACKS FOR ALL TREES ***************** */ -static void node_buts_group(uiLayout *layout, bContext *C, PointerRNA *ptr) +void node_buts_group(uiLayout *layout, bContext *C, PointerRNA *ptr) { - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - rctf *butr= &node->butr; - - if(node->id) { - uiBut *bt; - short width; - - uiBlockBeginAlign(block); - - /* name button */ - width= (short)(butr->xmax-butr->xmin - (node->id->us>1?19.0f:0.0f)); - bt= uiDefBut(block, TEX, B_NOP, "NT:", - (short)butr->xmin, (short)butr->ymin, width, 19, - node->id->name+2, 0.0, 19.0, 0, 0, "NodeTree name"); - uiButSetFunc(bt, node_ID_title_cb, node, NULL); - - /* user amount */ - if(node->id->us>1) { - char str1[32]; - sprintf(str1, "%d", node->id->us); - bt= uiDefBut(block, BUT, B_NOP, str1, - (short)butr->xmax-19, (short)butr->ymin, 19, 19, - NULL, 0, 0, 0, 0, "Displays number of users."); - uiButSetFunc(bt, node_group_alone_cb, node, NULL); - } - - uiBlockEndAlign(block); - } + uiTemplateIDBrowse(layout, C, ptr, "nodetree", NULL, NULL, ""); } -#endif static void node_buts_value(uiLayout *layout, bContext *C, PointerRNA *ptr) { diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index 14c127cb7e5..ad897e1dd6e 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -265,7 +265,7 @@ static void node_update(const bContext *C, bNodeTree *ntree, bNode *node) /* XXX ugly hack, typeinfo for group is generated */ if(node->type == NODE_GROUP) - ; // XXX node->typeinfo->uifunc= node_buts_group; + node->typeinfo->uifunc= node_buts_group; /* buttons rect? */ if((node->flag & NODE_OPTIONS) && node->typeinfo->uifunc) { diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h index 1ff2f7d7128..8f6d2c81026 100644 --- a/source/blender/editors/space_node/node_intern.h +++ b/source/blender/editors/space_node/node_intern.h @@ -69,6 +69,8 @@ void node_draw_link_bezier(View2D *v2d, SpaceNode *snode, bNodeLink *link, int t int node_link_bezier_points(View2D *v2d, SpaceNode *snode, bNodeLink *link, float coord_array[][2], int resol); void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode, int color_manage); +void node_buts_group(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr); + /* node_edit.c */ void node_tree_from_ID(ID *id, bNodeTree **ntree, bNodeTree **edittree, int *treetype); void snode_handle_recalc(bContext *C, SpaceNode *snode); diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index efd42878087..ba2d272309f 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -317,6 +317,7 @@ extern StructRNA RNA_NearSensor; extern StructRNA RNA_NlaStrip; extern StructRNA RNA_NlaTrack; extern StructRNA RNA_Node; +extern StructRNA RNA_NodeGroup; extern StructRNA RNA_NodeSocket; extern StructRNA RNA_NodeTree; extern StructRNA RNA_NoiseTexture; diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 9922f099cd5..646a7419d68 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -63,6 +63,9 @@ static StructRNA *rna_Node_refine(struct PointerRNA *ptr) #undef DefNode + case NODE_GROUP: + return &RNA_NodeGroup; + default: return &RNA_Node; } @@ -177,6 +180,16 @@ static void rna_Node_update(Main *bmain, Scene *scene, PointerRNA *ptr) node_update(bmain, scene, ntree, node); } +static void rna_NodeGroup_update(Main *bmain, Scene *scene, PointerRNA *ptr) +{ + bNodeTree *ntree= (bNodeTree*)ptr->id.data; + bNode *node= (bNode*)ptr->data; + + nodeVerifyGroup((bNodeTree *)node->id); + + node_update(bmain, scene, ntree, node); +} + static void rna_Node_update_name(Main *bmain, Scene *scene, PointerRNA *ptr) { bNodeTree *ntree= (bNodeTree*)ptr->id.data; @@ -474,7 +487,7 @@ static EnumPropertyItem node_filter_items[] = { enum { - Category_NoCategory, + Category_GroupNode, Category_ShaderNode, Category_CompositorNode, Category_TextureNode @@ -521,6 +534,8 @@ static void init(void) #undef DefNode #undef Str + + reg_node(NODE_GROUP, Category_GroupNode, "GROUP", "NodeGroup", "Node", "Group", ""); } static StructRNA* def_node(BlenderRNA *brna, int node_id) @@ -567,6 +582,13 @@ static EnumPropertyItem* alloc_node_type_items(int category) item++; + item->value = NODE_GROUP; + item->identifier = "GROUP"; + item->name = "Group"; + item->description = ""; + + item++; + memset(item, 0, sizeof(EnumPropertyItem)); return items; @@ -575,6 +597,19 @@ static EnumPropertyItem* alloc_node_type_items(int category) /* -- Common nodes ---------------------------------------------------------- */ +static void def_group(StructRNA *srna) +{ + PropertyRNA *prop; + + prop = RNA_def_property(srna, "nodetree", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "id"); + RNA_def_property_struct_type(prop, "NodeTree"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Node Tree", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_NodeGroup_update"); +} + + static void def_math(StructRNA *srna) { PropertyRNA *prop; @@ -2106,13 +2141,15 @@ void RNA_def_nodetree(BlenderRNA *brna) rna_def_shader_node(brna); rna_def_compositor_node(brna); rna_def_texture_node(brna); - + #define DefNode(Category, ID, DefFunc, EnumName, StructName, UIName, UIDesc) \ define_specific_node(brna, ID, DefFunc); #include "rna_nodetree_types.h" #undef DefNode + + define_specific_node(brna, NODE_GROUP, def_group); } #endif |