26 #include "RNA_prototypes.h"
92 const char *
UNUSED(active_propname),
126 uiItemR(subrow, &listptr,
"filter_name", 0,
"", ICON_NONE);
132 ICON_ARROW_LEFTRIGHT);
138 "use_filter_sort_alpha",
144 "use_filter_sort_reverse",
165 const char *propname)
171 char *
filter = (
char *)filter_raw, filter_buff[32], *filter_dyn =
nullptr;
179 if (
len && (order_by_name || filter_raw[0])) {
181 int order_idx = 0, i = 0;
187 const size_t slen = strlen(filter_raw);
194 if (slen + 3 <=
sizeof(filter_buff)) {
198 filter = filter_dyn =
static_cast<char *
>(
199 MEM_mallocN((slen + 3) *
sizeof(
char),
"filter_dyn"));
205 bool do_order =
false;
219 const char *name = namebuf ? namebuf :
"";
223 if (fnmatch(
filter, name, FNM_CASEFOLD) == 0) {
225 if (!filter_exclude) {
227 do_order = order_by_name;
231 else if (filter_exclude) {
233 do_order = order_by_name;
237 do_order = order_by_name;
241 names[order_idx].org_idx = order_idx;
263 MEM_mallocN(
sizeof(
int) * order_idx,
"items_filter_neworder"));
264 for (new_idx = 0; new_idx < order_idx; new_idx++) {
308 const char *propname,
310 const char *active_propname,
311 const char *item_dyntip_propname,
315 memset(r_input_data, 0,
sizeof(*r_input_data));
319 RNA_warning(
"template_list using default '%s' UIList class must provide a custom list_id",
324 if (!active_dataptr->
data) {
329 r_input_data->
dataptr = *dataptr;
332 if (!r_input_data->
prop) {
346 if (r_input_data->
prop) {
349 RNA_warning(
"Expected a collection data property");
356 RNA_warning(
"Expected an integer active data property");
362 RNA_warning(
"List type %s not found", listtype_name);
383 bool activei_mapping_pending =
true;
391 new_order_idx = order_reverse ? dyn_data->
items_shown - new_order_idx - 1 : new_order_idx;
394 new_order_idx = order_reverse ? dyn_data->
items_shown - ++reorder_i : reorder_i++;
403 if (activei_mapping_pending && activei == i) {
404 activei = new_order_idx;
406 activei_mapping_pending =
false;
409 else if (activei < i) {
413 if (prev_order_idx >= 0) {
414 activei = prev_order_idx;
418 activei = new_order_idx;
423 prev_ii = new_order_idx;
444 memset(r_items, 0,
sizeof(*r_items));
452 int prev_ii = -1, prev_i;
466 if (items_shown >= 0) {
501 const bool use_auto_size = (ui_list->
list_grip <
504 int actual_rows = layout_data->
rows;
505 int actual_maxrows = layout_data->
maxrows;
506 int columns = layout_data->
columns;
509 if (actual_rows <= 0) {
513 if (actual_maxrows < actual_rows) {
514 actual_maxrows =
max_ii(actual_rows, 5);
532 if (!use_auto_size) {
536 else if ((actual_rows != actual_maxrows) && (dyn_data->
height > actual_rows)) {
545 if (activei_row < ui_list->list_scroll) {
548 else if (activei_row >= ui_list->
list_scroll + actual_rows) {
549 ui_list->
list_scroll = activei_row - actual_rows + 1;
554 const int max_scroll =
max_ii(0, dyn_data->
height - actual_rows);
585 if (propname && propname[0] && itemptr && itemptr->
data) {
597 char *dyn_tooltip =
static_cast<char *
>(argN);
613 if (region ==
nullptr) {
648 ui_list->
type = ui_list_type;
670 uiLayout *glob =
nullptr, *box, *row, *
col, *subrow, *sub, *overlap;
672 int rnaicon = ICON_NONE, icon = ICON_NONE;
693 adjusted_layout_data.
columns = 1;
695 uilist_prepare(ui_list, items, &adjusted_layout_data, &visual_info);
729 TIP_(
"Double click to rename"));
738 if (icon == ICON_DOT) {
798 if (icon == ICON_DOT) {
858 if (!(i % layout_data->
columns)) {
913 if (!(i % layout_data->
columns)) {
916 uiItemL(subrow,
"", ICON_NONE);
955 adjusted_layout_data.
columns = cols_per_row;
956 uilist_prepare(ui_list, items, &adjusted_layout_data, &visual_info);
1037 if (glob && add_filters_but) {
1065 ICON_DISCLOSURE_TRI_DOWN,
1075 TIP_(
"Hide filtering options"));
1122 ICON_DISCLOSURE_TRI_RIGHT,
1132 TIP_(
"Show filtering options"));
1160 const char *listtype_name,
1161 const char *list_id,
1163 const char *propname,
1165 const char *active_propname,
1166 const char *item_dyntip_propname,
1182 item_dyntip_propname,
1218 layout_data.
rows = rows;
1219 layout_data.
maxrows = maxrows;
1220 layout_data.
columns = columns;
1231 const char *listtype_name,
1232 const char *list_id,
1234 const char *propname,
1236 const char *active_propname,
1237 const char *item_dyntip_propname,
1252 item_dyntip_propname,
1263 bool create_properties)
1271 if (create_properties) {
1282 bool create_properties)
1290 if (create_properties) {
struct ARegion * CTX_wm_menu(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
void(* uiListDrawItemFunc)(struct uiList *ui_list, struct bContext *C, struct uiLayout *layout, struct PointerRNA *dataptr, struct PointerRNA *itemptr, int icon, struct PointerRNA *active_dataptr, const char *active_propname, int index, int flt_flag)
void(* uiListFilterItemsFunc)(struct uiList *ui_list, struct bContext *C, struct PointerRNA *, const char *propname)
void(* uiListDrawFilterFunc)(struct uiList *ui_list, struct bContext *C, struct uiLayout *layout)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT 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)
size_t size_t char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
int BLI_strcasecmp(const char *s1, const char *s2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
char * BLI_strncpy_ensure_pad(char *__restrict dst, const char *__restrict src, char pad, size_t maxncpy) ATTR_NONNULL()
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
typedef double(DMatrix)[4][4]
#define UI_LIST_AUTO_SIZE_THRESHOLD
@ UILST_SCROLL_TO_ACTIVE_ITEM
@ UILST_LAYOUT_BIG_PREVIEW_GRID
#define UILST_FLT_SORT_MASK
const char * ED_asset_handle_get_name(const struct AssetHandle *asset)
void ED_region_tag_refresh_ui(struct ARegion *region)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position CLAMP
#define RNA_PROP_BEGIN(sptr, itemptr, prop)
#define RNA_warning(format,...)
void UI_but_flag_disable(uiBut *but, int flag)
uiBut * uiDefIconTextButR_prop(uiBlock *block, int type, int retval, int icon, const char *str, int x, int y, short width, short height, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, float min, float max, float a1, float a2, const char *tip)
struct bContextStore * uiLayoutGetContextStore(uiLayout *layout)
uiBlock * uiLayoutGetBlock(uiLayout *layout)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
uiLayout * uiLayoutGridFlow(uiLayout *layout, bool row_major, int columns_len, bool even_columns, bool even_rows, bool align)
uiLayout * uiLayoutOverlap(uiLayout *layout)
uiBut * uiDefBut(uiBlock *block, int type, int retval, const char *str, int x, int y, short width, short height, void *poin, float min, float max, float a1, float a2, const char *tip)
uiBut * uiDefIconButI(uiBlock *block, int type, int retval, int icon, int x, int y, short width, short height, int *poin, float min, float max, float a1, float a2, const char *tip)
void UI_but_func_tooltip_set(uiBut *but, uiButToolTipFunc func, void *arg, uiFreeArgFunc free_arg)
void uiItemL(uiLayout *layout, const char *name, int icon)
void UI_block_flag_disable(uiBlock *block, int flag)
void UI_but_drawflag_enable(uiBut *but, int flag)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
#define UI_UL_DEFAULT_CLASS_NAME
uiLayout * uiLayoutListBox(uiLayout *layout, struct uiList *ui_list, struct PointerRNA *actptr, struct PropertyRNA *actprop)
void UI_block_emboss_set(uiBlock *block, eUIEmbossType emboss)
int UI_preview_tile_size_x(void)
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
void UI_but_func_set(uiBut *but, uiButHandleFunc func, void *arg1, void *arg2)
uiBut * uiDefButR_prop(uiBlock *block, int type, int retval, const char *str, int x, int y, short width, short height, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, float min, float max, float a1, float a2, const char *tip)
int uiLayoutGetWidth(uiLayout *layout)
uiBut * uiDefButI(uiBlock *block, int type, int retval, const char *str, int x, int y, short width, short height, int *poin, float min, float max, float a1, float a2, const char *tip)
int UI_preview_tile_size_y(void)
void uiItemFullR(uiLayout *layout, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, int value, int flag, const char *name, int icon)
void UI_block_flag_enable(uiBlock *block, int flag)
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, float a1, float a2, const char *tip)
int UI_preview_tile_size_y_no_label(void)
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
int UI_icon_from_rnaptr(const struct bContext *C, struct PointerRNA *ptr, int rnaicon, bool big)
DO_INLINE void filter(lfVector *V, fmatrix3x3 *S)
struct uiListType * UI_UL_cache_file_layers(void)
void ui_layout_list_set_labels_active(uiLayout *layout)
struct uiListType * UI_UL_asset_view(void)
static int cmpstringp(const void *p1, const void *p2)
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)
void uiTemplateList(uiLayout *layout, 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)
PointerRNA * UI_list_custom_drag_operator_set(uiList *ui_list, const char *opname, bool create_properties)
static void uilist_resize_update_cb(bContext *C, void *arg1, void *UNUSED(arg2))
uiList * uiTemplateList_ex(uiLayout *layout, 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_free_items(TemplateListItems *items)
static void uilist_free_dyn_data(uiList *ui_list)
static void uilist_draw_filter_default(struct uiList *ui_list, struct bContext *UNUSED(C), struct uiLayout *layout)
static void ui_template_list_layout_draw(bContext *C, uiList *ui_list, uiLayout *layout, TemplateListInputData *input_data, TemplateListItems *items, const TemplateListLayoutDrawData *layout_data, const enum uiTemplateListFlags flags)
static uiList * ui_list_ensure(bContext *C, uiListType *ui_list_type, const char *list_id, int layout_type, bool sort_reverse, bool sort_lock)
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, uiListDyn *dyn_data, int filter_exclude, bool order_reverse, int activei, TemplateListItems *r_items)
static void * uilist_item_use_dynamic_tooltip(PointerRNA *itemptr, const char *propname)
static char * uilist_item_tooltip_func(bContext *UNUSED(C), void *argN, const char *tip)
static void uilist_filter_items_default(struct uiList *ui_list, struct bContext *UNUSED(C), struct PointerRNA *dataptr, const char *propname)
static void uilist_prepare(uiList *ui_list, const TemplateListItems *items, const TemplateListLayoutDrawData *layout_data, TemplateListVisualInfo *r_visual_info)
static void ui_template_list_collect_display_items(bContext *C, uiList *ui_list, TemplateListInputData *input_data, const uiListFilterItemsFunc filter_items_fn, TemplateListItems *r_items)
static void uilist_draw_item_default(struct uiList *ui_list, struct bContext *UNUSED(C), struct uiLayout *layout, struct PointerRNA *UNUSED(dataptr), struct PointerRNA *itemptr, int icon, struct PointerRNA *UNUSED(active_dataptr), const char *UNUSED(active_propname), int UNUSED(index), int UNUSED(flt_flag))
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
ccl_device_inline float3 ceil(const float3 &a)
IMETHOD Vector diff(const Vector &a, const Vector &b, double dt=1)
const char * RNA_struct_identifier(const StructRNA *type)
void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
const char * RNA_property_identifier(const PropertyRNA *prop)
char * RNA_struct_name_get_alloc(PointerRNA *ptr, char *fixedbuf, int fixedlen, int *r_len)
PropertyType RNA_property_type(PropertyRNA *prop)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
char * RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fixedbuf, int fixedlen, int *r_len)
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
StructRNA * RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
int RNA_struct_ui_icon(const StructRNA *type)
PropertyRNA * RNA_struct_name_property(const StructRNA *type)
int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop)
char name[MAX_IDPROP_NAME]
uiListDrawFilterFunc draw_filter
uiListDrawItemFunc draw_item
struct 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)
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[])
uiListType * WM_uilisttype_find(const char *idname, bool quiet)