From: Olaf Wintermann Date: Sat, 1 Nov 2025 20:37:10 +0000 (+0100) Subject: replace kotlin MenuBuilder class with Menu extension functions X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=4dc03f5e768538fcec5acb428beca08d8381929b;p=rssreader.git replace kotlin MenuBuilder class with Menu extension functions --- diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt index 31cf151..1d7790d 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt @@ -6,6 +6,9 @@ import de.unixwork.ui.Toolkit import de.unixwork.ui.kotlin.ToolkitDispatcher import de.unixwork.ui.kotlin.toolbarItem import de.unixwork.ui.kotlin.addToolbarDefault +import de.unixwork.ui.kotlin.menuItem +import de.unixwork.ui.kotlin.radioItem +import de.unixwork.ui.kotlin.separator import de.unixwork.ui.kotlin.toolbarAppMenu import de.unixwork.ui.kotlin.toolbarToggleItem import kotlinx.coroutines.Dispatchers diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt index ec7c95a..b47ced7 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt @@ -2,6 +2,7 @@ package de.unixwork.rssreader import de.unixwork.ui.ColumnType import de.unixwork.ui.LinkButtonType +import de.unixwork.ui.Menu import de.unixwork.ui.SubListItem import de.unixwork.ui.TabViewType import de.unixwork.ui.TableModel @@ -9,6 +10,7 @@ import de.unixwork.ui.UiInteger import de.unixwork.ui.UiList import de.unixwork.ui.UiString import de.unixwork.ui.UiText +import de.unixwork.ui.kotlin.MenuBuilder import de.unixwork.ui.kotlin.Toplevel import de.unixwork.ui.kotlin.dialogWindow import de.unixwork.ui.kotlin.openFileDialog @@ -36,7 +38,20 @@ class MainWindow() { var currentSublistIndex = -1 var currentFeedIndex = -1 + val contextMenu: MenuBuilder + init { + contextMenu = MenuBuilder(Menu()) + contextMenu.menuItem(label = "Move Up") { + + } + contextMenu.menuItem(label = "Move Down") { + + } + contextMenu.menuItem(label = "Delete") { + + } + setDefaultWindowSize(1600, 900) window = splitViewWindow(title = "RSS Reader", sidebar = true) { sidebar { @@ -70,6 +85,7 @@ class MainWindow() { ) { elm: FeedCollection?, i, sublist -> val item = SubListItem() + //item.buttonMenu = contextMenu elm?.let { item.label = it.name if(it.unreadItemsCount > 0 && it.itemStateMode != 2) { diff --git a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt index b6d59d7..f97a9bd 100644 --- a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt +++ b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Menu.kt @@ -12,48 +12,43 @@ import de.unixwork.ui.MenuUI import de.unixwork.ui.Toolbar import de.unixwork.ui.ToolbarPosition -class MenuBuilder(menu: Menu) { - private val menu = menu - - fun menuItem(label: String? = null, icon: String? = null, onClick: EventHandler? = null) { - val item = MenuItem(label, onClick) - menu.add(item) - } +fun Menu.menuItem(label: String? = null, icon: String? = null, onClick: EventHandler? = null) { + val item = MenuItem(label, onClick) + add(item) +} - fun menu(label: String, block: MenuBuilder.() -> Unit) { - val subMenu = Menu(label) - val builder = MenuBuilder(subMenu) - builder.block() - menu.add(subMenu) - } +fun Menu.menu(label: String, block: Menu.() -> Unit) { + val subMenu = Menu(label) + subMenu.block() + add(subMenu) +} - fun checkItem(label: String? = null, icon: String? = null, varname: String? = null, onChange: EventHandler? = null) { - val item = MenuCheckItem(label, varname) - item.icon = icon - item.onChange = onChange - menu.add(item) - } +fun Menu.checkItem(label: String? = null, icon: String? = null, varname: String? = null, onChange: EventHandler? = null) { + val item = MenuCheckItem(label, varname) + item.icon = icon + item.onChange = onChange + add(item) +} - fun radioItem(label: String? = null, icon: String? = null, varname: String? = null, onChange: EventHandler? = null) { - val item = MenuRadioItem(label, varname) - item.icon = icon - item.onChange = onChange - menu.add(item) - } +fun Menu.radioItem(label: String? = null, icon: String? = null, varname: String? = null, onChange: EventHandler? = null) { + val item = MenuRadioItem(label, varname) + item.icon = icon + item.onChange = onChange + add(item) +} - fun separator() { - menu.add(MenuSeparator()) - } +fun Menu.separator() { + add(MenuSeparator()) } -fun applicationMenu(block: MenuBuilder.() -> Unit) { + +fun applicationMenu(block: Menu.() -> Unit) { Application.setAppMenu(menuBuilder(block)) } -fun menuBuilder(block: MenuBuilder.() -> Unit) : Menu { +fun menuBuilder(block: Menu.() -> Unit) : Menu { val menu = Menu() - val builder = MenuBuilder(menu) - builder.block() + menu.block() return menu } @@ -65,11 +60,11 @@ fun toolbarToggleItem(name: String, label: String? = null, icon: String? = null, Toolbar.toggleItem(name, label, icon, tooltip, varname, onChange) } -fun toolbarMenu(name: String?, label: String? = null, icon: String? = null, tooltip: String? = null, block: MenuBuilder.() -> Unit) { +fun toolbarMenu(name: String?, label: String? = null, icon: String? = null, tooltip: String? = null, block: Menu.() -> Unit) { Toolbar.menu(name, label, icon, tooltip, menuBuilder(block)) } -fun toolbarAppMenu(block: MenuBuilder.() -> Unit) { +fun toolbarAppMenu(block: Menu.() -> Unit) { Toolbar.menu(null, null, null, menuBuilder(block)) }