Element types dropdown + search #6943

Example - https://files.catbox.moe/jv9uxt.png
This commit is contained in:
Andrej730
2025-07-25 15:20:14 +05:00
parent b76b05fc71
commit d8ae33dd2a
2 changed files with 17 additions and 2 deletions
+9 -1
View File
@@ -360,9 +360,17 @@ def prop_with_search(
prop_name: str,
should_click_ok: bool = False,
original_operator_path: Optional[str] = None,
*,
button_kwargs: Union[dict[str, Any], None] = None,
**kwargs: Any,
) -> bpy.types.UILayout:
"""
Draw a row with enum prop and enum search operator.
Search operator appears only in case if there's more than 10 item in enum.
:arg button_kwargs: kwargs to pass to ``UILayout.operator()``.
:arg kwargs: kwargs to pass to ``UILayout.prop()``.
:return: Added row.
"""
# kwargs are layout.prop arguments (text, icon, etc.)
@@ -372,7 +380,7 @@ def prop_with_search(
if len(get_enum_items(data, prop_name, original_operator_path=original_operator_path)) > 10:
# Magick courtesy of https://blender.stackexchange.com/a/203443/86891
row.context_pointer_set(name="data", data=data)
op = row.operator("bim.enum_property_search", text="", icon="VIEWZOOM")
op = row.operator("bim.enum_property_search", text="", icon="VIEWZOOM", **(button_kwargs or {}))
op.prop_name = prop_name
op.should_click_ok = should_click_ok
op.original_operator_path = original_operator_path or ""
@@ -654,7 +654,14 @@ class CreateObjectUI:
row = box.row(align=True)
thumbnail: int = AuthoringData.type_thumbnails.get(relating_type_data["id"], 0)
row.template_icon(icon_value=thumbnail)
row.operator("bim.launch_type_manager", text=relating_type_data["name"], emboss=False)
prop_with_search(
row,
cls.props,
"relating_type_id",
text="",
button_kwargs={"emboss": False},
emboss=True,
)
row.operator(
"bim.launch_type_manager",
icon=tool.Blender.TYPE_MANAGER_ICON,