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_keyboard.h (5159B)

      1 /**
      2  * @file lv_keyboard.h
      3  *
      4  */
      5 
      6 #ifndef LV_KEYBOARD_H
      7 #define LV_KEYBOARD_H
      8 
      9 #ifdef __cplusplus
     10 extern "C" {
     11 #endif
     12 
     13 /*********************
     14  *      INCLUDES
     15  *********************/
     16 #include "../../../widgets/lv_btnmatrix.h"
     17 
     18 #if LV_USE_KEYBOARD
     19 
     20 /*Testing of dependencies*/
     21 #if LV_USE_BTNMATRIX == 0
     22 #error "lv_kb: lv_btnm is required. Enable it in lv_conf.h (LV_USE_BTNMATRIX  1) "
     23 #endif
     24 
     25 #if LV_USE_TEXTAREA == 0
     26 #error "lv_kb: lv_ta is required. Enable it in lv_conf.h (LV_USE_TEXTAREA  1) "
     27 #endif
     28 
     29 /*********************
     30  *      DEFINES
     31  *********************/
     32 #define LV_KEYBOARD_CTRL_BTN_FLAGS (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKED)
     33 
     34 /**********************
     35  *      TYPEDEFS
     36  **********************/
     37 
     38 /** Current keyboard mode.*/
     39 enum {
     40     LV_KEYBOARD_MODE_TEXT_LOWER,
     41     LV_KEYBOARD_MODE_TEXT_UPPER,
     42     LV_KEYBOARD_MODE_SPECIAL,
     43     LV_KEYBOARD_MODE_NUMBER,
     44     LV_KEYBOARD_MODE_USER_1,
     45     LV_KEYBOARD_MODE_USER_2,
     46     LV_KEYBOARD_MODE_USER_3,
     47     LV_KEYBOARD_MODE_USER_4,
     48 };
     49 typedef uint8_t lv_keyboard_mode_t;
     50 
     51 /*Data of keyboard*/
     52 typedef struct {
     53     lv_btnmatrix_t btnm;
     54     lv_obj_t * ta;              /*Pointer to the assigned text area*/
     55     lv_keyboard_mode_t mode;    /*Key map type*/
     56     uint8_t popovers : 1;       /*Show button titles in popovers on press*/
     57 } lv_keyboard_t;
     58 
     59 extern const lv_obj_class_t lv_keyboard_class;
     60 
     61 /**********************
     62  * GLOBAL PROTOTYPES
     63  **********************/
     64 
     65 /**
     66  * Create a Keyboard object
     67  * @param parent pointer to an object, it will be the parent of the new keyboard
     68  * @return pointer to the created keyboard
     69  */
     70 lv_obj_t * lv_keyboard_create(lv_obj_t * parent);
     71 
     72 /*=====================
     73  * Setter functions
     74  *====================*/
     75 
     76 /**
     77  * Assign a Text Area to the Keyboard. The pressed characters will be put there.
     78  * @param kb pointer to a Keyboard object
     79  * @param ta pointer to a Text Area object to write there
     80  */
     81 void lv_keyboard_set_textarea(lv_obj_t * kb, lv_obj_t * ta);
     82 
     83 /**
     84  * Set a new a mode (text or number map)
     85  * @param kb pointer to a Keyboard object
     86  * @param mode the mode from 'lv_keyboard_mode_t'
     87  */
     88 void lv_keyboard_set_mode(lv_obj_t * kb, lv_keyboard_mode_t mode);
     89 
     90 /**
     91  * Show the button title in a popover when pressed.
     92  * @param kb pointer to a Keyboard object
     93  * @param en whether "popovers" mode is enabled
     94  */
     95 void lv_keyboard_set_popovers(lv_obj_t * kb, bool en);
     96 
     97 /**
     98  * Set a new map for the keyboard
     99  * @param kb pointer to a Keyboard object
    100  * @param mode keyboard map to alter 'lv_keyboard_mode_t'
    101  * @param map pointer to a string array to describe the map.
    102  *            See 'lv_btnmatrix_set_map()' for more info.
    103  */
    104 void lv_keyboard_set_map(lv_obj_t * kb, lv_keyboard_mode_t mode, const char * map[],
    105                          const lv_btnmatrix_ctrl_t ctrl_map[]);
    106 
    107 /*=====================
    108  * Getter functions
    109  *====================*/
    110 
    111 /**
    112  * Assign a Text Area to the Keyboard. The pressed characters will be put there.
    113  * @param kb pointer to a Keyboard object
    114  * @return pointer to the assigned Text Area object
    115  */
    116 lv_obj_t * lv_keyboard_get_textarea(const lv_obj_t * kb);
    117 
    118 /**
    119  * Set a new a mode (text or number map)
    120  * @param kb pointer to a Keyboard object
    121  * @return the current mode from 'lv_keyboard_mode_t'
    122  */
    123 lv_keyboard_mode_t lv_keyboard_get_mode(const lv_obj_t * kb);
    124 
    125 /**
    126  * Tell whether "popovers" mode is enabled or not.
    127  * @param kb pointer to a Keyboard object
    128  * @return true: "popovers" mode is enabled; false: disabled
    129  */
    130 bool lv_btnmatrix_get_popovers(const lv_obj_t * obj);
    131 
    132 /**
    133  * Get the current map of a keyboard
    134  * @param kb pointer to a keyboard object
    135  * @return the current map
    136  */
    137 static inline const char ** lv_keyboard_get_map_array(const lv_obj_t * kb)
    138 {
    139     return lv_btnmatrix_get_map(kb);
    140 }
    141 
    142 /**
    143  * Get the index of the lastly "activated" button by the user (pressed, released, focused etc)
    144  * Useful in the `event_cb` to get the text of the button, check if hidden etc.
    145  * @param obj       pointer to button matrix object
    146  * @return          index of the last released button (LV_BTNMATRIX_BTN_NONE: if unset)
    147  */
    148 static inline uint16_t lv_keyboard_get_selected_btn(const lv_obj_t * obj)
    149 {
    150     return lv_btnmatrix_get_selected_btn(obj);
    151 }
    152 
    153 /**
    154  * Get the button's text
    155  * @param obj       pointer to button matrix object
    156  * @param btn_id    the index a button not counting new line characters.
    157  * @return          text of btn_index` button
    158  */
    159 static inline const char * lv_keyboard_get_btn_text(const lv_obj_t * obj, uint16_t btn_id)
    160 {
    161     return lv_btnmatrix_get_btn_text(obj, btn_id);
    162 }
    163 
    164 /*=====================
    165  * Other functions
    166  *====================*/
    167 
    168 /**
    169  * Default keyboard event to add characters to the Text area and change the map.
    170  * If a custom `event_cb` is added to the keyboard this function can be called from it to handle the
    171  * button clicks
    172  * @param kb pointer to a keyboard
    173  * @param event the triggering event
    174  */
    175 void lv_keyboard_def_event_cb(lv_event_t * e);
    176 
    177 /**********************
    178  *      MACROS
    179  **********************/
    180 
    181 #endif  /*LV_USE_KEYBOARD*/
    182 
    183 #ifdef __cplusplus
    184 } /*extern "C"*/
    185 #endif
    186 
    187 #endif /*LV_KEYBOARD_H*/