]> uap-core.de Git - rssreader.git/commitdiff
handle sourcelist selection events and add FeedList controller
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 20 Aug 2025 18:08:44 +0000 (20:08 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 20 Aug 2025 18:08:44 +0000 (20:08 +0200)
rss-application/src/main/kotlin/de/unixwork/rssreader/FeedList.kt [new file with mode: 0644]
rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt

diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedList.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/FeedList.kt
new file mode 100644 (file)
index 0000000..2a8b5ab
--- /dev/null
@@ -0,0 +1,18 @@
+package de.unixwork.rssreader
+
+import de.unixwork.ui.Document
+
+class FeedList : Document() {
+    val items = list<Item>("items")
+
+    fun loadFeed(feed: FeedCollection) {
+        items.clear()
+        if(feed.itemsLoaded) {
+            feed.items.forEach { item ->
+                items.add(item)
+            }
+        } else {
+            // TODO: load items from DB
+        }
+    }
+}
\ No newline at end of file
index f61500a35f1edaab13efbd4016c03583c7cbd149..dca0ff48bea464c74edf1f222da3e80bb67aabe1 100644 (file)
@@ -12,12 +12,29 @@ import de.unixwork.ui.kotlin.openFileDialog
 class MainWindow {
     val window : Toplevel
     val sourceList = FeedSourceList()
+    val feedList = FeedList()
 
     init {
         window = sidebarWindow("RSS Reader") {
             sidebar {
                 vbox(fill = true) {
-                    sourcelist(fill = true, varname = "feeds") { elm: FeedCollection ->
+                    sourcelist(
+                        fill = true,
+                        varname = "feeds",
+                        onActivate = { event ->
+                            val evt = event.subListEventData
+                            try {
+                                val feed = sourceList.groups[evt.sublistIndex].feeds[evt.rowIndex]
+                                feed?.let {
+                                    println("feed: ${feed.name}")
+                                    feedList.loadFeed(feed)
+                                }
+                            } catch (e: Exception) {
+                                e.printStackTrace()
+                            }
+                        }
+                    )
+                    { elm: FeedCollection ->
                         val item = SubListItem()
                         item.label = elm.name
                         item
@@ -35,8 +52,8 @@ class MainWindow {
 
             hsplitpane(fill = true, initialPosition = 300) {
                 vbox(fill = true) {
-                    listview<String>(varname = "items", fill = true) { elm, col ->
-                        "todo"
+                    listview<Item>(varname = "items", fill = true) { elm, col ->
+                        elm.title
                     }
                 }
 
@@ -48,6 +65,7 @@ class MainWindow {
         }
 
         window.ui.attach(sourceList)
+        window.ui.attach(feedList)
     }
 
     private fun createFeedDialog() {
@@ -76,8 +94,12 @@ class MainWindow {
                     val uris = urlStr.split("\n").map { it.trim() }.filter { it.isNotBlank() }
                     println("groupSel: ${groups?.selectedIndex}, feedName: $feedName, urlStr: $urlStr")
                     parent?.let {
-                        val feedCol = Database.newFeeds(it, feedName, uris, user.toString(), password.toString(), cert.toString())
-                        parent.feeds.update()
+                        try {
+                            val feedCol = Database.newFeeds(it, feedName, uris, user.toString(), password.toString(), cert.toString())
+                            parent.feeds.update()
+                        } catch (e: Exception) {
+                            e.printStackTrace()
+                        }
                     }
                 }
                 ev.`object`.close()
@@ -156,7 +178,11 @@ class MainWindow {
                 if(ev.intValue == 1) {
                     val nameStr = name.toString()
                     if(!nameStr.isBlank()) {
-                        Database.newFeedGroup(sourceList,nameStr)
+                        try {
+                            Database.newFeedGroup(sourceList,nameStr)
+                        } catch (e: Exception) {
+                            e.printStackTrace()
+                        }
                     } else {
                         println("name is null or blank")
                         return@dialogWindow
index bccd7f2c24f05dd474e33c3a5a91e558109ea252..e8da16dacc1ec206d3b72a7dd32e9cb39aed7f6f 100644 (file)
@@ -994,6 +994,8 @@ class Toplevel(obj: UiObject) {
         rowspan: Int = -1,
         name: String? = null,
         styleClass: String? = null,
+        onActivate: EventHandler? = null,
+        onButtonClick: EventHandler? = null,
         getvalue: SubListValueConverter<T>? = null
     ): UiWidget {
         val list = ListView.sourcelist<T>(ui)
@@ -1033,6 +1035,12 @@ class Toplevel(obj: UiObject) {
         styleClass?.let {
             list.styleClass(it)
         }
+        onActivate?.let {
+            list.onActivate(it)
+        }
+        onButtonClick?.let {
+            list.onButtonClick(it)
+        }
         getvalue?.let {
             list.getvalue(it)
         }