diff options
Diffstat (limited to 'source/blender/editors')
5 files changed, 41 insertions, 11 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 4649fb06374..c14cce28052 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -2712,7 +2712,8 @@ void uiItemPointerR_prop(uiLayout *layout, struct PointerRNA *searchptr, struct PropertyRNA *searchprop, const char *name, - int icon); + int icon, + bool results_are_suggestions); void uiItemPointerR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index 8bbf95e9e20..ad5aeb1c29f 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -1283,7 +1283,8 @@ uiBut *ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRNA *searchptr, - PropertyRNA *searchprop); + PropertyRNA *searchprop, + bool results_are_suggestions); /** * Check all buttons defined in this layout, * and set any button flagged as UI_BUT_LIST_ITEM as active/selected. diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index cbc21bd481f..ac807f06891 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -2332,7 +2332,7 @@ void uiItemFullR(uiLayout *layout, /* property with separate label */ else if (ELEM(type, PROP_ENUM, PROP_STRING, PROP_POINTER)) { but = ui_item_with_label(layout, block, name, icon, ptr, prop, index, 0, 0, w, h, flag); - but = ui_but_add_search(but, ptr, prop, NULL, NULL); + but = ui_but_add_search(but, ptr, prop, NULL, NULL, false); if (layout->redalert) { UI_but_flag_enable(but, UI_BUT_REDALERT); @@ -2700,8 +2700,12 @@ static void ui_rna_collection_search_arg_free_fn(void *ptr) MEM_freeN(ptr); } -uiBut *ui_but_add_search( - uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRNA *searchptr, PropertyRNA *searchprop) +uiBut *ui_but_add_search(uiBut *but, + PointerRNA *ptr, + PropertyRNA *prop, + PointerRNA *searchptr, + PropertyRNA *searchprop, + bool results_are_suggestions) { /* for ID's we do automatic lookup */ PointerRNA sptr; @@ -2743,6 +2747,8 @@ uiBut *ui_but_add_search( but->str[0] = 0; } + UI_but_func_search_set_results_are_suggestions(but, results_are_suggestions); + UI_but_func_search_set(but, ui_searchbox_create_generic, ui_rna_collection_search_update_fn, @@ -2771,7 +2777,8 @@ void uiItemPointerR_prop(uiLayout *layout, PointerRNA *searchptr, PropertyRNA *searchprop, const char *name, - int icon) + int icon, + bool results_are_suggestions) { const bool use_prop_sep = ((layout->item.flag & UI_ITEM_PROP_SEP) != 0); @@ -2820,7 +2827,7 @@ void uiItemPointerR_prop(uiLayout *layout, w += UI_UNIT_X; /* X icon needs more space */ uiBut *but = ui_item_with_label(layout, block, name, icon, ptr, prop, 0, 0, 0, w, h, 0); - ui_but_add_search(but, ptr, prop, searchptr, searchprop); + but = ui_but_add_search(but, ptr, prop, searchptr, searchprop, results_are_suggestions); } void uiItemPointerR(uiLayout *layout, @@ -2845,7 +2852,7 @@ void uiItemPointerR(uiLayout *layout, return; } - uiItemPointerR_prop(layout, ptr, prop, searchptr, searchprop, name, icon); + uiItemPointerR_prop(layout, ptr, prop, searchptr, searchprop, name, icon, false); } void ui_item_menutype_func(bContext *C, uiLayout *layout, void *arg_mt) diff --git a/source/blender/editors/interface/interface_utils.cc b/source/blender/editors/interface/interface_utils.cc index 56d80b8e557..c59863f462a 100644 --- a/source/blender/editors/interface/interface_utils.cc +++ b/source/blender/editors/interface/interface_utils.cc @@ -333,7 +333,7 @@ uiBut *uiDefAutoButR(uiBlock *block, -1, -1, nullptr); - ui_but_add_search(but, ptr, prop, nullptr, nullptr); + ui_but_add_search(but, ptr, prop, nullptr, nullptr, false); break; } case PROP_COLLECTION: { diff --git a/source/blender/editors/render/render_shading.cc b/source/blender/editors/render/render_shading.cc index 07a07b462ef..d9929025c28 100644 --- a/source/blender/editors/render/render_shading.cc +++ b/source/blender/editors/render/render_shading.cc @@ -1118,12 +1118,25 @@ void SCENE_OT_view_layer_remove_aov(wmOperatorType *ot) /** \name View Layer Add Lightgroup Operator * \{ */ -static int view_layer_add_lightgroup_exec(bContext *C, wmOperator *UNUSED(op)) +static int view_layer_add_lightgroup_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); - BKE_view_layer_add_lightgroup(view_layer); + char name[MAX_NAME]; + RNA_string_get(op->ptr, "name", name); + /* If a name is provided, ensure that it is unique. */ + if (name[0]) { + /* Ensure that there are no dots in the name. */ + BLI_str_replace_char(name, '.', '_'); + LISTBASE_FOREACH (ViewLayerLightgroup *, lightgroup, &view_layer->lightgroups) { + if (strcmp(lightgroup->name, name) == 0) { + return OPERATOR_CANCELLED; + } + } + } + + BKE_view_layer_add_lightgroup(view_layer, name); if (scene->nodetree) { ntreeCompositUpdateRLayers(scene->nodetree); @@ -1148,6 +1161,14 @@ void SCENE_OT_view_layer_add_lightgroup(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL; + + /* properties */ + ot->prop = RNA_def_string(ot->srna, + "name", + nullptr, + sizeof(((ViewLayerLightgroup *)NULL)->name), + "Name", + "Name of newly created lightgroup"); } /** \} */ |