31#include "RNA_prototypes.hh"
135 ICON_ARROW_LEFTRIGHT);
141 "use_filter_sort_alpha",
147 "use_filter_sort_reverse",
156 const char *filter_raw = list.filter_byname;
159 const size_t slen = strlen(filter_raw);
162 if (slen + 3 <=
sizeof(storage_.filter_buff)) {
163 filter_ = storage_.filter_buff;
166 filter_ = storage_.filter_dyn =
static_cast<char *
>(
167 MEM_mallocN((slen + 3) *
sizeof(
char),
"filter_dyn"));
191 const int fn_flag = FNM_CASEFOLD | FNM_NOESCAPE;
192 if (fnmatch(filter_, name.c_str(), fn_flag) == 0) {
213 const char *propname,
226 if (
len && (order_by_name || item_filter_fn)) {
228 int order_idx = 0, i = 0;
234 if (item_filter_fn) {
241 bool do_order =
false;
245 namebuf =
BLI_strdup(get_name_fn(itemptr, i).c_str());
251 const char *name = namebuf ? namebuf :
"";
253 if (item_filter_fn) {
261 if (!filter_exclude) {
263 do_order = order_by_name;
267 else if (filter_exclude) {
269 do_order = order_by_name;
273 do_order = order_by_name;
277 names[order_idx].
org_idx = order_idx;
278 STRNCPY(names[order_idx++].name, name);
299 MEM_mallocN(
sizeof(
int) * order_idx,
"items_filter_neworder"));
300 for (new_idx = 0; new_idx < order_idx; new_idx++) {
334 const char *propname)
376 const char *propname,
378 const char *active_propname,
379 const char *item_dyntip_propname,
387 RNA_warning(
"template_list using default '%s' UIList class must provide a custom list_id",
392 if (!active_dataptr->
data) {
397 r_input_data->
dataptr = *dataptr;
400 if (!r_input_data->
prop) {
414 if (r_input_data->
prop) {
417 RNA_warning(
"Expected a collection data property");
424 RNA_warning(
"Expected an integer active data property");
430 RNA_warning(
"List type %s not found", listtype_name);
451 bool activei_mapping_pending =
true;
458 new_order_idx = order_reverse ? dyn_data->
items_shown - new_order_idx - 1 : new_order_idx;
461 new_order_idx = order_reverse ? dyn_data->
items_shown - ++reorder_i : reorder_i++;
464 r_items->
item_vec[new_order_idx].item = itemptr;
465 r_items->
item_vec[new_order_idx].org_idx = i;
470 if (activei_mapping_pending && activei == i) {
471 activei = new_order_idx;
473 activei_mapping_pending =
false;
476 else if (activei < i) {
480 if (prev_order_idx >= 0) {
481 activei = prev_order_idx;
485 activei = new_order_idx;
490 prev_ii = new_order_idx;
516 int prev_ii = -1, prev_i;
530 if (items_shown >= 0) {
546 const bool use_auto_size = (ui_list->
list_grip <
549 int actual_rows = layout_data->
rows;
550 int actual_maxrows = layout_data->
maxrows;
551 int columns = layout_data->
columns;
554 if (actual_rows <= 0) {
558 if (actual_maxrows < actual_rows) {
559 actual_maxrows =
max_ii(actual_rows, 5);
577 if (!use_auto_size) {
581 else if ((actual_rows != actual_maxrows) && (dyn_data->
height > actual_rows)) {
591 if (activei_row < ui_list->list_scroll) {
594 else if (activei_row >= ui_list->
list_scroll + actual_rows) {
595 ui_list->
list_scroll = activei_row - actual_rows + 1;
597 ui_list->
flag &= ~UILST_SCROLL_TO_ACTIVE_ITEM;
600 const int max_scroll =
max_ii(0, dyn_data->
height - actual_rows);
630 if (propname && propname[0] && itemptr && itemptr->
data) {
642 char *dyn_tooltip =
static_cast<char *
>(argN);
643 std::string tooltip_string = dyn_tooltip;
645 tooltip_string +=
'\n';
646 tooltip_string += tip;
648 return tooltip_string;
663 if (region ==
nullptr) {
698 ui_list->
type = ui_list_type;
720 uiLayout *glob =
nullptr, *box, *row, *
col, *subrow, *sub, *overlap;
722 int rnaicon = ICON_NONE, icon = ICON_NONE;
743 adjusted_layout_data.
columns = 1;
745 uilist_prepare(ui_list, items, &adjusted_layout_data, &visual_info);
756 const int org_i = items->
item_vec[i].org_idx;
757 const int flt_flag = items->
item_vec[i].flt_flag;
780 editable ?
TIP_(
"Select List Item "
781 "(Double click to rename)") :
782 TIP_(
"Select List Item"));
796 if (icon == ICON_DOT) {
859 if (icon == ICON_DOT) {
913 const int org_i = items->
item_vec[i].org_idx;
914 const int flt_flag = items->
item_vec[i].flt_flag;
917 if (!(i % layout_data->
columns)) {
970 if (!(i % layout_data->
columns)) {
973 uiItemL(subrow,
"", ICON_NONE);
1013 adjusted_layout_data.
columns = cols_per_row;
1014 uilist_prepare(ui_list, items, &adjusted_layout_data, &visual_info);
1020 const int org_i = items->
item_vec[i].org_idx;
1021 const int flt_flag = items->
item_vec[i].flt_flag;
1093 if (glob && add_filters_but) {
1121 ICON_DISCLOSURE_TRI_DOWN,
1129 TIP_(
"Hide filtering options"));
1172 ICON_DISCLOSURE_TRI_RIGHT,
1180 TIP_(
"Show filtering options"));
1206 const char *listtype_name,
1207 const char *list_id,
1209 const char *propname,
1211 const char *active_propname,
1212 const char *item_dyntip_propname,
1228 item_dyntip_propname,
1265 layout_data.
rows = rows;
1266 layout_data.
maxrows = maxrows;
1267 layout_data.
columns = columns;
1276 const char *listtype_name,
1277 const char *list_id,
1279 const char *propname,
1281 const char *active_propname,
1282 const char *item_dyntip_propname,
1297 item_dyntip_propname,
1308 bool create_properties)
1316 if (create_properties) {
1327 bool create_properties)
1335 if (create_properties) {
ARegion * CTX_wm_region_popup(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
void(*)(uiList *ui_list, const bContext *C, PointerRNA *, const char *propname) uiListFilterItemsFunc
void(*)(uiList *ui_list, const bContext *C, uiLayout *layout) uiListDrawFilterFunc
void(*)(uiList *ui_list, const bContext *C, uiLayout *layout, PointerRNA *dataptr, PointerRNA *itemptr, int icon, PointerRNA *active_dataptr, const char *active_propname, int index, int flt_flag) uiListDrawItemFunc
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE int round_fl_to_int(float a)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define STRNCPY(dst, src)
#define SNPRINTF(dst, format,...)
int char char int BLI_strcasecmp(const char *s1, const char *s2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
char char * BLI_strncpy_ensure_pad(char *__restrict dst, const char *__restrict src, char pad, size_t dst_maxncpy) ATTR_NONNULL(1
@ UILST_FLT_ITEM_NEVER_SHOW
@ UILST_SCROLL_TO_ACTIVE_ITEM
@ UILST_LAYOUT_BIG_PREVIEW_GRID
#define UI_LIST_AUTO_SIZE_THRESHOLD
#define UILST_FLT_SORT_MASK
void ED_region_tag_refresh_ui(ARegion *region)
Read Guarded memory(de)allocation.
#define RNA_PROP_BEGIN(sptr, itemptr, prop)
#define RNA_warning(format,...)
void UI_but_func_set(uiBut *but, std::function< void(bContext &)> func)
@ UI_LIST_ITEM_FILTER_MISMATCHES
@ UI_LIST_ITEM_NEVER_SHOW
@ UI_LIST_ITEM_FILTER_MATCHES
void UI_but_flag_disable(uiBut *but, int flag)
uiBut * uiDefButI(uiBlock *block, int type, int retval, blender::StringRef str, int x, int y, short width, short height, int *poin, float min, float max, const char *tip)
void UI_but_func_tooltip_set(uiBut *but, uiButToolTipFunc func, void *arg, uiFreeArgFunc free_arg)
uiBut * uiDefBut(uiBlock *block, int type, int retval, blender::StringRef str, int x, int y, short width, short height, void *poin, float min, float max, const char *tip)
void uiItemL(uiLayout *layout, const char *name, int icon)
uiBlock * uiLayoutGetBlock(uiLayout *layout)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
int UI_preview_tile_size_y(const int size_px=96)
void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, const char *name, int icon, const char *placeholder=nullptr)
void UI_block_flag_disable(uiBlock *block, int flag)
void UI_but_drawflag_enable(uiBut *but, int flag)
uiLayout * uiLayoutListBox(uiLayout *layout, uiList *ui_list, PointerRNA *actptr, PropertyRNA *actprop)
#define UI_UL_DEFAULT_CLASS_NAME
void UI_block_emboss_set(uiBlock *block, eUIEmbossType emboss)
int uiLayoutGetWidth(uiLayout *layout)
uiLayout * uiLayoutGridFlow(uiLayout *layout, bool row_major, int columns_len, bool even_columns, bool even_rows, bool align)
void uiLayoutListItemAddPadding(uiLayout *layout)
uiBut * uiDefIconButI(uiBlock *block, int type, int retval, int icon, int x, int y, short width, short height, int *poin, float min, float max, const char *tip)
uiBut * uiDefIconTextButR_prop(uiBlock *block, int type, int retval, int icon, const char *str, int x, int y, short width, short height, PointerRNA *ptr, PropertyRNA *prop, int index, float min, float max, const char *tip)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
int UI_preview_tile_size_x(const int size_px=96)
uiLayout * uiLayoutOverlap(uiLayout *layout)
uiBut * uiDefButR_prop(uiBlock *block, int type, int retval, const char *str, int x, int y, short width, short height, PointerRNA *ptr, PropertyRNA *prop, int index, float min, float max, const char *tip)
uiBut * uiDefIconButBitI(uiBlock *block, int type, int bit, int retval, int icon, int x, int y, short width, short height, int *poin, float min, float max, const char *tip)
void UI_block_flag_enable(uiBlock *block, int flag)
int UI_preview_tile_size_y_no_label(const int size_px=96)
bContextStore * uiLayoutGetContextStore(uiLayout *layout)
void UI_but_flag_enable(uiBut *but, int flag)
@ UI_TEMPLATE_LIST_SORT_LOCK
@ UI_TEMPLATE_LIST_SORT_REVERSE
@ UI_TEMPLATE_LIST_NO_NAMES
@ UI_TEMPLATE_LIST_NO_FILTER_OPTIONS
@ UI_TEMPLATE_LIST_NO_GRIP
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, eUI_Item_Flag flag, const char *name, int icon)
int UI_icon_from_rnaptr(const bContext *C, PointerRNA *ptr, int rnaicon, bool big)
void resize(const int64_t new_size)
uiListNameFilter(uiList &list)
eUIListFilterResult operator()(const PointerRNA &itemptr, blender::StringRefNull name, int index)
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
IMETHOD Vector diff(const Vector &a, const Vector &b, double dt)
uiListType * UI_UL_asset_view()
void ui_layout_list_set_labels_active(uiLayout *layout)
uiListType * UI_UL_cache_file_layers()
PointerRNA * UI_list_custom_drag_operator_set(uiList *ui_list, const char *opname, bool create_properties)
static int cmpstringp(const void *p1, const void *p2)
static uiList * ui_list_ensure(const bContext *C, uiListType *ui_list_type, const char *list_id, int layout_type, bool sort_reverse, bool sort_lock)
static std::string uilist_item_tooltip_func(bContext *, void *argN, const char *tip)
static void uilist_resize_update(bContext *C, uiList *ui_list)
static bool ui_template_list_data_retrieve(const char *listtype_name, const char *list_id, PointerRNA *dataptr, const char *propname, PointerRNA *active_dataptr, const char *active_propname, const char *item_dyntip_propname, TemplateListInputData *r_input_data, uiListType **r_list_type)
static void uilist_free_dyn_data(uiList *ui_list)
static void * uilist_item_use_dynamic_tooltip(PointerRNA *itemptr, const char *propname)
void uiTemplateList(uiLayout *layout, const bContext *C, const char *listtype_name, const char *list_id, PointerRNA *dataptr, const char *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)
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)
uiList * uiTemplateList_ex(uiLayout *layout, const bContext *C, const char *listtype_name, const char *list_id, PointerRNA *dataptr, const char *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, void *customdata)
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_draw_filter_default(uiList *ui_list, const bContext *, uiLayout *layout)
static void uilist_filter_items_default(uiList *ui_list, const bContext *C, PointerRNA *dataptr, const char *propname)
PointerRNA * UI_list_custom_activate_operator_set(uiList *ui_list, const char *opname, bool create_properties)
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_layout_draw(const bContext *C, uiList *ui_list, uiLayout *layout, TemplateListInputData *input_data, TemplateListItems *items, const TemplateListLayoutDrawData *layout_data, const enum uiTemplateListFlags flags)
static void uilist_prepare(uiList *ui_list, const TemplateListItems *items, const TemplateListLayoutDrawData *layout_data, TemplateListVisualInfo *r_visual_info)
bool UI_list_item_index_is_filtered_visible(const uiList *ui_list, const int item_idx)
static void uilist_draw_item_default(uiList *ui_list, const bContext *, uiLayout *layout, PointerRNA *, PointerRNA *itemptr, int icon, PointerRNA *, const char *, int, int)
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
ccl_device_inline float2 floor(const float2 a)
ccl_device_inline float3 ceil(const float3 a)
void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
StructRNA * RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
char * RNA_struct_name_get_alloc(PointerRNA *ptr, char *fixedbuf, int fixedlen, int *r_len)
PropertyType RNA_property_type(PropertyRNA *prop)
char * RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fixedbuf, int fixedlen, int *r_len)
const char * RNA_struct_identifier(const StructRNA *type)
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_flag(PropertyRNA *prop)
int RNA_struct_ui_icon(const StructRNA *type)
PropertyRNA * RNA_struct_name_property(const StructRNA *type)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
const char * RNA_property_identifier(const PropertyRNA *prop)
int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop)
blender::Vector< _uilist_item > item_vec
uiListDrawFilterFunc draw_filter
uiListDrawItemFunc draw_item
const bContextStore * context
struct wmOperatorType * custom_activate_optype
struct PointerRNA * custom_drag_opptr
uiListFreeRuntimeDataFunc free_runtime_data_fn
int * items_filter_neworder
struct wmOperatorType * custom_drag_optype
struct PointerRNA * custom_activate_opptr
uiListFilterItemsFunc filter_items
uiListDrawFilterFunc draw_filter
uiListDrawItemFunc draw_item
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_operator_properties_alloc(PointerRNA **ptr, IDProperty **properties, const char *opstring)
void WM_operator_properties_free(PointerRNA *ptr)
uiListType * WM_uilisttype_find(const char *idname, bool quiet)
bool WM_uilisttype_add(uiListType *ult)
void WM_uilisttype_to_full_list_id(const uiListType *ult, const char *list_id, char r_full_list_id[])