Last uiList patch (for now!): filtering and reordering of shown elements.
[blender.git] / source / blender / makesdna / DNA_screen_types.h
index 8e18a84060a568abcebef692a615068f5cf87c04..435f5c634a9e52017c0857f554710f435aa1ae27 100644 (file)
@@ -123,6 +123,10 @@ typedef struct uiListDyn {
 
        int items_len;                /* Number of items in collection. */
        int items_shown;              /* Number of items actually visible after filtering. */
+
+       /* Filtering data. */
+       int *items_filter_flags;      /* items_len length. */
+       int *items_filter_neworder;   /* org_idx -> new_idx, items_len length. */
 } uiListDyn;
 
 typedef struct uiList {           /* some list UI data need to be saved in file */
@@ -140,6 +144,14 @@ typedef struct uiList {           /* some list UI data need to be saved in file
        int list_last_len;
        int padi1;
 
+       /* Filtering data. */
+       char filter_byname[64];       /* defined as UI_MAX_NAME_STR */
+       int filter_flag;
+       int filter_orderby_flag;
+
+       /* Custom sub-classes properties. */
+       IDProperty *properties;
+
        /* Dynamic data (runtime). */
        uiListDyn *dyn_data;
 } uiList;
@@ -259,6 +271,25 @@ enum {
        UILST_RESIZING                = 1 << 1,          /* We are currently resizing, deactivate autosize! */
 };
 
+/* uiList filter flags (dyn_data) */
+enum {
+       UILST_FLT_ITEM      = 1 << 31,  /* This item has passed the filter process successfully. */
+};
+
+/* uiList filter options */
+enum {
+       UILST_FLT_SHOW      = 1 << 0,          /* Show filtering UI. */
+       UILST_FLT_EXCLUDE   = UILST_FLT_ITEM,  /* Exclude filtered items, *must* use this same value. */
+};
+
+/* uiList filter orderby type */
+enum {
+       UILST_FLT_ORDERBY_NAME         = 1 << 0,
+       UILST_FLT_ORDERBY_REVERSE      = 1 << 31  /* Special value, bitflag used to reverse order! */
+};
+
+#define UILST_FLT_ORDERBY_MASK (((unsigned int)UILST_FLT_ORDERBY_REVERSE) - 1)
+
 /* regiontype, first two are the default set */
 /* Do NOT change order, append on end. Types are hardcoded needed */
 enum {