]> uap-core.de Git - rssreader.git/commitdiff
add toolbar menu item
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 10 Sep 2025 15:57:17 +0000 (17:57 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 10 Sep 2025 15:57:17 +0000 (17:57 +0200)
ui-java/src/main/java/de/unixwork/ui/Toolbar.java
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt

index 6f7795dacf11fae0c6a9974082fe3d2fd07b48f0..936ddcf8e95aea121097e1fb0610e51ead6d1cd0 100644 (file)
@@ -42,6 +42,34 @@ public class Toolbar {
         }
     }
 
+    public static void menu(String name, String label, String icon, Menu menu) {
+        MenuFuncs ui = MenuFuncs.getInstance();
+        ArgFuncs a = ArgFuncs.getInstance();
+        try (Arena arena = Arena.ofConfined()) {
+            MemorySegment nameCstr = MemorySegment.NULL;
+            if(name != null) {
+                nameCstr = arena.allocateFrom(name);
+            }
+
+            MemorySegment args = (MemorySegment) a.toolbar_menu_args_new.invoke();
+            if(label != null) {
+                MemorySegment cstr = arena.allocateFrom(label);
+                a.toolbar_menu_args_set_label.invoke(args, cstr);
+            }
+            if(icon != null) {
+                MemorySegment cstr = arena.allocateFrom(icon);
+                a.toolbar_menu_args_set_icon.invoke(args, cstr);
+            }
+
+            ui.toolbar_menu_create.invoke(nameCstr, args);
+            menu.create();
+            ui.menu_end.invoke();
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
     public static void addDefault(String name, ToolbarPosition position) {
         int pos = position.ordinal();
 
index 545c96a53aeeb96a0f9b0806bc7cb5d1c243d78a..8d8538c51c0a4a85051131660a3a4092eb0c6fa6 100644 (file)
@@ -44,6 +44,15 @@ fun toolbarItem(name: String, label: String? = null, icon: String? = null, stock
     }
 }
 
+fun toolbarMenu(name: String?, label: String? = null, icon: String? = null, stockId: String? = null, block: MenuBuilder.() -> Unit) {
+    // TODO: stockId
+    Toolbar.menu(name, label, icon, menuBuilder(block))
+}
+
+fun toolbarAppMenu(block: MenuBuilder.() -> Unit) {
+    Toolbar.menu(null, null, null, menuBuilder(block))
+}
+
 fun addToolbarDefault(name: String, position: ToolbarPosition) {
     Toolbar.addDefault(name, position)
 }