LVGL 库提交
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
/**
|
||||
* @file lv_tree.h
|
||||
* Tree. The tree nodes are dynamically allocated by the 'lv_mem' module.
|
||||
*/
|
||||
|
||||
#ifndef LV_TREE_H
|
||||
#define LV_TREE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "lv_types.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
#define LV_TREE_NODE(n) ((lv_tree_node_t*)(n))
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
struct _lv_tree_node_t;
|
||||
|
||||
/**
|
||||
* Describe the common methods of every object.
|
||||
* Similar to a C++ class.
|
||||
*/
|
||||
typedef struct _lv_tree_class_t {
|
||||
const struct _lv_tree_class_t * base_class;
|
||||
uint32_t instance_size;
|
||||
void (*constructor_cb)(const struct _lv_tree_class_t * class_p, struct _lv_tree_node_t * node);
|
||||
void (*destructor_cb)(const struct _lv_tree_class_t * class_p, struct _lv_tree_node_t * node);
|
||||
} lv_tree_class_t;
|
||||
|
||||
/** Description of a tree node*/
|
||||
typedef struct _lv_tree_node_t {
|
||||
struct _lv_tree_node_t * parent;
|
||||
struct _lv_tree_node_t ** children;
|
||||
uint32_t child_cnt;
|
||||
uint32_t child_cap;
|
||||
const struct _lv_tree_class_t * class_p;
|
||||
} lv_tree_node_t;
|
||||
|
||||
enum {
|
||||
LV_TREE_WALK_PRE_ORDER = 0,
|
||||
LV_TREE_WALK_POST_ORDER,
|
||||
};
|
||||
typedef uint8_t lv_tree_walk_mode_t;
|
||||
|
||||
typedef bool (*lv_tree_traverse_cb_t)(const lv_tree_node_t * node, void * user_data);
|
||||
typedef bool (*lv_tree_before_cb_t)(const lv_tree_node_t * node, void * user_data);
|
||||
typedef void (*lv_tree_after_cb_t)(const lv_tree_node_t * node, void * user_data);
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
extern const lv_tree_class_t lv_tree_node_class;
|
||||
|
||||
/**
|
||||
* @brief Create a tree node
|
||||
* @param class_p pointer to a class of the node
|
||||
* @param parent pointer to the parent node (or NULL if it's the root node)
|
||||
* @return pointer to the new node
|
||||
*/
|
||||
lv_tree_node_t * lv_tree_node_create(const lv_tree_class_t * class_p, lv_tree_node_t * parent);
|
||||
|
||||
/**
|
||||
* @brief Delete a tree node and all its children recursively
|
||||
* @param node pointer to the node to delete
|
||||
*/
|
||||
void lv_tree_node_delete(lv_tree_node_t * node);
|
||||
|
||||
/**
|
||||
* @brief Walk the tree recursively and call a callback function on each node
|
||||
* @param node pointer to the root node of the tree
|
||||
* @param mode LV_TREE_WALK_PRE_ORDER or LV_TREE_WALK_POST_ORDER
|
||||
* @param cb callback function to call on each node
|
||||
* @param bcb callback function to call before visiting a node
|
||||
* @param acb callback function to call after visiting a node
|
||||
* @param user_data user data to pass to the callback functions
|
||||
* @return true: traversal is finished; false: traversal broken
|
||||
*/
|
||||
bool lv_tree_walk(const lv_tree_node_t * node,
|
||||
lv_tree_walk_mode_t mode,
|
||||
lv_tree_traverse_cb_t cb,
|
||||
lv_tree_before_cb_t bcb,
|
||||
lv_tree_after_cb_t acb,
|
||||
void * user_data);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user