Blender V5.0
interface_template_id.cc File Reference
#include "BKE_anim_data.hh"
#include "BKE_collection.hh"
#include "BKE_context.hh"
#include "BKE_idtype.hh"
#include "BKE_layer.hh"
#include "BKE_lib_id.hh"
#include "BKE_lib_override.hh"
#include "BKE_library.hh"
#include "BKE_main.hh"
#include "BKE_main_invariants.hh"
#include "BKE_packedFile.hh"
#include "BLI_listbase.h"
#include "BLI_string_search.hh"
#include "BLI_string_utf8.h"
#include "BLT_translation.hh"
#include "DEG_depsgraph_query.hh"
#include "DNA_collection_types.h"
#include "DNA_scene_types.h"
#include "DNA_workspace_types.h"
#include "ED_id_management.hh"
#include "ED_node.hh"
#include "ED_object.hh"
#include "ED_undo.hh"
#include "RNA_access.hh"
#include "RNA_prototypes.hh"
#include "WM_api.hh"
#include "UI_interface_layout.hh"
#include "UI_string_search.hh"
#include "interface_intern.hh"
#include "interface_templates_intern.hh"

Go to the source code of this file.

Classes

struct  TemplateID

Macros

#define template_id_context(type)

Functions

static void template_ID_set_property_exec_fn (bContext *C, void *arg_template, void *item)
static bool id_search_allows_id (TemplateID *template_ui, const int flag, ID *id, const char *query)
static bool id_search_add (const bContext *C, TemplateID *template_ui, uiSearchItems *items, ID *id)
static void id_search_cb (const bContext *C, void *arg_template, const char *str, uiSearchItems *items, const bool)
static void id_search_cb_tagged (const bContext *C, void *arg_template, const char *str, uiSearchItems *items)
static void id_search_cb_objects_from_scene (const bContext *C, void *arg_template, const char *str, uiSearchItems *items, const bool)
static ARegiontemplate_ID_search_menu_item_tooltip (bContext *C, ARegion *region, const rcti *item_rect, void *, void *active)
static uiBlockid_search_menu (bContext *C, ARegion *region, void *arg_litem)
static void template_id_cb (bContext *C, void *arg_litem, void *arg_event)
void UI_context_active_but_prop_get_templateID (const bContext *C, PointerRNA *r_ptr, PropertyRNA **r_prop)
static void template_id_liboverride_hierarchy_collection_root_find_recursive (Collection *collection, const int parent_level, Collection **r_collection_parent_best, int *r_parent_level_best)
static void template_id_liboverride_hierarchy_collections_tag_recursive (Collection *root_collection, ID *target_id, const bool do_parents)
IDui_template_id_liboverride_hierarchy_make (bContext *C, Main *bmain, ID *owner_id, ID *id, const char **r_undo_push_label)
static void template_id_liboverride_hierarchy_make (bContext *C, Main *bmain, TemplateID *template_ui, PointerRNA *idptr, const char **r_undo_push_label)
static StringRef template_id_browse_tip (const StructRNA *type)
static void template_id_workspace_pin_extra_icon (const TemplateID &template_ui, uiBut *but)
static uiButtemplate_id_def_new_but (uiBlock *block, const ID *id, const TemplateID &template_ui, StructRNA *type, const char *const newop, const bool editable, const bool id_open, const bool use_tab_but, int but_height)
static void template_ID (const bContext *C, uiLayout *layout, TemplateID &template_ui, StructRNA *type, int flag, const char *newop, const char *openop, const char *unlinkop, const std::optional< StringRef > text, const bool live_icon, const bool hide_buttons)
IDUI_context_active_but_get_tab_ID (bContext *C)
static void template_ID_tabs (const bContext *C, uiLayout *layout, TemplateID &template_id, StructRNA *type, int flag, const char *newop, const char *menu)
static void ui_template_id (uiLayout *layout, const bContext *C, PointerRNA *ptr, const StringRefNull propname, const char *newop, const char *openop, const char *unlinkop, const char *menu, const std::optional< StringRef > text, int flag, int prv_rows, int prv_cols, int filter, bool use_tabs, float scale, const bool live_icon, const bool hide_buttons)
void uiTemplateID (uiLayout *layout, const bContext *C, PointerRNA *ptr, const StringRefNull propname, const char *newop, const char *openop, const char *unlinkop, int filter, const bool live_icon, const std::optional< StringRef > text)
void uiTemplateAction (uiLayout *layout, const bContext *C, ID *id, const char *newop, const char *unlinkop, const std::optional< StringRef > text)
void uiTemplateIDBrowse (uiLayout *layout, bContext *C, PointerRNA *ptr, const StringRefNull propname, const char *newop, const char *openop, const char *unlinkop, int filter, const char *text)
void uiTemplateIDPreview (uiLayout *layout, bContext *C, PointerRNA *ptr, const StringRefNull propname, const char *newop, const char *openop, const char *unlinkop, int rows, int cols, int filter, const bool hide_buttons)
void uiTemplateGpencilColorPreview (uiLayout *layout, bContext *C, PointerRNA *ptr, const StringRefNull propname, int rows, int cols, float scale, int filter)
void uiTemplateIDTabs (uiLayout *layout, bContext *C, PointerRNA *ptr, const StringRefNull propname, const char *newop, const char *menu, int filter)
void uiTemplateAnyID (uiLayout *layout, PointerRNA *ptr, const StringRefNull propname, const StringRefNull proptypename, const std::optional< StringRef > text)

