/** * @file lv_keyboard.h * */ #ifndef LV_KEYBOARD_H #define LV_KEYBOARD_H #ifdef __cplusplus extern "C" { #endif /********************* * INCLUDES *********************/ #include "../../../widgets/lv_btnmatrix.h" #if LV_USE_KEYBOARD /*Testing of dependencies*/ #if LV_USE_BTNMATRIX == 0 #error "lv_kb: lv_btnm is required. Enable it in lv_conf.h (LV_USE_BTNMATRIX 1) " #endif #if LV_USE_TEXTAREA == 0 #error "lv_kb: lv_ta is required. Enable it in lv_conf.h (LV_USE_TEXTAREA 1) " #endif /********************* * DEFINES *********************/ #define LV_KEYBOARD_CTRL_BTN_FLAGS (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKED) /********************** * TYPEDEFS **********************/ /** Current keyboard mode.*/ enum { LV_KEYBOARD_MODE_TEXT_LOWER, LV_KEYBOARD_MODE_TEXT_UPPER, LV_KEYBOARD_MODE_SPECIAL, LV_KEYBOARD_MODE_NUMBER, LV_KEYBOARD_MODE_USER_1, LV_KEYBOARD_MODE_USER_2, LV_KEYBOARD_MODE_USER_3, LV_KEYBOARD_MODE_USER_4, }; typedef uint8_t lv_keyboard_mode_t; /*Data of keyboard*/ typedef struct { lv_btnmatrix_t btnm; lv_obj_t * ta; /*Pointer to the assigned text area*/ lv_keyboard_mode_t mode; /*Key map type*/ uint8_t popovers : 1; /*Show button titles in popovers on press*/ } lv_keyboard_t; extern const lv_obj_class_t lv_keyboard_class; /********************** * GLOBAL PROTOTYPES **********************/ /** * Create a Keyboard object * @param parent pointer to an object, it will be the parent of the new keyboard * @return pointer to the created keyboard */ lv_obj_t * lv_keyboard_create(lv_obj_t * parent); /*===================== * Setter functions *====================*/ /** * Assign a Text Area to the Keyboard. The pressed characters will be put there. * @param kb pointer to a Keyboard object * @param ta pointer to a Text Area object to write there */ void lv_keyboard_set_textarea(lv_obj_t * kb, lv_obj_t * ta); /** * Set a new a mode (text or number map) * @param kb pointer to a Keyboard object * @param mode the mode from 'lv_keyboard_mode_t' */ void lv_keyboard_set_mode(lv_obj_t * kb, lv_keyboard_mode_t mode); /** * Show the button title in a popover when pressed. * @param kb pointer to a Keyboard object * @param en whether "popovers" mode is enabled */ void lv_keyboard_set_popovers(lv_obj_t * kb, bool en); /** * Set a new map for the keyboard * @param kb pointer to a Keyboard object * @param mode keyboard map to alter 'lv_keyboard_mode_t' * @param map pointer to a string array to describe the map. * See 'lv_btnmatrix_set_map()' for more info. */ void lv_keyboard_set_map(lv_obj_t * kb, lv_keyboard_mode_t mode, const char * map[], const lv_btnmatrix_ctrl_t ctrl_map[]); /*===================== * Getter functions *====================*/ /** * Assign a Text Area to the Keyboard. The pressed characters will be put there. * @param kb pointer to a Keyboard object * @return pointer to the assigned Text Area object */ lv_obj_t * lv_keyboard_get_textarea(const lv_obj_t * kb); /** * Set a new a mode (text or number map) * @param kb pointer to a Keyboard object * @return the current mode from 'lv_keyboard_mode_t' */ lv_keyboard_mode_t lv_keyboard_get_mode(const lv_obj_t * kb); /** * Tell whether "popovers" mode is enabled or not. * @param kb pointer to a Keyboard object * @return true: "popovers" mode is enabled; false: disabled */ bool lv_btnmatrix_get_popovers(const lv_obj_t * obj); /** * Get the current map of a keyboard * @param kb pointer to a keyboard object * @return the current map */ static inline const char ** lv_keyboard_get_map_array(const lv_obj_t * kb) { return lv_btnmatrix_get_map(kb); } /** * Get the index of the lastly "activated" button by the user (pressed, released, focused etc) * Useful in the `event_cb` to get the text of the button, check if hidden etc. * @param obj pointer to button matrix object * @return index of the last released button (LV_BTNMATRIX_BTN_NONE: if unset) */ static inline uint16_t lv_keyboard_get_selected_btn(const lv_obj_t * obj) { return lv_btnmatrix_get_selected_btn(obj); } /** * Get the button's text * @param obj pointer to button matrix object * @param btn_id the index a button not counting new line characters. * @return text of btn_index` button */ static inline const char * lv_keyboard_get_btn_text(const lv_obj_t * obj, uint16_t btn_id) { return lv_btnmatrix_get_btn_text(obj, btn_id); } /*===================== * Other functions *====================*/ /** * Default keyboard event to add characters to the Text area and change the map. * If a custom `event_cb` is added to the keyboard this function can be called from it to handle the * button clicks * @param kb pointer to a keyboard * @param event the triggering event */ void lv_keyboard_def_event_cb(lv_event_t * e); /********************** * MACROS **********************/ #endif /*LV_USE_KEYBOARD*/ #ifdef __cplusplus } /*extern "C"*/ #endif #endif /*LV_KEYBOARD_H*/