#ifndef BLINKY_UI_PAGE_H_ #define BLINKY_UI_PAGE_H_ #include #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_ */