]> uap-core.de Git - rssreader.git/commitdiff
new kotlin menu API
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 3 Sep 2025 16:12:00 +0000 (18:12 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 3 Sep 2025 16:12:00 +0000 (18:12 +0200)
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt
ui-kotlin/src/test/kotlin/de/unixwork/ui/kotlin/demo/Test.kt

index 2ea7e14eb573ed28b121cba6e32f38f3a9ed2d92..545c96a53aeeb96a0f9b0806bc7cb5d1c243d78a 100644 (file)
@@ -1,21 +1,39 @@
 package de.unixwork.ui.kotlin
 
 import de.unixwork.ui.AppMenu
+import de.unixwork.ui.Application
 import de.unixwork.ui.EventHandler
+import de.unixwork.ui.Menu
+import de.unixwork.ui.MenuItem
 import de.unixwork.ui.MenuUI
 import de.unixwork.ui.Toolbar
 import de.unixwork.ui.ToolbarPosition
 
-fun menu(label: String, menu: MenuUI? = null) {
-    AppMenu.menu(label, menu)
+class MenuBuilder(menu: Menu) {
+    private val menu = menu
+
+    fun menuItem(label: String? = null, stockId: String? = null, icon: String? = null, onClick: EventHandler? = null) {
+        val item = MenuItem(label, onClick)
+        menu.add(item)
+    }
+
+    fun menu(label: String, block: MenuBuilder.() -> Unit) {
+        val subMenu = Menu(label)
+        val builder = MenuBuilder(subMenu)
+        builder.block()
+        menu.add(subMenu)
+    }
+}
+
+fun applicationMenu(block: MenuBuilder.() -> Unit) {
+    Application.setAppMenu(menuBuilder(block))
 }
 
-fun menuItem(label: String? = null, stockId: String? = null, icon: String? = null, onClick: EventHandler? = null) {
-   if(stockId != null) {
-       // TODO
-   } else {
-       AppMenu.menuItem(label, icon, onClick)
-   }
+fun menuBuilder(block: MenuBuilder.() -> Unit) : Menu {
+    val menu = Menu()
+    val builder = MenuBuilder(menu)
+    builder.block()
+    return menu
 }
 
 fun toolbarItem(name: String, label: String? = null, icon: String? = null, stockId: String? = null, onClick: EventHandler? = null) {
index 04b4e67b8c6817c6d07940499a89b7cca2b32a6c..74f2c1c1ba371140d95b01e762686960cc737e67 100644 (file)
@@ -11,6 +11,26 @@ class Test : Application {
         toolbarItem(name = "button1", label = "Test")
         addToolbarDefault("button1", ToolbarPosition.RIGHT);
 
+        applicationMenu {
+            menu("File") {
+                menuItem(label = "Open") {
+                    println("Open")
+                }
+                menuItem(label = "Exit") {
+                    System.exit(0)
+                }
+            }
+
+            menu("Edit") {
+                menuItem(label = "Copy") {
+                    println("Copy")
+                }
+                menuItem(label = "Paste") {
+                    println("Paste")
+                }
+            }
+        }
+
         val win = window("Test Window") {
             val mystr = ui.string()
             grid {