Refactor: UI: Replace uiItemPointerR with uiLayout::prop_search
This converts the public uiItemPointerR and uiItemPointerR_prop functions to an object-oriented API (uiLayout::prop_search overloads), matching the python API. Part of: #117604 Pull Request: https://projects.blender.org/blender/blender/pulls/140930
This commit is contained in:
committed by
Hans Goudey
parent
74fbeeeccb
commit
2e5138fed8
@@ -444,6 +444,31 @@ struct uiLayout : uiItem {
|
||||
std::optional<blender::StringRef> name,
|
||||
int icon);
|
||||
|
||||
/**
|
||||
* Adds a RNA enum/pointer/string/ property item, and exposes it into the layout. Button input
|
||||
* would suggest values from the search property collection.
|
||||
* \param searchprop: Collection property in \a searchptr from where to take input values.
|
||||
* \param results_are_suggestions: Allow inputs that not match any suggested value.
|
||||
*/
|
||||
void prop_search(PointerRNA *ptr,
|
||||
PropertyRNA *prop,
|
||||
PointerRNA *searchptr,
|
||||
PropertyRNA *searchprop,
|
||||
std::optional<blender::StringRefNull> name,
|
||||
int icon,
|
||||
bool results_are_suggestions);
|
||||
/**
|
||||
* Adds a RNA enum/pointer/string/ property item, and exposes it into the layout. Button input
|
||||
* would suggest values from the search property collection, input must match a suggested value.
|
||||
* \param searchprop: Collection property in \a searchptr from where to take input values.
|
||||
*/
|
||||
void prop_search(PointerRNA *ptr,
|
||||
blender::StringRefNull propname,
|
||||
PointerRNA *searchptr,
|
||||
blender::StringRefNull searchpropname,
|
||||
std::optional<blender::StringRefNull> name,
|
||||
int icon);
|
||||
|
||||
/** Adds a separator item, that adds empty space between items. */
|
||||
void separator(float factor = 1.0f, LayoutSeparatorType type = LayoutSeparatorType::Auto);
|
||||
};
|
||||
@@ -763,21 +788,6 @@ void uiItemEnumR_string(uiLayout *layout,
|
||||
std::optional<blender::StringRefNull> name,
|
||||
int icon);
|
||||
void uiItemsEnumR(uiLayout *layout, PointerRNA *ptr, blender::StringRefNull propname);
|
||||
void uiItemPointerR_prop(uiLayout *layout,
|
||||
PointerRNA *ptr,
|
||||
PropertyRNA *prop,
|
||||
PointerRNA *searchptr,
|
||||
PropertyRNA *searchprop,
|
||||
std::optional<blender::StringRefNull> name,
|
||||
int icon,
|
||||
bool results_are_suggestions);
|
||||
void uiItemPointerR(uiLayout *layout,
|
||||
PointerRNA *ptr,
|
||||
blender::StringRefNull propname,
|
||||
PointerRNA *searchptr,
|
||||
blender::StringRefNull searchpropname,
|
||||
std::optional<blender::StringRefNull> name,
|
||||
int icon);
|
||||
|
||||
/**
|
||||
* Create a list of enum items.
|
||||
|
||||
@@ -2730,18 +2730,17 @@ uiBut *ui_but_add_search(uiBut *but,
|
||||
return but;
|
||||
}
|
||||
|
||||
void uiItemPointerR_prop(uiLayout *layout,
|
||||
PointerRNA *ptr,
|
||||
PropertyRNA *prop,
|
||||
PointerRNA *searchptr,
|
||||
PropertyRNA *searchprop,
|
||||
const std::optional<StringRefNull> name_opt,
|
||||
int icon,
|
||||
bool results_are_suggestions)
|
||||
void uiLayout::prop_search(PointerRNA *ptr,
|
||||
PropertyRNA *prop,
|
||||
PointerRNA *searchptr,
|
||||
PropertyRNA *searchprop,
|
||||
const std::optional<StringRefNull> name_opt,
|
||||
int icon,
|
||||
bool results_are_suggestions)
|
||||
{
|
||||
const bool use_prop_sep = bool(layout->flag_ & uiItemInternalFlag::PropSep);
|
||||
|
||||
ui_block_new_button_group(layout->block(), uiButtonGroupFlag(0));
|
||||
const bool use_prop_sep = bool(flag_ & uiItemInternalFlag::PropSep);
|
||||
uiBlock *block = this->block();
|
||||
ui_block_new_button_group(block, uiButtonGroupFlag(0));
|
||||
|
||||
const PropertyType type = RNA_property_type(prop);
|
||||
if (!ELEM(type, PROP_POINTER, PROP_STRING, PROP_ENUM)) {
|
||||
@@ -2777,23 +2776,21 @@ void uiItemPointerR_prop(uiLayout *layout,
|
||||
}
|
||||
|
||||
/* create button */
|
||||
uiBlock *block = layout->block();
|
||||
|
||||
int w, h;
|
||||
ui_item_rna_size(layout, name, icon, ptr, prop, 0, false, false, &w, &h);
|
||||
ui_item_rna_size(this, name, icon, ptr, prop, 0, false, false, &w, &h);
|
||||
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);
|
||||
uiBut *but = ui_item_with_label(this, block, name, icon, ptr, prop, 0, 0, 0, w, h, 0);
|
||||
|
||||
but = ui_but_add_search(but, ptr, prop, searchptr, searchprop, results_are_suggestions);
|
||||
}
|
||||
|
||||
void uiItemPointerR(uiLayout *layout,
|
||||
PointerRNA *ptr,
|
||||
const StringRefNull propname,
|
||||
PointerRNA *searchptr,
|
||||
const StringRefNull searchpropname,
|
||||
const std::optional<StringRefNull> name,
|
||||
int icon)
|
||||
void uiLayout::prop_search(PointerRNA *ptr,
|
||||
const StringRefNull propname,
|
||||
PointerRNA *searchptr,
|
||||
const StringRefNull searchpropname,
|
||||
const std::optional<StringRefNull> name,
|
||||
int icon)
|
||||
{
|
||||
/* validate arguments */
|
||||
PropertyRNA *prop = RNA_struct_find_property(ptr, propname.c_str());
|
||||
@@ -2809,7 +2806,7 @@ void uiItemPointerR(uiLayout *layout,
|
||||
return;
|
||||
}
|
||||
|
||||
uiItemPointerR_prop(layout, ptr, prop, searchptr, searchprop, name, icon, false);
|
||||
this->prop_search(ptr, prop, searchptr, searchprop, name, icon, false);
|
||||
}
|
||||
|
||||
void ui_item_menutype_func(bContext *C, uiLayout *layout, void *arg_mt)
|
||||
|
||||
@@ -3934,8 +3934,7 @@ static void edbm_blend_from_shape_ui(bContext *C, wmOperator *op)
|
||||
layout->use_property_split_set(true);
|
||||
layout->use_property_decorate_set(false);
|
||||
|
||||
uiItemPointerR(
|
||||
layout, op->ptr, "shape", &ptr_key, "key_blocks", std::nullopt, ICON_SHAPEKEY_DATA);
|
||||
layout->prop_search(op->ptr, "shape", &ptr_key, "key_blocks", std::nullopt, ICON_SHAPEKEY_DATA);
|
||||
layout->prop(op->ptr, "blend", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
layout->prop(op->ptr, "add", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
}
|
||||
|
||||
@@ -794,7 +794,7 @@ static void graph_panel_driverVar__rotDiff(uiLayout *layout, ID *id, DriverVar *
|
||||
|
||||
if (dtar->id && GS(dtar->id->name) == ID_OB && ob1->pose) {
|
||||
PointerRNA tar_ptr = RNA_pointer_create_discrete(dtar->id, &RNA_Pose, ob1->pose);
|
||||
uiItemPointerR(col, &dtar_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA);
|
||||
col->prop_search(&dtar_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA);
|
||||
}
|
||||
|
||||
/* Object 2 */
|
||||
@@ -804,7 +804,7 @@ static void graph_panel_driverVar__rotDiff(uiLayout *layout, ID *id, DriverVar *
|
||||
|
||||
if (dtar2->id && GS(dtar2->id->name) == ID_OB && ob2->pose) {
|
||||
PointerRNA tar_ptr = RNA_pointer_create_discrete(dtar2->id, &RNA_Pose, ob2->pose);
|
||||
uiItemPointerR(col, &dtar2_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA);
|
||||
col->prop_search(&dtar2_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -828,8 +828,7 @@ static void graph_panel_driverVar__locDiff(uiLayout *layout, ID *id, DriverVar *
|
||||
|
||||
if (dtar->id && GS(dtar->id->name) == ID_OB && ob1->pose) {
|
||||
PointerRNA tar_ptr = RNA_pointer_create_discrete(dtar->id, &RNA_Pose, ob1->pose);
|
||||
uiItemPointerR(
|
||||
col, &dtar_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA);
|
||||
col->prop_search(&dtar_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA);
|
||||
}
|
||||
|
||||
/* we can clear it again now - it's only needed when creating the ID/Bone fields */
|
||||
@@ -844,8 +843,7 @@ static void graph_panel_driverVar__locDiff(uiLayout *layout, ID *id, DriverVar *
|
||||
|
||||
if (dtar2->id && GS(dtar2->id->name) == ID_OB && ob2->pose) {
|
||||
PointerRNA tar_ptr = RNA_pointer_create_discrete(dtar2->id, &RNA_Pose, ob2->pose);
|
||||
uiItemPointerR(
|
||||
col, &dtar2_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA);
|
||||
col->prop_search(&dtar2_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA);
|
||||
}
|
||||
|
||||
/* we can clear it again now - it's only needed when creating the ID/Bone fields */
|
||||
@@ -871,8 +869,7 @@ static void graph_panel_driverVar__transChan(uiLayout *layout, ID *id, DriverVar
|
||||
|
||||
if (dtar->id && GS(dtar->id->name) == ID_OB && ob->pose) {
|
||||
PointerRNA tar_ptr = RNA_pointer_create_discrete(dtar->id, &RNA_Pose, ob->pose);
|
||||
uiItemPointerR(
|
||||
col, &dtar_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA);
|
||||
col->prop_search(&dtar_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA);
|
||||
}
|
||||
|
||||
sub = &layout->column(true);
|
||||
|
||||
@@ -336,8 +336,7 @@ static void rna_uiItemPointerR(uiLayout *layout,
|
||||
std::optional<StringRefNull> text = rna_translate_ui_text(
|
||||
name, text_ctxt, nullptr, prop, translate);
|
||||
|
||||
uiItemPointerR_prop(
|
||||
layout, ptr, prop, searchptr, searchprop, text, icon, results_are_suggestions);
|
||||
layout->prop_search(ptr, prop, searchptr, searchprop, text, icon, results_are_suggestions);
|
||||
}
|
||||
|
||||
static PointerRNA rna_uiItemO(uiLayout *layout,
|
||||
|
||||
@@ -361,17 +361,16 @@ static void panel_draw(const bContext *C, Panel *panel)
|
||||
(RNA_enum_get(&texture_coords_obj_ptr, "type") == OB_ARMATURE))
|
||||
{
|
||||
PointerRNA texture_coords_obj_data_ptr = RNA_pointer_get(&texture_coords_obj_ptr, "data");
|
||||
uiItemPointerR(col,
|
||||
ptr,
|
||||
"texture_coords_bone",
|
||||
&texture_coords_obj_data_ptr,
|
||||
"bones",
|
||||
IFACE_("Bone"),
|
||||
ICON_NONE);
|
||||
col->prop_search(ptr,
|
||||
"texture_coords_bone",
|
||||
&texture_coords_obj_data_ptr,
|
||||
"bones",
|
||||
IFACE_("Bone"),
|
||||
ICON_NONE);
|
||||
}
|
||||
}
|
||||
else if (texture_coords == MOD_DISP_MAP_UV && RNA_enum_get(&ob_ptr, "type") == OB_MESH) {
|
||||
uiItemPointerR(col, ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
col->prop_search(ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
}
|
||||
|
||||
layout->separator();
|
||||
|
||||
@@ -1172,8 +1172,8 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
|
||||
layout->use_property_split_set(true);
|
||||
|
||||
uiItemPointerR(
|
||||
layout, ptr, "particle_uv", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
layout->prop_search(
|
||||
ptr, "particle_uv", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
|
||||
row = &layout->row(true, IFACE_("Show"));
|
||||
row->prop(ptr, "show_alive", toggles_flag, std::nullopt, ICON_NONE);
|
||||
|
||||
@@ -817,13 +817,8 @@ static void panel_draw(const bContext *C, Panel *panel)
|
||||
subcol->prop(ptr, "fade_thickness_strength", UI_ITEM_NONE, IFACE_("Thickness"), ICON_NONE);
|
||||
subcol->prop(ptr, "fade_opacity_strength", UI_ITEM_NONE, IFACE_("Opacity"), ICON_NONE);
|
||||
|
||||
uiItemPointerR(col,
|
||||
ptr,
|
||||
"target_vertex_group",
|
||||
&ob_ptr,
|
||||
"vertex_groups",
|
||||
IFACE_("Weight Output"),
|
||||
ICON_NONE);
|
||||
col->prop_search(
|
||||
ptr, "target_vertex_group", &ob_ptr, "vertex_groups", IFACE_("Weight Output"), ICON_NONE);
|
||||
}
|
||||
|
||||
if (uiLayout *influence_panel = layout->panel_prop(
|
||||
|
||||
@@ -277,8 +277,7 @@ static void panel_draw(const bContext *C, Panel *panel)
|
||||
RNA_enum_get(&hook_object_ptr, "type") == OB_ARMATURE)
|
||||
{
|
||||
PointerRNA hook_object_data_ptr = RNA_pointer_get(&hook_object_ptr, "data");
|
||||
uiItemPointerR(
|
||||
col, ptr, "subtarget", &hook_object_data_ptr, "bones", IFACE_("Bone"), ICON_NONE);
|
||||
col->prop_search(ptr, "subtarget", &hook_object_data_ptr, "bones", IFACE_("Bone"), ICON_NONE);
|
||||
}
|
||||
|
||||
layout->prop(ptr, "strength", UI_ITEM_R_SLIDER, std::nullopt, ICON_NONE);
|
||||
|
||||
@@ -107,22 +107,20 @@ void draw_layer_filter_settings(const bContext * /*C*/, uiLayout *layout, Pointe
|
||||
row = &col->row(true);
|
||||
row->use_property_decorate_set(false);
|
||||
if (use_layer_group_filter) {
|
||||
uiItemPointerR(row,
|
||||
ptr,
|
||||
"tree_node_filter",
|
||||
&obj_data_ptr,
|
||||
"layer_groups",
|
||||
"Group",
|
||||
ICON_GREASEPENCIL_LAYER_GROUP);
|
||||
row->prop_search(ptr,
|
||||
"tree_node_filter",
|
||||
&obj_data_ptr,
|
||||
"layer_groups",
|
||||
"Group",
|
||||
ICON_GREASEPENCIL_LAYER_GROUP);
|
||||
}
|
||||
else {
|
||||
uiItemPointerR(row,
|
||||
ptr,
|
||||
"tree_node_filter",
|
||||
&obj_data_ptr,
|
||||
"layers",
|
||||
std::nullopt,
|
||||
ICON_OUTLINER_DATA_GP_LAYER);
|
||||
row->prop_search(ptr,
|
||||
"tree_node_filter",
|
||||
&obj_data_ptr,
|
||||
"layers",
|
||||
std::nullopt,
|
||||
ICON_OUTLINER_DATA_GP_LAYER);
|
||||
}
|
||||
sub = &row->row(true);
|
||||
sub->prop(ptr, "use_layer_group_filter", UI_ITEM_NONE, "", ICON_GREASEPENCIL_LAYER_GROUP);
|
||||
@@ -150,8 +148,8 @@ void draw_material_filter_settings(const bContext * /*C*/, uiLayout *layout, Poi
|
||||
col = &layout->column(true);
|
||||
row = &col->row(true);
|
||||
row->use_property_decorate_set(false);
|
||||
uiItemPointerR(
|
||||
row, ptr, "material_filter", &obj_data_ptr, "materials", std::nullopt, ICON_SHADING_TEXTURE);
|
||||
row->prop_search(
|
||||
ptr, "material_filter", &obj_data_ptr, "materials", std::nullopt, ICON_SHADING_TEXTURE);
|
||||
sub = &row->row(true);
|
||||
sub->prop(ptr, "invert_material_filter", UI_ITEM_NONE, "", ICON_ARROW_LEFTRIGHT);
|
||||
|
||||
@@ -176,7 +174,7 @@ void draw_vertex_group_settings(const bContext * /*C*/, uiLayout *layout, Pointe
|
||||
col = &layout->column(true);
|
||||
row = &col->row(true);
|
||||
row->use_property_decorate_set(false);
|
||||
uiItemPointerR(row, ptr, "vertex_group_name", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE);
|
||||
row->prop_search(ptr, "vertex_group_name", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE);
|
||||
sub = &row->row(true);
|
||||
sub->active_set(has_vertex_group);
|
||||
sub->use_property_decorate_set(false);
|
||||
|
||||
@@ -230,8 +230,7 @@ static void panel_draw(const bContext *C, Panel *panel)
|
||||
layout->use_property_split_set(true);
|
||||
|
||||
row = &layout->row(true);
|
||||
uiItemPointerR(
|
||||
row, ptr, "target_vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE);
|
||||
row->prop_search(ptr, "target_vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE);
|
||||
|
||||
sub = &row->row(true);
|
||||
bool has_output = RNA_string_length(ptr, "target_vertex_group") != 0;
|
||||
|
||||
@@ -253,8 +253,7 @@ static void panel_draw(const bContext *C, Panel *panel)
|
||||
|
||||
layout->use_property_split_set(true);
|
||||
row = &layout->row(true);
|
||||
uiItemPointerR(
|
||||
row, ptr, "target_vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE);
|
||||
row->prop_search(ptr, "target_vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE);
|
||||
sub = &row->row(true);
|
||||
bool has_output = RNA_string_length(ptr, "target_vertex_group") != 0;
|
||||
sub->use_property_decorate_set(false);
|
||||
|
||||
@@ -463,8 +463,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
RNA_enum_get(&hook_object_ptr, "type") == OB_ARMATURE)
|
||||
{
|
||||
PointerRNA hook_object_data_ptr = RNA_pointer_get(&hook_object_ptr, "data");
|
||||
uiItemPointerR(
|
||||
col, ptr, "subtarget", &hook_object_data_ptr, "bones", IFACE_("Bone"), ICON_NONE);
|
||||
col->prop_search(ptr, "subtarget", &hook_object_data_ptr, "bones", IFACE_("Bone"), ICON_NONE);
|
||||
}
|
||||
modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", std::nullopt);
|
||||
|
||||
|
||||
@@ -249,15 +249,10 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
}
|
||||
|
||||
uiLayout *col = &layout->column(false);
|
||||
uiItemPointerR(col,
|
||||
ptr,
|
||||
"target_layer",
|
||||
&obj_data_ptr,
|
||||
"layers",
|
||||
std::nullopt,
|
||||
ICON_OUTLINER_DATA_GP_LAYER);
|
||||
uiItemPointerR(
|
||||
col, ptr, "target_material", &obj_data_ptr, "materials", std::nullopt, ICON_MATERIAL);
|
||||
col->prop_search(
|
||||
ptr, "target_layer", &obj_data_ptr, "layers", std::nullopt, ICON_OUTLINER_DATA_GP_LAYER);
|
||||
col->prop_search(
|
||||
ptr, "target_material", &obj_data_ptr, "materials", std::nullopt, ICON_MATERIAL);
|
||||
|
||||
col = &layout->column(false);
|
||||
col->prop(ptr, "thickness", UI_ITEM_R_SLIDER, IFACE_("Line Thickness"), ICON_NONE);
|
||||
@@ -646,7 +641,7 @@ static void vgroup_panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
|
||||
col->prop(ptr, "use_output_vertex_group_match_by_name", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
|
||||
uiItemPointerR(col, ptr, "vertex_group", &ob_ptr, "vertex_groups", IFACE_("Target"), ICON_NONE);
|
||||
col->prop_search(ptr, "vertex_group", &ob_ptr, "vertex_groups", IFACE_("Target"), ICON_NONE);
|
||||
}
|
||||
|
||||
static void bake_panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
|
||||
@@ -384,8 +384,8 @@ static void panel_draw(const bContext *C, Panel *panel)
|
||||
uiTemplateCacheFile(layout, C, ptr, "cache_file");
|
||||
|
||||
if (has_cache_file) {
|
||||
uiItemPointerR(
|
||||
layout, ptr, "object_path", &cache_file_ptr, "object_paths", std::nullopt, ICON_NONE);
|
||||
layout->prop_search(
|
||||
ptr, "object_path", &cache_file_ptr, "object_paths", std::nullopt, ICON_NONE);
|
||||
}
|
||||
|
||||
if (RNA_enum_get(&ob_ptr, "type") == OB_MESH) {
|
||||
|
||||
@@ -533,13 +533,12 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
|
||||
layout->prop(ptr, "object", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
if (!RNA_pointer_is_null(&particle_obj_ptr)) {
|
||||
uiItemPointerR(layout,
|
||||
ptr,
|
||||
"particle_system",
|
||||
&particle_obj_ptr,
|
||||
"particle_systems",
|
||||
IFACE_("Particle System"),
|
||||
ICON_NONE);
|
||||
layout->prop_search(ptr,
|
||||
"particle_system",
|
||||
&particle_obj_ptr,
|
||||
"particle_systems",
|
||||
IFACE_("Particle System"),
|
||||
ICON_NONE);
|
||||
}
|
||||
else {
|
||||
layout->prop(ptr, "particle_system_index", UI_ITEM_NONE, IFACE_("Particle System"), ICON_NONE);
|
||||
@@ -613,10 +612,10 @@ static void layers_panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
layout->use_property_split_set(true);
|
||||
|
||||
col = &layout->column(false);
|
||||
uiItemPointerR(
|
||||
col, ptr, "index_layer_name", &obj_data_ptr, "vertex_colors", IFACE_("Index"), ICON_NONE);
|
||||
uiItemPointerR(
|
||||
col, ptr, "value_layer_name", &obj_data_ptr, "vertex_colors", IFACE_("Value"), ICON_NONE);
|
||||
col->prop_search(
|
||||
ptr, "index_layer_name", &obj_data_ptr, "vertex_colors", IFACE_("Index"), ICON_NONE);
|
||||
col->prop_search(
|
||||
ptr, "value_layer_name", &obj_data_ptr, "vertex_colors", IFACE_("Value"), ICON_NONE);
|
||||
}
|
||||
|
||||
static void panel_register(ARegionType *region_type)
|
||||
|
||||
@@ -214,15 +214,14 @@ static void vertex_group_panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
layout->use_property_split_set(true);
|
||||
|
||||
col = &layout->column(false);
|
||||
uiItemPointerR(
|
||||
col, ptr, "shell_vertex_group", &ob_ptr, "vertex_groups", IFACE_("Shell"), ICON_NONE);
|
||||
uiItemPointerR(col,
|
||||
ptr,
|
||||
"rim_vertex_group",
|
||||
&ob_ptr,
|
||||
"vertex_groups",
|
||||
CTX_IFACE_(BLT_I18NCONTEXT_ID_MESH, "Rim"),
|
||||
ICON_NONE);
|
||||
col->prop_search(
|
||||
ptr, "shell_vertex_group", &ob_ptr, "vertex_groups", IFACE_("Shell"), ICON_NONE);
|
||||
col->prop_search(ptr,
|
||||
"rim_vertex_group",
|
||||
&ob_ptr,
|
||||
"vertex_groups",
|
||||
CTX_IFACE_(BLT_I18NCONTEXT_ID_MESH, "Rim"),
|
||||
ICON_NONE);
|
||||
}
|
||||
|
||||
static void panel_register(ARegionType *region_type)
|
||||
|
||||
@@ -133,7 +133,7 @@ void modifier_vgroup_ui(uiLayout *layout,
|
||||
bool has_vertex_group = RNA_string_length(ptr, vgroup_prop.c_str()) != 0;
|
||||
|
||||
uiLayout *row = &layout->row(true);
|
||||
uiItemPointerR(row, ptr, vgroup_prop, ob_ptr, "vertex_groups", text, ICON_GROUP_VERTEX);
|
||||
row->prop_search(ptr, vgroup_prop, ob_ptr, "vertex_groups", text, ICON_GROUP_VERTEX);
|
||||
if (invert_vgroup_prop) {
|
||||
uiLayout *sub = &row->row(true);
|
||||
sub->active_set(has_vertex_group);
|
||||
|
||||
@@ -305,8 +305,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
|
||||
layout->use_property_split_set(true);
|
||||
|
||||
uiItemPointerR(
|
||||
layout, ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
layout->prop_search(ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
|
||||
/* Aspect and Scale are only used for camera projectors. */
|
||||
bool has_camera = false;
|
||||
|
||||
@@ -251,8 +251,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
|
||||
layout->use_property_split_set(true);
|
||||
|
||||
uiItemPointerR(
|
||||
layout, ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
layout->prop_search(ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
|
||||
col = &layout->column(false);
|
||||
col->prop(ptr, "center", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
@@ -266,15 +265,14 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
warp_obj_ptr = RNA_pointer_get(ptr, "object_from");
|
||||
if (!RNA_pointer_is_null(&warp_obj_ptr) && RNA_enum_get(&warp_obj_ptr, "type") == OB_ARMATURE) {
|
||||
PointerRNA warp_obj_data_ptr = RNA_pointer_get(&warp_obj_ptr, "data");
|
||||
uiItemPointerR(
|
||||
col, ptr, "bone_from", &warp_obj_data_ptr, "bones", std::nullopt, ICON_BONE_DATA);
|
||||
col->prop_search(ptr, "bone_from", &warp_obj_data_ptr, "bones", std::nullopt, ICON_BONE_DATA);
|
||||
}
|
||||
|
||||
col->prop(ptr, "object_to", UI_ITEM_NONE, CTX_IFACE_(BLT_I18NCONTEXT_MODIFIER, "To"), ICON_NONE);
|
||||
warp_obj_ptr = RNA_pointer_get(ptr, "object_to");
|
||||
if (!RNA_pointer_is_null(&warp_obj_ptr) && RNA_enum_get(&warp_obj_ptr, "type") == OB_ARMATURE) {
|
||||
PointerRNA warp_obj_data_ptr = RNA_pointer_get(&warp_obj_ptr, "data");
|
||||
uiItemPointerR(col, ptr, "bone_to", &warp_obj_data_ptr, "bones", std::nullopt, ICON_BONE_DATA);
|
||||
col->prop_search(ptr, "bone_to", &warp_obj_data_ptr, "bones", std::nullopt, ICON_BONE_DATA);
|
||||
}
|
||||
|
||||
modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", std::nullopt);
|
||||
|
||||
@@ -355,8 +355,8 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
if (!RNA_pointer_is_null(&from_obj_ptr) && RNA_enum_get(&from_obj_ptr, "type") == OB_ARMATURE) {
|
||||
|
||||
PointerRNA from_obj_data_ptr = RNA_pointer_get(&from_obj_ptr, "data");
|
||||
uiItemPointerR(
|
||||
col, ptr, "bone_from", &from_obj_data_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA);
|
||||
col->prop_search(
|
||||
ptr, "bone_from", &from_obj_data_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA);
|
||||
}
|
||||
|
||||
col = &layout->column(true);
|
||||
@@ -364,7 +364,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
PointerRNA to_obj_ptr = RNA_pointer_get(ptr, "object_to");
|
||||
if (!RNA_pointer_is_null(&to_obj_ptr) && RNA_enum_get(&to_obj_ptr, "type") == OB_ARMATURE) {
|
||||
PointerRNA to_obj_data_ptr = RNA_pointer_get(&to_obj_ptr, "data");
|
||||
uiItemPointerR(col, ptr, "bone_to", &to_obj_data_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA);
|
||||
col->prop_search(ptr, "bone_to", &to_obj_data_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA);
|
||||
}
|
||||
|
||||
layout->prop(ptr, "use_volume_preserve", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
@@ -420,18 +420,17 @@ static void texture_panel_draw(const bContext *C, Panel *panel)
|
||||
(RNA_enum_get(&texture_coords_obj_ptr, "type") == OB_ARMATURE))
|
||||
{
|
||||
PointerRNA texture_coords_obj_data_ptr = RNA_pointer_get(&texture_coords_obj_ptr, "data");
|
||||
uiItemPointerR(col,
|
||||
ptr,
|
||||
"texture_coords_bone",
|
||||
&texture_coords_obj_data_ptr,
|
||||
"bones",
|
||||
IFACE_("Bone"),
|
||||
ICON_NONE);
|
||||
col->prop_search(ptr,
|
||||
"texture_coords_bone",
|
||||
&texture_coords_obj_data_ptr,
|
||||
"bones",
|
||||
IFACE_("Bone"),
|
||||
ICON_NONE);
|
||||
}
|
||||
}
|
||||
else if (texture_coords == MOD_DISP_MAP_UV && RNA_enum_get(&ob_ptr, "type") == OB_MESH) {
|
||||
PointerRNA obj_data_ptr = RNA_pointer_get(&ob_ptr, "data");
|
||||
uiItemPointerR(col, ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
col->prop_search(ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -382,18 +382,17 @@ static void texture_panel_draw(const bContext *C, Panel *panel)
|
||||
(RNA_enum_get(&texture_coords_obj_ptr, "type") == OB_ARMATURE))
|
||||
{
|
||||
PointerRNA texture_coords_obj_data_ptr = RNA_pointer_get(&texture_coords_obj_ptr, "data");
|
||||
uiItemPointerR(col,
|
||||
ptr,
|
||||
"texture_coords_bone",
|
||||
&texture_coords_obj_data_ptr,
|
||||
"bones",
|
||||
IFACE_("Bone"),
|
||||
ICON_NONE);
|
||||
col->prop_search(ptr,
|
||||
"texture_coords_bone",
|
||||
&texture_coords_obj_data_ptr,
|
||||
"bones",
|
||||
IFACE_("Bone"),
|
||||
ICON_NONE);
|
||||
}
|
||||
}
|
||||
else if (texture_coords == MOD_DISP_MAP_UV && RNA_enum_get(&ob_ptr, "type") == OB_MESH) {
|
||||
PointerRNA obj_data_ptr = RNA_pointer_get(&ob_ptr, "data");
|
||||
uiItemPointerR(col, ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
col->prop_search(ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -345,8 +345,8 @@ void weightvg_ui_common(const bContext *C, PointerRNA *ob_ptr, PointerRNA *ptr,
|
||||
}
|
||||
else if (mask_tex_mapping == MOD_DISP_MAP_UV && RNA_enum_get(ob_ptr, "type") == OB_MESH) {
|
||||
PointerRNA obj_data_ptr = RNA_pointer_get(ob_ptr, "data");
|
||||
uiItemPointerR(
|
||||
layout, ptr, "mask_tex_uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_NONE);
|
||||
layout->prop_search(
|
||||
ptr, "mask_tex_uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_NONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -295,8 +295,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
layout->use_property_split_set(true);
|
||||
|
||||
col = &layout->column(true);
|
||||
uiItemPointerR(
|
||||
col, ptr, "vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_GROUP_VERTEX);
|
||||
col->prop_search(ptr, "vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_GROUP_VERTEX);
|
||||
|
||||
layout->prop(ptr, "default_weight", UI_ITEM_R_SLIDER, std::nullopt, ICON_NONE);
|
||||
|
||||
|
||||
@@ -635,8 +635,8 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
|
||||
layout->use_property_split_set(true);
|
||||
|
||||
uiItemPointerR(
|
||||
layout, ptr, "vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_GROUP_VERTEX);
|
||||
layout->prop_search(
|
||||
ptr, "vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_GROUP_VERTEX);
|
||||
|
||||
layout->prop(ptr, "target", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ static void node_composit_buts_keyingscreen(uiLayout *layout, bContext *C, Point
|
||||
&clip->id, &RNA_MovieTracking, &clip->tracking);
|
||||
|
||||
col = &layout->column(true);
|
||||
uiItemPointerR(col, ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA);
|
||||
col->prop_search(ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ static void cmp_node_planetrackdeform_declare(NodeDeclarationBuilder &b)
|
||||
&clip->id, &RNA_MovieTracking, tracking);
|
||||
|
||||
uiLayout *col = &layout->column(false);
|
||||
uiItemPointerR(col, ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA);
|
||||
col->prop_search(ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA);
|
||||
|
||||
tracking_object = BKE_tracking_object_get_named(tracking,
|
||||
node_storage(*node).tracking_object);
|
||||
@@ -69,8 +69,7 @@ static void cmp_node_planetrackdeform_declare(NodeDeclarationBuilder &b)
|
||||
PointerRNA object_ptr = RNA_pointer_create_discrete(
|
||||
&clip->id, &RNA_MovieTrackingObject, tracking_object);
|
||||
|
||||
uiItemPointerR(
|
||||
col, ptr, "plane_track_name", &object_ptr, "plane_tracks", "", ICON_ANIM_DATA);
|
||||
col->prop_search(ptr, "plane_track_name", &object_ptr, "plane_tracks", "", ICON_ANIM_DATA);
|
||||
}
|
||||
else {
|
||||
layout->prop(ptr, "plane_track_name", UI_ITEM_NONE, "", ICON_ANIM_DATA);
|
||||
|
||||
@@ -80,14 +80,14 @@ static void node_composit_buts_trackpos(uiLayout *layout, bContext *C, PointerRN
|
||||
PointerRNA tracking_ptr = RNA_pointer_create_discrete(&clip->id, &RNA_MovieTracking, tracking);
|
||||
|
||||
col = &layout->column(false);
|
||||
uiItemPointerR(col, ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA);
|
||||
col->prop_search(ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA);
|
||||
|
||||
tracking_object = BKE_tracking_object_get_named(tracking, data->tracking_object);
|
||||
if (tracking_object) {
|
||||
PointerRNA object_ptr = RNA_pointer_create_discrete(
|
||||
&clip->id, &RNA_MovieTrackingObject, tracking_object);
|
||||
|
||||
uiItemPointerR(col, ptr, "track_name", &object_ptr, "tracks", "", ICON_ANIM_DATA);
|
||||
col->prop_search(ptr, "track_name", &object_ptr, "tracks", "", ICON_ANIM_DATA);
|
||||
}
|
||||
else {
|
||||
layout->prop(ptr, "track_name", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_ANIM_DATA);
|
||||
|
||||
@@ -494,36 +494,35 @@ static void draw_property_for_socket(DrawGroupInputsContext &ctx,
|
||||
|
||||
const std::string rna_path = fmt::format("[\"{}\"]", BLI_str_escape(identifier.c_str()));
|
||||
|
||||
/* Use #uiItemPointerR to draw pointer properties because #uiLayout::prop would not have enough
|
||||
* information about what type of ID to select for editing the values. This is because
|
||||
/* Use #uiLayout::prop_search to draw pointer properties because #uiLayout::prop would not have
|
||||
* enough information about what type of ID to select for editing the values. This is because
|
||||
* pointer IDProperties contain no information about their type. */
|
||||
const bke::bNodeSocketType *typeinfo = socket.socket_typeinfo();
|
||||
const eNodeSocketDatatype type = typeinfo ? typeinfo->type : SOCK_CUSTOM;
|
||||
const char *name = socket.name ? IFACE_(socket.name) : "";
|
||||
switch (type) {
|
||||
case SOCK_OBJECT: {
|
||||
uiItemPointerR(
|
||||
row, ctx.properties_ptr, rna_path, ctx.bmain_ptr, "objects", name, ICON_OBJECT_DATA);
|
||||
row->prop_search(
|
||||
ctx.properties_ptr, rna_path, ctx.bmain_ptr, "objects", name, ICON_OBJECT_DATA);
|
||||
break;
|
||||
}
|
||||
case SOCK_COLLECTION: {
|
||||
uiItemPointerR(row,
|
||||
ctx.properties_ptr,
|
||||
rna_path,
|
||||
ctx.bmain_ptr,
|
||||
"collections",
|
||||
name,
|
||||
ICON_OUTLINER_COLLECTION);
|
||||
row->prop_search(ctx.properties_ptr,
|
||||
rna_path,
|
||||
ctx.bmain_ptr,
|
||||
"collections",
|
||||
name,
|
||||
ICON_OUTLINER_COLLECTION);
|
||||
break;
|
||||
}
|
||||
case SOCK_MATERIAL: {
|
||||
uiItemPointerR(
|
||||
row, ctx.properties_ptr, rna_path, ctx.bmain_ptr, "materials", name, ICON_MATERIAL);
|
||||
row->prop_search(
|
||||
ctx.properties_ptr, rna_path, ctx.bmain_ptr, "materials", name, ICON_MATERIAL);
|
||||
break;
|
||||
}
|
||||
case SOCK_TEXTURE: {
|
||||
uiItemPointerR(
|
||||
row, ctx.properties_ptr, rna_path, ctx.bmain_ptr, "textures", name, ICON_TEXTURE);
|
||||
row->prop_search(
|
||||
ctx.properties_ptr, rna_path, ctx.bmain_ptr, "textures", name, ICON_TEXTURE);
|
||||
break;
|
||||
}
|
||||
case SOCK_IMAGE: {
|
||||
|
||||
@@ -46,7 +46,7 @@ static void node_shader_buts_normal_map(uiLayout *layout, bContext *C, PointerRN
|
||||
if (depsgraph) {
|
||||
Object *object_eval = DEG_get_evaluated(depsgraph, object);
|
||||
PointerRNA dataptr = RNA_id_pointer_create(static_cast<ID *>(object_eval->data));
|
||||
uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
|
||||
layout->prop_search(ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ static void node_shader_buts_tangent(uiLayout *layout, bContext *C, PointerRNA *
|
||||
if (depsgraph) {
|
||||
Object *object_eval = DEG_get_evaluated(depsgraph, object);
|
||||
PointerRNA dataptr = RNA_id_pointer_create(static_cast<ID *>(object_eval->data));
|
||||
uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
|
||||
layout->prop_search(ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ static void node_shader_buts_uvmap(uiLayout *layout, bContext *C, PointerRNA *pt
|
||||
if (depsgraph) {
|
||||
Object *object_eval = DEG_get_evaluated(depsgraph, object);
|
||||
PointerRNA dataptr = RNA_id_pointer_create(static_cast<ID *>(object_eval->data));
|
||||
uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
|
||||
layout->prop_search(ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ static void node_shader_buts_vertex_color(uiLayout *layout, bContext *C, Pointer
|
||||
if (depsgraph) {
|
||||
Object *object_eval = DEG_get_evaluated(depsgraph, object);
|
||||
PointerRNA dataptr = RNA_id_pointer_create(static_cast<ID *>(object_eval->data));
|
||||
uiItemPointerR(layout, ptr, "layer_name", &dataptr, "color_attributes", "", ICON_GROUP_VCOL);
|
||||
layout->prop_search(ptr, "layer_name", &dataptr, "color_attributes", "", ICON_GROUP_VCOL);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user