Macro Definition Documentation

◆ template_id_context

#define template_id_context ( type)
Value:
0
Returns
a type-based i18n context, needed e.g. by "New" button. In most languages, this adjective takes different form based on gender of type name...

Definition at line 912 of file interface_template_id.cc.

Referenced by template_id_def_new_but().

Function Documentation

◆ id_search_add()

◆ id_search_allows_id()

bool id_search_allows_id ( TemplateID * template_ui,
const int flag,
ID * id,
const char * query )
static

◆ id_search_cb()

void id_search_cb ( const bContext * C,
void * arg_template,
const char * str,
uiSearchItems * items,
const bool  )
static

◆ id_search_cb_objects_from_scene()

void id_search_cb_objects_from_scene ( const bContext * C,
void * arg_template,
const char * str,
uiSearchItems * items,
const bool  )
static

◆ id_search_cb_tagged()

◆ id_search_menu()

◆ template_ID()

void template_ID ( const bContext * C,
uiLayout * layout,
TemplateID & template_ui,
StructRNA * type,
int flag,
const char * newop,
const char * openop,
const char * unlinkop,
const std::optional< StringRef > text,
const bool live_icon,
const bool hide_buttons )
static

Definition at line 1018 of file interface_template_id.cc.

References BKE_id_copy_is_allowed(), BKE_idtype_idcode_is_localizable, BKE_packedfile_id_check(), uiLayout::block(), But, but_func_argN_copy(), but_func_argN_free(), C, uiLayout::context_ptr_set(), CTX_data_main(), PointerRNA::data, ED_id_rename(), ELEM, flag, uiBut::flag, GS, IconToggle, IconToggleN, ID_GR, ID_IS_ASSET, ID_IS_EDITABLE, ID_IS_LINKED, ID_IS_OVERRIDE_LIBRARY, ID_IS_PACKED, ID_OB, ID_REAL_USERS, ID_SCE, ID_SCR, id_search_menu(), ID_TAG_INDIRECT, ID_TE, ID_WS, TemplateID::idcode, IFACE_, blender::wm::InvokeDefault, blender::wm::InvokeRegionWin, ID::name, name, OB_MODE_EDIT, uiBut::opptr, PointerRNA::owner_id, POINTER_FROM_INT, TemplateID::preview, TemplateID::prop, PROP_NEVER_NULL, PROP_NEVER_UNLINK, TemplateID::ptr, RNA_int_set(), RNA_property_editable(), RNA_property_flag(), RNA_property_pointer_get(), RNA_string_set(), RNA_struct_find_property(), RNA_struct_ui_description(), SNPRINTF_UTF8_RLEN, ID::tag, template_add_button_search_menu(), template_id_browse_tip(), template_id_cb(), template_id_def_new_but(), template_id_workspace_pin_extra_icon(), template_search_textbut_height(), template_search_textbut_width(), Text, TIP_, PointerRNA::type, UI_block_align_begin(), UI_block_align_end(), UI_BUT_DISABLED, UI_but_flag_disable(), UI_but_flag_enable(), UI_but_func_rename_full_set(), UI_but_funcN_set(), UI_but_operator_ptr_ensure(), UI_BUT_REDALERT, UI_BUT_UNDO, UI_fontstyle_string_width(), UI_FSTYLE_WIDGET, UI_ID_ADD_NEW, UI_ID_ALONE, UI_ID_BROWSE, UI_ID_DELETE, UI_ID_LOCAL, UI_ID_NOP, UI_ID_OPEN, UI_ID_OVERRIDE, UI_ID_PREVIEWS, UI_ID_RENAME, UI_MAX_NAME_STR, UI_UNIT_X, UI_UNIT_Y, uiDefBut(), uiDefButR(), uiDefIconBut(), uiDefIconButO(), uiDefIconButR(), uiDefIconTextBut(), uiDefIconTextButO(), uiItemL_respect_property_split(), uiTemplateTextureShow(), and w().

