acid-drop

- Hacking the planet from a LilyGo T-Deck using custom firmware
git clone git://git.acid.vegas/acid-drop.git
Log | Files | Refs | Archive | README | LICENSE

lv_group.h (6980B)

      1 /**
      2  * @file lv_group.h
      3  *
      4  */
      5 
      6 #ifndef LV_GROUP_H
      7 #define LV_GROUP_H
      8 
      9 #ifdef __cplusplus
     10 extern "C" {
     11 #endif
     12 
     13 /*********************
     14  *      INCLUDES
     15  *********************/
     16 
     17 #include "../lv_conf_internal.h"
     18 
     19 #include <stdint.h>
     20 #include <stdbool.h>
     21 #include "../misc/lv_ll.h"
     22 #include "../misc/lv_types.h"
     23 
     24 /*********************
     25  *      DEFINES
     26  *********************/
     27 /*Predefined keys to control the focused object via lv_group_send(group, c)*/
     28 
     29 enum {
     30     LV_KEY_UP        = 17,  /*0x11*/
     31     LV_KEY_DOWN      = 18,  /*0x12*/
     32     LV_KEY_RIGHT     = 19,  /*0x13*/
     33     LV_KEY_LEFT      = 20,  /*0x14*/
     34     LV_KEY_ESC       = 27,  /*0x1B*/
     35     LV_KEY_DEL       = 127, /*0x7F*/
     36     LV_KEY_BACKSPACE = 8,   /*0x08*/
     37     LV_KEY_ENTER     = 10,  /*0x0A, '\n'*/
     38     LV_KEY_NEXT      = 9,   /*0x09, '\t'*/
     39     LV_KEY_PREV      = 11,  /*0x0B, '*/
     40     LV_KEY_HOME      = 2,   /*0x02, STX*/
     41     LV_KEY_END       = 3,   /*0x03, ETX*/
     42 };
     43 typedef uint8_t lv_key_t;
     44 
     45 /**********************
     46  *      TYPEDEFS
     47  **********************/
     48 
     49 struct _lv_obj_t;
     50 struct _lv_group_t;
     51 
     52 typedef void (*lv_group_focus_cb_t)(struct _lv_group_t *);
     53 
     54 /**
     55  * Groups can be used to logically hold objects so that they can be individually focused.
     56  * They are NOT for laying out objects on a screen (try layouts for that).
     57  */
     58 typedef struct _lv_group_t {
     59     lv_ll_t obj_ll;        /**< Linked list to store the objects in the group*/
     60     struct _lv_obj_t ** obj_focus; /**< The object in focus*/
     61 
     62     lv_group_focus_cb_t focus_cb;              /**< A function to call when a new object is focused (optional)*/
     63 #if LV_USE_USER_DATA
     64     void * user_data;
     65 #endif
     66 
     67     uint8_t frozen : 1;         /**< 1: can't focus to new object*/
     68     uint8_t editing : 1;        /**< 1: Edit mode, 0: Navigate mode*/
     69     uint8_t refocus_policy : 1; /**< 1: Focus prev if focused on deletion. 0: Focus next if focused on
     70                                    deletion.*/
     71     uint8_t wrap : 1;           /**< 1: Focus next/prev can wrap at end of list. 0: Focus next/prev stops at end
     72                                    of list.*/
     73 } lv_group_t;
     74 
     75 
     76 typedef enum {
     77     LV_GROUP_REFOCUS_POLICY_NEXT = 0,
     78     LV_GROUP_REFOCUS_POLICY_PREV = 1
     79 } lv_group_refocus_policy_t;
     80 
     81 /**********************
     82  * GLOBAL PROTOTYPES
     83  **********************/
     84 
     85 /**
     86  * Init. the group module
     87  * @remarks Internal function, do not call directly.
     88  */
     89 void _lv_group_init(void);
     90 
     91 /**
     92  * Create a new object group
     93  * @return          pointer to the new object group
     94  */
     95 lv_group_t * lv_group_create(void);
     96 
     97 /**
     98  * Delete a group object
     99  * @param group     pointer to a group
    100  */
    101 void lv_group_del(lv_group_t * group);
    102 
    103 /**
    104  * Set a default group. New object are added to this group if it's enabled in their class with `add_to_def_group = true`
    105  * @param group     pointer to a group (can be `NULL`)
    106  */
    107 void lv_group_set_default(lv_group_t * group);
    108 
    109 /**
    110  * Get the default group
    111  * @return          pointer to the default group
    112  */
    113 lv_group_t * lv_group_get_default(void);
    114 
    115 /**
    116  * Add an object to a group
    117  * @param group     pointer to a group
    118  * @param obj       pointer to an object to add
    119  */
    120 void lv_group_add_obj(lv_group_t * group, struct _lv_obj_t * obj);
    121 
    122 /**
    123  * Swap 2 object in a group. The object must be in the same group
    124  * @param obj1  pointer to an object
    125  * @param obj2  pointer to an other object
    126  */
    127 void lv_group_swap_obj(struct _lv_obj_t * obj1, struct _lv_obj_t * obj2);
    128 
    129 /**
    130  * Remove an object from its group
    131  * @param obj       pointer to an object to remove
    132  */
    133 void lv_group_remove_obj(struct _lv_obj_t * obj);
    134 
    135 /**
    136  * Remove all objects from a group
    137  * @param group     pointer to a group
    138  */
    139 void lv_group_remove_all_objs(lv_group_t * group);
    140 
    141 /**
    142  * Focus on an object (defocus the current)
    143  * @param obj       pointer to an object to focus on
    144  */
    145 void lv_group_focus_obj(struct _lv_obj_t * obj);
    146 
    147 /**
    148  * Focus the next object in a group (defocus the current)
    149  * @param group     pointer to a group
    150  */
    151 void lv_group_focus_next(lv_group_t * group);
    152 
    153 /**
    154  * Focus the previous object in a group (defocus the current)
    155  * @param group     pointer to a group
    156  */
    157 void lv_group_focus_prev(lv_group_t * group);
    158 
    159 /**
    160  * Do not let to change the focus from the current object
    161  * @param group     pointer to a group
    162  * @param en        true: freeze, false: release freezing (normal mode)
    163  */
    164 void lv_group_focus_freeze(lv_group_t * group, bool en);
    165 
    166 /**
    167  * Send a control character to the focuses object of a group
    168  * @param group     pointer to a group
    169  * @param c         a character (use LV_KEY_.. to navigate)
    170  * @return          result of focused object in group.
    171  */
    172 lv_res_t lv_group_send_data(lv_group_t * group, uint32_t c);
    173 
    174 /**
    175  * Set a function for a group which will be called when a new object is focused
    176  * @param group         pointer to a group
    177  * @param focus_cb      the call back function or NULL if unused
    178  */
    179 void lv_group_set_focus_cb(lv_group_t * group, lv_group_focus_cb_t focus_cb);
    180 
    181 /**
    182  * Set whether the next or previous item in a group is focused if the currently focused obj is
    183  * deleted.
    184  * @param group         pointer to a group
    185  * @param policy        new refocus policy enum
    186  */
    187 void lv_group_set_refocus_policy(lv_group_t * group, lv_group_refocus_policy_t policy);
    188 
    189 /**
    190  * Manually set the current mode (edit or navigate).
    191  * @param group         pointer to group
    192  * @param edit          true: edit mode; false: navigate mode
    193  */
    194 void lv_group_set_editing(lv_group_t * group, bool edit);
    195 
    196 /**
    197  * Set whether focus next/prev will allow wrapping from first->last or last->first object.
    198  * @param group         pointer to group
    199  * @param               en true: wrapping enabled; false: wrapping disabled
    200  */
    201 void lv_group_set_wrap(lv_group_t * group, bool en);
    202 
    203 /**
    204  * Get the focused object or NULL if there isn't one
    205  * @param group         pointer to a group
    206  * @return              pointer to the focused object
    207  */
    208 struct _lv_obj_t * lv_group_get_focused(const lv_group_t * group);
    209 
    210 /**
    211  * Get the focus callback function of a group
    212  * @param group pointer to a group
    213  * @return the call back function or NULL if not set
    214  */
    215 lv_group_focus_cb_t lv_group_get_focus_cb(const lv_group_t * group);
    216 
    217 /**
    218  * Get the current mode (edit or navigate).
    219  * @param group         pointer to group
    220  * @return              true: edit mode; false: navigate mode
    221  */
    222 bool lv_group_get_editing(const lv_group_t * group);
    223 
    224 /**
    225  * Get whether focus next/prev will allow wrapping from first->last or last->first object.
    226  * @param group         pointer to group
    227  * @param               en true: wrapping enabled; false: wrapping disabled
    228  */
    229 bool lv_group_get_wrap(lv_group_t * group);
    230 
    231 /**
    232  * Get the number of object in the group
    233  * @param group         pointer to a group
    234  * @return              number of objects in the group
    235  */
    236 uint32_t lv_group_get_obj_count(lv_group_t * group);
    237 
    238 /**********************
    239  *      MACROS
    240  **********************/
    241 
    242 #ifdef __cplusplus
    243 } /*extern "C"*/
    244 #endif
    245 
    246 #endif /*LV_GROUP_H*/