ui/common/toolbar.c

branch
newapi
changeset 207
93b9f502cb88
parent 205
b1ac0dd1d38b
child 226
4eef1d49f794
--- a/ui/common/toolbar.c	Wed Oct 11 10:54:24 2023 +0200
+++ b/ui/common/toolbar.c	Wed Oct 11 19:11:38 2023 +0200
@@ -34,6 +34,9 @@
 
 static CxList* toolbar_defaults;
 
+static UiToolbarMenuItem* ui_appmenu;
+
+
 void uic_toolbar_init(void) {
 	toolbar_items = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 16);
 	toolbar_defaults = cxLinkedListCreateSimple(CX_STORE_POINTERS);
@@ -79,6 +82,33 @@
 	cxMapPut(toolbar_items, name, item);
 }
 
+static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs args) {
+	UiToolbarMenuArgs newargs;
+	newargs.label = nl_strdup(args.label);
+	newargs.stockid = nl_strdup(args.stockid);
+	newargs.icon = nl_strdup(args.icon);
+	return newargs;
+}
+
+UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs args) {
+	UiToolbarMenuItem* item = malloc(sizeof(UiToolbarMenuItem));
+	item->item.type = UI_TOOLBAR_MENU;
+	memset(&item->menu, 0, sizeof(UiMenu));
+	item->args = menuargs_copy(args);
+	
+	item->end = 0;
+
+	if (!name) {
+		// special appmenu
+		ui_appmenu = item;
+	} else {
+		// toplevel menu
+		cxMapPut(toolbar_items, name, item);
+	}
+
+	uic_add_menu_to_stack(&item->menu);
+}
+
 
 CxMap* uic_get_toolbar_items(void) {
 	return toolbar_items;
@@ -100,3 +130,7 @@
 UiToolbarItemI* uic_toolbar_get_item(const char* name) {
 	return cxMapGet(toolbar_items, name);
 }
+
+UiToolbarMenuItem* uic_get_appmenu(void) {
+	return ui_appmenu;
+}

mercurial