Blender V5.0
interface_template_list.cc File Reference
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include "BLI_fnmatch.h"
#include "BLI_function_ref.hh"
#include "BLI_listbase.h"
#include "BLI_math_base.h"
#include "BLI_string.h"
#include "BLI_string_ref.hh"
#include "BLI_string_utf8.h"
#include "BLI_utildefines.h"
#include "BLI_vector.hh"
#include "BKE_screen.hh"
#include "BLT_translation.hh"
#include "ED_screen.hh"
#include "MEM_guardedalloc.h"
#include "RNA_access.hh"
#include "RNA_prototypes.hh"
#include "UI_interface_layout.hh"
#include "UI_view2d.hh"
#include "WM_api.hh"
#include "interface_intern.hh"

Go to the source code of this file.

Classes

struct  TemplateListInputData
struct  _uilist_item
struct  TemplateListItems
struct  TemplateListLayoutDrawData
struct  TemplateListVisualInfo
struct  StringCmp

Functions

static void uilist_draw_item_default (uiList *ui_list, const bContext *, uiLayout *layout, PointerRNA *, PointerRNA *itemptr, int icon, PointerRNA *, const char *, int, int)
static void uilist_draw_filter_default (uiList *ui_list, const bContext *, uiLayout *layout)
static int cmpstringp (const void *p1, const void *p2)
void UI_list_filter_and_sort_items (uiList *ui_list, const bContext *, uiListItemFilterFn item_filter_fn, PointerRNA *dataptr, const char *propname, uiListItemGetNameFn get_name_fn)
bool UI_list_item_index_is_filtered_visible (const uiList *ui_list, const int item_idx)
static void uilist_filter_items_default (uiList *ui_list, const bContext *C, PointerRNA *dataptr, const char *propname)
static void uilist_free_dyn_data (uiList *ui_list)
static bool ui_template_list_data_retrieve (const StringRef listtype_name, const char *list_id, PointerRNA *dataptr, const StringRefNull propname, PointerRNA *active_dataptr, const StringRefNull active_propname, const char *item_dyntip_propname, TemplateListInputData *r_input_data, uiListType **r_list_type)
static void ui_template_list_collect_items (PointerRNA *list_ptr, PropertyRNA *list_prop, const uiList *ui_list, int activei, TemplateListItems *r_items)
static void ui_template_list_collect_display_items (const bContext *C, uiList *ui_list, TemplateListInputData *input_data, const uiListFilterItemsFunc filter_items_fn, TemplateListItems *r_items)
static void uilist_prepare (uiList *ui_list, const TemplateListItems *items, const TemplateListLayoutDrawData *layout_data, TemplateListVisualInfo *r_visual_info)
static void uilist_resize_update (bContext *C, uiList *ui_list)
static void * uilist_item_use_dynamic_tooltip (PointerRNA *itemptr, const char *propname)
static std::string uilist_item_tooltip_func (bContext *, void *argN, const StringRef tip)
static uiListui_list_ensure (const bContext *C, uiListType *ui_list_type, const char *list_id, int layout_type, bool sort_reverse, bool sort_lock)
static void ui_template_list_layout_draw (const bContext *C, uiList *ui_list, uiLayout *layout, TemplateListInputData *input_data, TemplateListItems *items, const TemplateListLayoutDrawData *layout_data, const enum uiTemplateListFlags flags)
uiListuiTemplateList_ex (uiLayout *layout, const bContext *C, const char *listtype_name, const char *list_id, PointerRNA *dataptr, const StringRefNull propname, PointerRNA *active_dataptr, const StringRefNull active_propname, const char *item_dyntip_propname, int rows, int maxrows, int layout_type, int columns, enum uiTemplateListFlags flags, void *customdata)
void uiTemplateList (uiLayout *layout, const bContext *C, const char *listtype_name, const char *list_id, PointerRNA *dataptr, blender::StringRefNull propname, PointerRNA *active_dataptr, const char *active_propname, const char *item_dyntip_propname, int rows, int maxrows, int layout_type, int columns, enum uiTemplateListFlags flags)
List-types Registration
void ED_uilisttypes_ui ()

