67 lines
1.1 KiB
C
67 lines
1.1 KiB
C
|
|
#ifndef BLINKY_UI_PAGE_H_
|
||
|
|
#define BLINKY_UI_PAGE_H_
|
||
|
|
|
||
|
|
#include <stdbool.h>
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif
|
||
|
|
|
||
|
|
struct ui_page;
|
||
|
|
|
||
|
|
struct ui_page_ops {
|
||
|
|
void (*init)(struct ui_page *page);
|
||
|
|
void (*deinit)(struct ui_page *page);
|
||
|
|
void (*refresh)(struct ui_page *page);
|
||
|
|
};
|
||
|
|
|
||
|
|
struct ui_page {
|
||
|
|
const struct ui_page_ops *ops;
|
||
|
|
struct ui_page *parent;
|
||
|
|
bool initialized;
|
||
|
|
};
|
||
|
|
|
||
|
|
static inline void ui_page_init(struct ui_page *page)
|
||
|
|
{
|
||
|
|
if ((page == NULL) || (page->ops == NULL)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (page->initialized) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (page->ops->init != NULL) {
|
||
|
|
page->ops->init(page);
|
||
|
|
}
|
||
|
|
page->initialized = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
static inline void ui_page_deinit(struct ui_page *page)
|
||
|
|
{
|
||
|
|
if ((page == NULL) || !page->initialized || (page->ops == NULL)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (page->ops->deinit != NULL) {
|
||
|
|
page->ops->deinit(page);
|
||
|
|
}
|
||
|
|
page->initialized = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
static inline void ui_page_refresh(struct ui_page *page)
|
||
|
|
{
|
||
|
|
if ((page == NULL) || !page->initialized ||
|
||
|
|
(page->ops == NULL) || (page->ops->refresh == NULL)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
page->ops->refresh(page);
|
||
|
|
}
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif /* BLINKY_UI_PAGE_H_ */
|