]> uap-core.de Git - rssreader.git/commitdiff
improve createCategory dialog and implement event handling in createFeedDialog
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 13 Aug 2025 17:18:39 +0000 (19:18 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 13 Aug 2025 17:18:39 +0000 (19:18 +0200)
rss-application/src/main/kotlin/de/unixwork/rssreader/FeedSourceList.kt
rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt
ui-java/src/main/java/de/unixwork/ui/ListViewBuilder.java
ui-java/src/main/java/de/unixwork/ui/UiList.java

index e900b40e5738ad5204872c8eb0049204f8ec71c1..43fc90108f93a8616a21f7d69f74b4df2e00710b 100644 (file)
@@ -2,7 +2,6 @@ package de.unixwork.rssreader
 
 import de.unixwork.ui.Document
 import de.unixwork.ui.SubList
-import de.unixwork.ui.UiList
 
 class FeedSourceList : Document() {
     val feeds = this.sourcelist("feeds")
index 8b3bdf5ef16c5b705625560732bae2d773a60748..dc933d9e9d57b97abd571b549b09560cd7797990 100644 (file)
@@ -1,7 +1,9 @@
 package de.unixwork.rssreader
 
 import de.unixwork.ui.SubListItem
+import de.unixwork.ui.UiList
 import de.unixwork.ui.UiString
+import de.unixwork.ui.UiText
 import de.unixwork.ui.kotlin.Toplevel
 import de.unixwork.ui.kotlin.sidebarWindow
 import de.unixwork.ui.kotlin.dialogWindow
@@ -48,19 +50,34 @@ class MainWindow {
     }
 
     private fun createFeedDialog() {
+        var groups: UiList<FeedGroup>? = null
+        var name: UiString? = null
+        var urls: UiText? = null
+
         val w = dialogWindow(
             parent = window.ui,
             title = "Add Feed",
+            defaultButton = 1,
             lbutton1 = "Add",
             rbutton4 = "Cancel",
             modal = true,
             showCloseButton = false,
             onClick = { ev ->
+                if(ev.intValue == 1) {
+                    val groupSel = groups?.selectedIndex
+                    val feedName = name.toString()
+                    val urlStr = urls.toString()
+                    println("groupSel: $groupSel, feedName: $feedName, urlStr: $urlStr")
+                }
                 ev.`object`.close()
             })
         {
             // data
-            ui.list<FeedGroup>("groups").addAll(sourceList.groups)
+            groups = ui.list<FeedGroup>()
+            name = ui.string()
+            urls = ui.text()
+
+            groups.addAll(sourceList.groups)
 
             // UI
             grid(
@@ -73,17 +90,17 @@ class MainWindow {
             {
                 row {
                     rlabel("Category")
-                    dropdown<FeedGroup>(varname = "groups", hexpand = true) { elm, column ->
+                    dropdown<FeedGroup>(value = groups, hexpand = true) { elm, column ->
                         elm.name
                     }
                 }
                 row {
                     rlabel("Name")
-                    textfield(varname = "name", hexpand = true)
+                    textfield(value = name, hexpand = true)
                 }
                 row {
                     rlabel("URLs", overrideDefaults = true, hfill = true) // overrideDefaults for disabling default vfill
-                    textarea(varname = "url", hexpand = true, vexpand = true, vfill = true)
+                    textarea(value = urls, hexpand = true, vexpand = true, vfill = true)
                 }
             }
         }
@@ -95,13 +112,21 @@ class MainWindow {
         val w = dialogWindow(
             parent = window.ui,
             title = "Add Category",
+            defaultButton = 1,
             lbutton1 = "Add",
             rbutton4 = "Cancel",
             modal = true,
             showCloseButton = false,
             onClick = { ev ->
-                val nameStr = name.toString()
-                Database.newFeedGroup(nameStr)
+                if(ev.intValue == 1) {
+                    val nameStr = name.toString()
+                    if(!nameStr.isBlank()) {
+                        Database.newFeedGroup(nameStr)
+                    } else {
+                        println("name is null or blank")
+                        return@dialogWindow
+                    }
+                }
                 ev.`object`.close()
             })
         {
index 93d6b2e0ca4a95e772e89a1d80afeea21388e9eb..376072c5940e2cce806ed4a72bc69f2db2f50f05 100644 (file)
@@ -91,6 +91,11 @@ public class ListViewBuilder<T> extends AbstractWidgetBuilder {
         return this;
     }
 
+    public ListViewBuilder<T> value(UiList<T> list) {
+        this.list = list;
+        return this;
+    }
+
     public ListViewBuilder<T> getvalue(ListValueConverter<T> getvalue) {
         this.getvalue = getvalue;
         return this;
index fa6cafc33a280636aa9f2bc082aef8b035746349..0fdce38d3f363d4cbe0ac3c3d4e83971c5629964 100644 (file)
@@ -93,6 +93,14 @@ public class UiList<T> extends ArrayList<T> {
         }
     }
 
+    public int getSelectedIndex() {
+        int[] selection = getSelection();
+        if(selection.length == 0) {
+            return -1;
+        }
+        return selection[0];
+    }
+
     public void free() {
         ToolkitFuncs tk = ToolkitFuncs.getInstance();
         try {