| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #include "menu_item.h"
- #include <stdlib.h>
- #include <assert.h>
- #include <string.h>
- #include <flipper.h>
- struct MenuItem {
- MenuItemType type;
- const char* label;
- void* icon;
- MenuItem* parent;
- void* data;
- };
- MenuItem* menu_item_alloc() {
- MenuItem* menu_item = furi_alloc(sizeof(MenuItem));
- return menu_item;
- }
- MenuItem* menu_item_alloc_menu(const char* label, void* icon) {
- MenuItem* menu_item = menu_item_alloc();
- menu_item->type = MenuItemTypeMenu;
- menu_item->label = label;
- menu_item->icon = icon;
- MenuItemArray_t* items = furi_alloc(sizeof(MenuItemArray_t));
- MenuItemArray_init(*items);
- menu_item->data = items;
- return menu_item;
- }
- MenuItem* menu_item_alloc_function(const char* label, void* icon, MenuItemCallback function) {
- MenuItem* menu_item = menu_item_alloc();
- menu_item->type = MenuItemTypeFunction;
- menu_item->label = label;
- menu_item->icon = icon;
- menu_item->data = function;
- return menu_item;
- }
- void menu_item_release(MenuItem* menu_item) {
- if(menu_item->type == MenuItemTypeMenu) free(menu_item->data);
- free(menu_item);
- }
- MenuItem* menu_item_get_parent(MenuItem* menu_item) {
- return menu_item->parent;
- }
- void menu_item_subitem_add(MenuItem* menu_item, MenuItem* sub_item) {
- assert(menu_item->type == MenuItemTypeMenu);
- MenuItemArray_t* items = menu_item->data;
- sub_item->parent = menu_item;
- MenuItemArray_push_back(*items, sub_item);
- }
- uint8_t menu_item_get_type(MenuItem* menu_item) {
- return menu_item->type;
- }
- void menu_item_set_label(MenuItem* menu_item, const char* label) {
- menu_item->label = label;
- }
- const char* menu_item_get_label(MenuItem* menu_item) {
- return menu_item->label;
- }
- void menu_item_set_icon(MenuItem* menu_item, void* icon) {
- menu_item->icon = icon;
- }
- void* menu_item_get_icon(MenuItem* menu_item) {
- return menu_item->icon;
- }
- MenuItemArray_t* menu_item_get_subitems(MenuItem* menu_item) {
- assert(menu_item->type == MenuItemTypeMenu);
- return menu_item->data;
- }
- MenuItemCallback menu_item_get_function(MenuItem* menu_item) {
- assert(menu_item->type == MenuItemTypeFunction);
- return menu_item->data;
- }
|