234 lines
6.3 KiB
C
234 lines
6.3 KiB
C
/**
|
|
* @file lv_menu.h
|
|
*
|
|
*/
|
|
|
|
#ifndef LV_MENU_H
|
|
#define LV_MENU_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#include "../../../core/lv_obj.h"
|
|
|
|
#if LV_USE_MENU
|
|
|
|
/*********************
|
|
* DEFINES
|
|
*********************/
|
|
|
|
/**********************
|
|
* TYPEDEFS
|
|
**********************/
|
|
|
|
enum {
|
|
LV_MENU_HEADER_TOP_FIXED, /* Header is positioned at the top */
|
|
LV_MENU_HEADER_TOP_UNFIXED, /* Header is positioned at the top and can be scrolled out of view*/
|
|
LV_MENU_HEADER_BOTTOM_FIXED /* Header is positioned at the bottom */
|
|
};
|
|
typedef uint8_t lv_menu_mode_header_t;
|
|
|
|
enum {
|
|
LV_MENU_ROOT_BACK_BTN_DISABLED,
|
|
LV_MENU_ROOT_BACK_BTN_ENABLED
|
|
};
|
|
typedef uint8_t lv_menu_mode_root_back_btn_t;
|
|
|
|
typedef struct lv_menu_load_page_event_data_t {
|
|
lv_obj_t * menu;
|
|
lv_obj_t * page;
|
|
} lv_menu_load_page_event_data_t;
|
|
|
|
typedef struct {
|
|
lv_obj_t * page;
|
|
} lv_menu_history_t;
|
|
|
|
typedef struct {
|
|
lv_obj_t obj;
|
|
lv_obj_t * storage; /* a pointer to obj that is the parent of all pages not displayed */
|
|
lv_obj_t * main;
|
|
lv_obj_t * main_page;
|
|
lv_obj_t * main_header;
|
|
lv_obj_t *
|
|
main_header_back_btn; /* a pointer to obj that on click triggers back btn event handler, can be same as 'main_header' */
|
|
lv_obj_t * main_header_title;
|
|
lv_obj_t * sidebar;
|
|
lv_obj_t * sidebar_page;
|
|
lv_obj_t * sidebar_header;
|
|
lv_obj_t *
|
|
sidebar_header_back_btn; /* a pointer to obj that on click triggers back btn event handler, can be same as 'sidebar_header' */
|
|
lv_obj_t * sidebar_header_title;
|
|
lv_obj_t * selected_tab;
|
|
lv_ll_t history_ll;
|
|
uint8_t cur_depth;
|
|
uint8_t prev_depth;
|
|
uint8_t sidebar_generated : 1;
|
|
lv_menu_mode_header_t mode_header : 2;
|
|
lv_menu_mode_root_back_btn_t mode_root_back_btn : 1;
|
|
} lv_menu_t;
|
|
|
|
typedef struct {
|
|
lv_obj_t obj;
|
|
char * title;
|
|
} lv_menu_page_t;
|
|
|
|
extern const lv_obj_class_t lv_menu_class;
|
|
extern const lv_obj_class_t lv_menu_page_class;
|
|
extern const lv_obj_class_t lv_menu_cont_class;
|
|
extern const lv_obj_class_t lv_menu_section_class;
|
|
extern const lv_obj_class_t lv_menu_separator_class;
|
|
extern const lv_obj_class_t lv_menu_sidebar_cont_class;
|
|
extern const lv_obj_class_t lv_menu_main_cont_class;
|
|
extern const lv_obj_class_t lv_menu_sidebar_header_cont_class;
|
|
extern const lv_obj_class_t lv_menu_main_header_cont_class;
|
|
/**********************
|
|
* GLOBAL PROTOTYPES
|
|
**********************/
|
|
|
|
/**
|
|
* Create a menu object
|
|
* @param parent pointer to an object, it will be the parent of the new menu
|
|
* @return pointer to the created menu
|
|
*/
|
|
lv_obj_t * lv_menu_create(lv_obj_t * parent);
|
|
|
|
/**
|
|
* Create a menu page object
|
|
* @param parent pointer to menu object
|
|
* @param title pointer to text for title in header (NULL to not display title)
|
|
* @return pointer to the created menu page
|
|
*/
|
|
lv_obj_t * lv_menu_page_create(lv_obj_t * parent, char * title);
|
|
|
|
/**
|
|
* Create a menu cont object
|
|
* @param parent pointer to an object, it will be the parent of the new menu cont object
|
|
* @return pointer to the created menu cont
|
|
*/
|
|
lv_obj_t * lv_menu_cont_create(lv_obj_t * parent);
|
|
|
|
/**
|
|
* Create a menu section object
|
|
* @param parent pointer to an object, it will be the parent of the new menu section object
|
|
* @return pointer to the created menu section
|
|
*/
|
|
lv_obj_t * lv_menu_section_create(lv_obj_t * parent);
|
|
|
|
/**
|
|
* Create a menu separator object
|
|
* @param parent pointer to an object, it will be the parent of the new menu separator object
|
|
* @return pointer to the created menu separator
|
|
*/
|
|
lv_obj_t * lv_menu_separator_create(lv_obj_t * parent);
|
|
/*=====================
|
|
* Setter functions
|
|
*====================*/
|
|
/**
|
|
* Set menu page to display in main
|
|
* @param obj pointer to the menu
|
|
* @param page pointer to the menu page to set (NULL to clear main and clear menu history)
|
|
*/
|
|
void lv_menu_set_page(lv_obj_t * obj, lv_obj_t * page);
|
|
|
|
/**
|
|
* Set menu page to display in sidebar
|
|
* @param obj pointer to the menu
|
|
* @param page pointer to the menu page to set (NULL to clear sidebar)
|
|
*/
|
|
void lv_menu_set_sidebar_page(lv_obj_t * obj, lv_obj_t * page);
|
|
|
|
/**
|
|
* Set the how the header should behave and its position
|
|
* @param obj pointer to a menu
|
|
* @param mode_header
|
|
*/
|
|
void lv_menu_set_mode_header(lv_obj_t * obj, lv_menu_mode_header_t mode_header);
|
|
|
|
/**
|
|
* Set whether back button should appear at root
|
|
* @param obj pointer to a menu
|
|
* @param mode_root_back_btn
|
|
*/
|
|
void lv_menu_set_mode_root_back_btn(lv_obj_t * obj, lv_menu_mode_root_back_btn_t mode_root_back_btn);
|
|
|
|
/**
|
|
* Add menu to the menu item
|
|
* @param menu pointer to the menu
|
|
* @param obj pointer to the obj
|
|
* @param page pointer to the page to load when obj is clicked
|
|
*/
|
|
void lv_menu_set_load_page_event(lv_obj_t * menu, lv_obj_t * obj, lv_obj_t * page);
|
|
|
|
/*=====================
|
|
* Getter functions
|
|
*====================*/
|
|
/**
|
|
* Get a pointer to menu page that is currently displayed in main
|
|
* @param obj pointer to the menu
|
|
* @return pointer to current page
|
|
*/
|
|
lv_obj_t * lv_menu_get_cur_main_page(lv_obj_t * obj);
|
|
|
|
/**
|
|
* Get a pointer to menu page that is currently displayed in sidebar
|
|
* @param obj pointer to the menu
|
|
* @return pointer to current page
|
|
*/
|
|
lv_obj_t * lv_menu_get_cur_sidebar_page(lv_obj_t * obj);
|
|
|
|
/**
|
|
* Get a pointer to main header obj
|
|
* @param obj pointer to the menu
|
|
* @return pointer to main header obj
|
|
*/
|
|
lv_obj_t * lv_menu_get_main_header(lv_obj_t * obj);
|
|
|
|
/**
|
|
* Get a pointer to main header back btn obj
|
|
* @param obj pointer to the menu
|
|
* @return pointer to main header back btn obj
|
|
*/
|
|
lv_obj_t * lv_menu_get_main_header_back_btn(lv_obj_t * obj);
|
|
|
|
/**
|
|
* Get a pointer to sidebar header obj
|
|
* @param obj pointer to the menu
|
|
* @return pointer to sidebar header obj
|
|
*/
|
|
lv_obj_t * lv_menu_get_sidebar_header(lv_obj_t * obj);
|
|
|
|
/**
|
|
* Get a pointer to sidebar header obj
|
|
* @param obj pointer to the menu
|
|
* @return pointer to sidebar header back btn obj
|
|
*/
|
|
lv_obj_t * lv_menu_get_sidebar_header_back_btn(lv_obj_t * obj);
|
|
|
|
/**
|
|
* Check if an obj is a root back btn
|
|
* @param menu pointer to the menu
|
|
* @return true if it is a root back btn
|
|
*/
|
|
bool lv_menu_back_btn_is_root(lv_obj_t * menu, lv_obj_t * obj);
|
|
|
|
/**
|
|
* Clear menu history
|
|
* @param obj pointer to the menu
|
|
*/
|
|
void lv_menu_clear_history(lv_obj_t * obj);
|
|
/**********************
|
|
* MACROS
|
|
**********************/
|
|
|
|
#endif /*LV_USE_MENU*/
|
|
|
|
#ifdef __cplusplus
|
|
} /*extern "C"*/
|
|
#endif
|
|
|
|
#endif /*LV_MENU_H*/
|