Function Documentation

◆ cmpstringp()

int cmpstringp ( const void * p1,
const void * p2 )
static

Definition at line 195 of file interface_template_list.cc.

References BLI_strcasecmp(), and name.

Referenced by UI_list_filter_and_sort_items().

◆ ED_uilisttypes_ui()

void ED_uilisttypes_ui ( )

Definition at line 1196 of file interface_template_list.cc.

References UI_UL_cache_file_layers(), and WM_uilisttype_add().

Referenced by ED_spacetypes_init().

◆ ui_list_ensure()

◆ UI_list_filter_and_sort_items()

void UI_list_filter_and_sort_items ( uiList * ui_list,
const bContext * C,
uiListItemFilterFn item_filter_fn,
PointerRNA * dataptr,
const char * propname,
uiListItemGetNameFn get_name_fn = nullptr )

Helper to apply custom filtering to UI lists not defined in Python. Custom filtering for Python UI lists has own code. This is also used as the default filtering if no uiListType::filter_items callback is set.

Filters list items using item_filter_fn and sorts the result. Also handles alphabetical sorting (UILST_FLT_SORT_ALPHA), and result inverting (UILST_FLT_EXCLUDE) if enabled, so the callback doesn't have to do this (unlike the filter function in Python).

Call this from a uiListType::filter_items callback with any #item_filter_fn. uiListNameFilter can be used to apply the default name based filtering.

Parameters
get_name_fnIn some cases the name cannot be retrieved via RNA. This function can be set to provide the name still.

Definition at line 202 of file interface_template_list.cc.

References BLI_strdup(), cmpstringp(), uiList::dyn_data, uiList::filter_flag, uiList::filter_sort_flag, i, uiListDyn::items_filter_flags, uiListDyn::items_filter_neworder, uiListDyn::items_len, uiListDyn::items_shown, len, MEM_calloc_arrayN(), MEM_freeN(), MEM_malloc_arrayN(), name, StringCmp::org_idx, RNA_PROP_BEGIN, RNA_PROP_END, RNA_property_collection_length(), RNA_struct_find_property(), RNA_struct_name_get_alloc(), STRNCPY(), UI_LIST_ITEM_FILTER_MATCHES, UI_LIST_ITEM_NEVER_SHOW, UILST_FLT_EXCLUDE, UILST_FLT_ITEM, UILST_FLT_ITEM_NEVER_SHOW, UILST_FLT_SORT_ALPHA, and UILST_FLT_SORT_LOCK.

Referenced by uilist_filter_items_default().

◆ UI_list_item_index_is_filtered_visible()

bool UI_list_item_index_is_filtered_visible ( const uiList * ui_list,
const int item_idx )

◆ ui_template_list_collect_display_items()

◆ ui_template_list_collect_items()

◆ ui_template_list_data_retrieve()

bool ui_template_list_data_retrieve ( const StringRef listtype_name,
const char * list_id,
PointerRNA * dataptr,
const StringRefNull propname,
PointerRNA * active_dataptr,
const StringRefNull active_propname,
const char * item_dyntip_propname,
TemplateListInputData * r_input_data,
uiListType ** r_list_type )
static

◆ ui_template_list_layout_draw()

void ui_template_list_layout_draw ( const bContext * C,
uiList * ui_list,
uiLayout * layout,
TemplateListInputData * input_data,
TemplateListItems * items,
const TemplateListLayoutDrawData * layout_data,
const enum uiTemplateListFlags flags )
static

Definition at line 692 of file interface_template_list.cc.

