Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/include/UI_interface.h3
-rw-r--r--source/blender/editors/interface/interface_intern.h3
-rw-r--r--source/blender/editors/interface/interface_layout.c19
-rw-r--r--source/blender/editors/interface/interface_utils.cc2
-rw-r--r--source/blender/editors/render/render_shading.cc25
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");
}
/** \} */