Referenced by ui_template_id(), and uiTemplateAction().

◆ template_id_browse_tip()

◆ template_id_cb()

◆ template_id_def_new_but()

uiBut * template_id_def_new_but ( uiBlock * block,
const ID * id,
const TemplateID & template_ui,
StructRNA * type,
const char *const newop,
const bool editable,
const bool id_open,
const bool use_tab_but,
int but_height )
static

◆ template_id_liboverride_hierarchy_collection_root_find_recursive()

void template_id_liboverride_hierarchy_collection_root_find_recursive ( Collection * collection,
const int parent_level,
Collection ** r_collection_parent_best,
int * r_parent_level_best )
static

◆ template_id_liboverride_hierarchy_collections_tag_recursive()

◆ template_id_liboverride_hierarchy_make()

void template_id_liboverride_hierarchy_make ( bContext * C,
Main * bmain,
TemplateID * template_ui,
PointerRNA * idptr,
const char ** r_undo_push_label )
static

◆ template_ID_search_menu_item_tooltip()

ARegion * template_ID_search_menu_item_tooltip ( bContext * C,
ARegion * region,
const rcti * item_rect,
void * ,
void * active )
static

Definition at line 228 of file interface_template_id.cc.

References active, C, and UI_tooltip_create_from_search_item_generic().

Referenced by id_search_menu().

◆ template_ID_set_property_exec_fn()

void template_ID_set_property_exec_fn ( bContext * C,
void * arg_template,
void * item )
static

◆ template_ID_tabs()

◆ template_id_workspace_pin_extra_icon()

void template_id_workspace_pin_extra_icon ( const TemplateID & template_ui,
uiBut * but )
static

Add a superimposed extra icon to but, for workspace pinning. Rather ugly special handling, but this is really a special case at this point, nothing worth generalizing.

Definition at line 884 of file interface_template_id.cc.

References PointerRNA::data, WorkSpace::flags, ID_SCE, TemplateID::idcode, blender::wm::InvokeDefault, TemplateID::ptr, PointerRNA::type, UI_but_extra_operator_icon_add(), WM_window_get_active_workspace(), and WORKSPACE_USE_PIN_SCENE.

Referenced by template_ID().

◆ UI_context_active_but_get_tab_ID()

ID * UI_context_active_but_get_tab_ID ( bContext * C)

◆ UI_context_active_but_prop_get_templateID()

◆ ui_template_id()

void ui_template_id ( uiLayout * layout,
const bContext * C,
PointerRNA * ptr,
const StringRefNull propname,
const char * newop,
const char * openop,
const char * unlinkop,
const char * menu,
const std::optional< StringRef > text,
int flag,
int prv_rows,
int prv_cols,
int filter,
bool use_tabs,
float scale,
const bool live_icon,
const bool hide_buttons )
static

◆ ui_template_id_liboverride_hierarchy_make()

ID * ui_template_id_liboverride_hierarchy_make ( bContext * C,
Main * bmain,
ID * owner_id,
ID * id,
const char ** r_undo_push_label )

◆ uiTemplateAction()

void uiTemplateAction ( uiLayout * layout,
const bContext * C,
ID * id,
const char * newop,
const char * unlinkop,
std::optional< blender::StringRef > text )

Action selector.

This is a specialization of uiTemplateID, hard-coded to assign Actions to the given ID. Such a specialization is necessary, as the RNA property (id.animation_data.action) does not exist when the ID's adt pointer is nullptr. In that case uiTemplateID will not be able to find the RNA type of that property, which in turn it needs to determine the type of IDs to show.

Definition at line 1617 of file interface_template_id.cc.

References BKE_animdata_from_id(), BLI_assert, C, CTX_data_main(), TemplateID::filter, flag, ID_AC, id_can_have_animdata(), TemplateID::idcode, TemplateID::idlb, ID::name, TemplateID::prop, PROP_POINTER, TemplateID::prv_cols, TemplateID::prv_rows, TemplateID::ptr, RNA_id_pointer_create(), RNA_property_type(), RNA_struct_type_find_property(), RNA_warning, uiLayout::row(), TemplateID::scale, template_ID(), UI_ID_ADD_NEW, UI_ID_BROWSE, UI_ID_DELETE, UI_ID_RENAME, UI_TEMPLATE_ID_FILTER_ALL, and which_libbase().

◆ uiTemplateAnyID()