References TemplateListInputData::active_dataptr, TemplateListItems::active_item_idx, TemplateListInputData::activeprop, uiLayout::block(), C, col, uiLayout::column(), TemplateListLayoutDrawData::columns, uiBut::context, PointerRNA::data, TemplateListInputData::dataptr, TemplateListLayoutDrawData::draw_filter, TemplateListLayoutDrawData::draw_item, uiList::dyn_data, blender::ui::Emboss, TemplateListVisualInfo::end_idx, uiList::filter_flag, uiLayout::grid_flow(), Grip, uiListDyn::height, i, TemplateListInputData::item_dyntip_propname, TemplateListItems::item_vec, uiListDyn::items_shown, uiList::layout_type, uiLayout::list_box(), uiList::list_grip, uiList::list_scroll, ListRow, MEM_freeN(), blender::ui::None, Num, uiLayout::overlap(), TemplateListInputData::prop, PROP_EDITABLE, uiListDyn::resize, uiListDyn::resize_prev, RNA_property_flag(), RNA_property_identifier(), RNA_property_pointer_type(), RNA_struct_ui_icon(), uiLayout::row(), Scroll, Sepr, Vector< T, InlineBufferCapacity, Allocator >::size(), SNPRINTF_UTF8, TemplateListVisualInfo::start_idx, TIP_, Toggle, UI_block_emboss_set(), UI_block_flag_disable(), UI_block_flag_enable(), UI_BLOCK_LIST_ITEM, UI_BUT_DISABLED, UI_but_drawflag_enable(), UI_but_flag_disable(), UI_but_flag_enable(), UI_but_func_set(), UI_but_func_tooltip_set(), UI_BUT_NO_TOOLTIP, UI_BUT_UNDO, UI_icon_from_rnaptr(), ui_layout_list_set_labels_active(), UI_preview_tile_size_x(), UI_preview_tile_size_y(), UI_preview_tile_size_y_no_label(), UI_TEMPLATE_LIST_NO_FILTER_OPTIONS, UI_TEMPLATE_LIST_NO_GRIP, UI_TEMPLATE_LIST_NO_NAMES, UI_UNIT_X, UI_UNIT_Y, uiDefBut(), uiDefButI(), uiDefButR_prop(), uiDefIconButBitI(), uiDefIconButI(), uiDefIconTextButR_prop(), uiLayoutListItemAddPadding(), uilist_item_tooltip_func(), uilist_item_use_dynamic_tooltip(), uilist_prepare(), uilist_resize_update(), UILST_FLT_SHOW, UILST_LAYOUT_BIG_PREVIEW_GRID, UILST_LAYOUT_COMPACT, UILST_LAYOUT_DEFAULT, V2D_SCROLL_WIDTH, uiButScrollBar::visual_height, uiListDyn::visual_height, and TemplateListVisualInfo::visual_items.

Referenced by uiTemplateList_ex().

◆ uilist_draw_filter_default()

◆ uilist_draw_item_default()

void uilist_draw_item_default ( uiList * ui_list,
const bContext * ,
uiLayout * layout,
PointerRNA * ,
PointerRNA * itemptr,
int icon,
PointerRNA * ,
const char * ,
int ,
int  )
static

◆ uilist_filter_items_default()

void uilist_filter_items_default ( uiList * ui_list,
const bContext * C,
PointerRNA * dataptr,
const char * propname )
static

Default UI List filtering: Filter by name.

Definition at line 322 of file interface_template_list.cc.

References C, uiList::filter_byname, and UI_list_filter_and_sort_items().

Referenced by uiTemplateList_ex().

◆ uilist_free_dyn_data()

void uilist_free_dyn_data ( uiList * ui_list)
static

◆ uilist_item_tooltip_func()

std::string uilist_item_tooltip_func ( bContext * ,
void * argN,
const StringRef tip )
static

◆ uilist_item_use_dynamic_tooltip()

void * uilist_item_use_dynamic_tooltip ( PointerRNA * itemptr,
const char * propname )
static

◆ uilist_prepare()

◆ uilist_resize_update()

◆ uiTemplateList()

void uiTemplateList ( uiLayout * layout,
const bContext * C,
const char * listtype_name,
const char * list_id,
PointerRNA * dataptr,
blender::StringRefNull propname,
PointerRNA * active_dataptr,
const char * active_propname,
const char * item_dyntip_propname,
int rows,
int maxrows,
int layout_type,
int columns,
enum uiTemplateListFlags flags )

◆ uiTemplateList_ex()