#pragma once /* If you want to create a new GUI (tab in terms of lvgl) for the touch screen, then - copy one of the existing GUIs, e.g. gui_numpad.cpp and gui_numpad.h - place the files in the right folder: - in folder "gui_general_and_keys" if they are of general purpose, not only for a specific device - in the device folder, if the GUI is specific for a certain device - in folder "scenes" if the GUI is intended for a specific scene It does not really matter where the files are placed, but doing so helps to keep a clean structure - rename the functions, they must not have the same name as the ones in the file you copied from - call "register_gui_();" in main.cpp register_gui(std::string(tabName), & create_tab_content_settings, & notify_tab_before_delete_settings); Technically spoken, to register a GUI, you need to provide several function pointers: - one for creating the content of the tab - one to persist the state of the gui before it will be deleted, if needed - and the name of the tab */ #include #include #include #include typedef void (*create_tab_content)(lv_obj_t* tab); typedef void (*notify_tab_before_delete)(void); // https://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work struct gui_definition { std::string this_name; create_tab_content this_create_tab_content; notify_tab_before_delete this_notify_tab_before_delete; uint32_t this_tabID; lv_obj_t* this_tab; }; extern std::map registered_guis_byName_map; extern std::vector list_of_guis_to_be_shown; void register_gui(std::string a_name, create_tab_content a_create_tab_content, notify_tab_before_delete a_notify_tab_before_delete);