void uiTemplateAnyID ( uiLayout * layout,
PointerRNA * ptr,
blender::StringRefNull propname,
blender::StringRefNull proptypename,
std::optional< blender::StringRef > text )

This is for selecting the type of ID-block to use, and then from the relevant type choosing the block to use.

Parameters
propnameproperty identifier for property that ID-pointer gets stored to.
proptypenameproperty identifier for property used to determine the type of ID-pointer that can be used.

Definition at line 1780 of file interface_template_id.cc.

References uiLayout::alignment_set(), blender::StringRefNull::c_str(), blender::ui::Expand, IFACE_, uiLayout::label(), blender::ui::Left, uiLayout::prop(), PROP_ENUM, PROP_POINTER, ptr, RNA_property_type(), RNA_struct_find_property(), RNA_struct_identifier(), RNA_warning, uiLayout::row(), split(), uiLayout::split(), UI_ITEM_NONE, and UI_ITEM_R_ICON_ONLY.

Referenced by graph_panel_driverVar__singleProp().

◆ uiTemplateGpencilColorPreview()

void uiTemplateGpencilColorPreview ( uiLayout * layout,
bContext * C,
PointerRNA * ptr,
const StringRefNull propname,
int rows,
int cols,
float scale,
int filter )

◆ uiTemplateID()

void uiTemplateID ( uiLayout * layout,
const bContext * C,
PointerRNA * ptr,
const StringRefNull propname,
const char * newop,
const char * openop,
const char * unlinkop,
int filter,
const bool live_icon,
const std::optional< StringRef > text )

Definition at line 1587 of file interface_template_id.cc.

References C, filter, ptr, UI_ID_BROWSE, UI_ID_DELETE, UI_ID_RENAME, and ui_template_id().

Referenced by blender::nodes::node_composite_mask_cc::cmp_node_mask_declare(), blender::nodes::node_composite_planetrackdeform_cc::cmp_node_planetrackdeform_declare(), blender::nodes::node_composite_stabilize2d_cc::cmp_node_stabilize2d_declare(), blender::seq::compositor_modifier_panel_draw(), blender::nodes::draw_geometry_nodes_modifier_ui(), blender::nodes::draw_property_for_socket(), nla_panel_animdata(), blender::ed::space_node::node_buts_texture(), blender::ed::space_node::node_composit_buts_cryptomatte(), blender::nodes::node_composite_defocus_cc::node_composit_buts_defocus(), blender::ed::space_node::node_composit_buts_image(), blender::nodes::node_composite_keyingscreen_cc::node_composit_buts_keyingscreen(), blender::nodes::node_composite_movieclip_cc::node_composit_buts_movieclip(), blender::nodes::node_composite_movieclip_cc::node_composit_buts_movieclip_ex(), blender::nodes::node_composite_moviedistortion_cc::node_composit_buts_moviedistortion(), blender::nodes::node_composite_trackpos_cc::node_composit_buts_trackpos(), blender::nodes::node_composite_render_layer_cc::node_composit_buts_viewlayers(), blender::nodes::node_geo_image_cc::node_declare(), blender::nodes::node_geo_string_to_curves_cc::node_layout(), blender::ed::space_node::node_shader_buts_tex_environment(), blender::ed::space_node::node_shader_buts_tex_image(), blender::ed::space_node::node_texture_buts_image(), panel_draw(), panel_draw(), blender::ed::space_node::std_node_socket_draw(), texture_panel_draw(), texture_panel_draw(), uiTemplateCacheFile(), uiTemplateImage(), uiTemplateMovieClip(), and weightvg_ui_common().

◆ uiTemplateIDBrowse()

void uiTemplateIDBrowse ( uiLayout * layout,
bContext * C,
PointerRNA * ptr,
const StringRefNull propname,
const char * newop,
const char * openop,
const char * unlinkop,
int filter,
const char * text )

◆ uiTemplateIDPreview()

void uiTemplateIDPreview ( uiLayout * layout,
bContext * C,
PointerRNA * ptr,
const StringRefNull propname,
const char * newop,
const char * openop,
const char * unlinkop,
int rows,
int cols,
int filter,
const bool hide_buttons )

◆ uiTemplateIDTabs()

void uiTemplateIDTabs ( uiLayout * layout,
bContext * C,
PointerRNA * ptr,
blender::StringRefNull propname,
const char * newop,
const char * menu,
int filter = UI_TEMPLATE_ID_FILTER_ALL )

Version of uiTemplateID using tabs.

Definition at line 1753 of file interface_template_id.cc.

References C, filter, ptr, UI_ID_BROWSE, UI_ID_RENAME, and ui_template_id().