]> uap-core.de Git - rssreader.git/commitdiff
implement feed group deletion
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 15 Nov 2025 12:16:11 +0000 (13:16 +0100)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 15 Nov 2025 12:16:11 +0000 (13:16 +0100)
rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt
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/ToggleBuilder.java
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt

index 22380bb76c7f28ab1d8532449318bc35df06854c..820b312eef657753eb222f0d580fe038b7ae7e0a 100644 (file)
@@ -413,6 +413,17 @@ object Database {
         }
     }
 
+    public fun deleteFeedGroup(feedGroup: FeedGroup) {
+        dataSource.connection.use { conn ->
+            conn.prepareStatement("""
+                delete from groups where group_id = ?
+            """.trimIndent()).use { stmt ->
+                stmt.setInt(1, feedGroup.id)
+                stmt.execute()
+            }
+        }
+    }
+
     public fun getPendingFeeds(defaultInterval: Int) : MutableList<Feed> {
         val feeds = mutableListOf<Feed>()
 
index 873bd50a89280b2900cfdc767469f5f7df1a117e..cb3c6964d5587a23602d0d05f2fd29a53c0e30a3 100644 (file)
@@ -31,6 +31,13 @@ class FeedSourceList : Document() {
         groups.add(group)
     }
 
+    fun removeFeedGroup(group: FeedGroup) {
+        val index = groups.indexOf(group)
+        groups.removeAt(index)
+        feeds.remove(index)
+        feeds.update()
+    }
+
     fun swapFeedCollections(group: Int, feed1: Int, feed2: Int) {
         if(group < 0 || group >= groups.size) {
             return
index 21a7d74a2aa214d4b4ca7e4782873193057b0618..438006f5f84eb59084cc81ad4361d939602629e3 100644 (file)
@@ -1,6 +1,7 @@
 package de.unixwork.rssreader
 
 import de.unixwork.ui.ColumnType
+import de.unixwork.ui.LabelStyle
 import de.unixwork.ui.LinkButtonType
 import de.unixwork.ui.Menu
 import de.unixwork.ui.SubListItem
@@ -122,7 +123,48 @@ class MainWindow() {
                     }
                 }
             } else {
-                // TODO
+                val feedGroup = sourceList.groups[evt.sublistIndex]
+                var move:UiInteger? = null
+                var groups:UiList<FeedGroup>? = null
+                val dialog = dialogWindow(
+                    parent = window.ui,
+                    title = "Delete",
+                    lbutton1 = "Cancel",
+                    rbutton4 = "Delete",
+                    defaultButton = 4,
+                    showCloseButton = false,
+                    onClick = { ev ->
+                        if(ev.intValue == 4) {
+                            sourceList.removeFeedGroup(feedGroup)
+                            if(move!!.booleanValue() && groups!!.selected != null) {
+                                // move and delete
+                            } else {
+                                // delete
+                                GlobalScope.launch(Dispatchers.IO) {
+                                    Database.deleteFeedGroup(feedGroup)
+                                }
+                            }
+                        }
+                        ev.`object`.close()
+                    })
+                {
+                    move = ui.integer()
+                    groups = ui.list<FeedGroup>()
+                    groups.addAll(sourceList.groups.filter { it != feedGroup })
+
+                    grid(margin = 12, columnspacing = 8, rowspacing = 8, fill = true) {
+                        row {
+                            label(label = "Delete ${feedGroup.name}?", colspan = 2, style = LabelStyle.TITLE, hexpand = true, hfill = true)
+                        }
+                        row {
+                            checkbox(label = "Move feeds to other group", value = move, vfill = true, enableState = 1)
+                            dropdown<FeedGroup>(value = groups, vfill = true, states = intArrayOf(1)) { elm, i ->
+                                elm.name
+                            }
+                        }
+                    }
+                }
+                dialog.show()
             }
         }
         separator()
index 8bdc17f84abbcd38f75fd7d7f6104a51db7f805e..28181352d3675e0f2473458b7895431abc2331a3 100644 (file)
@@ -286,7 +286,7 @@ public class ListViewBuilder<T> extends AbstractWidgetBuilder {
         if(states != null) {
             MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length);
             MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length);
-            ui.list_args_set_groups.invoke(args, st);
+            ui.list_args_set_groups.invoke(args, st, states.length);
         }
 
         return args;
index 2c2324d7c4153035b50afb2e92127a36b830f33d..9b8223687a848d29f042f9eff13b9c84bcac9f81 100644 (file)
@@ -27,6 +27,7 @@ public class ToggleBuilder extends AbstractWidgetBuilder {
     private int labelType;
     private String varname;
     private UiInteger value;
+    private int enableState;
     private EventHandler onChange;
     private int[] states;
 
@@ -141,6 +142,11 @@ public class ToggleBuilder extends AbstractWidgetBuilder {
         return this;
     }
 
+    public ToggleBuilder enableState(int enableState) {
+        this.enableState = enableState;
+        return this;
+    }
+
     public ToggleBuilder onChange(EventHandler onChange) {
         this.onChange = onChange;
         return this;
@@ -223,6 +229,9 @@ public class ToggleBuilder extends AbstractWidgetBuilder {
         if(value != null) {
             ui.toggle_args_set_value.invoke(args, value.valuePtr);
         }
+        if(enableState > 0) {
+            ui.toggle_args_set_enablegroup.invoke(args, enableState);
+        }
         if(states != null) {
             MemorySegment st = arena.allocate(ValueLayout.JAVA_INT, states.length);
             MemorySegment.copy(states, 0, st, ValueLayout.JAVA_INT, 0, states.length);
index 130ad5b2d48ba99996333ae6bc35391022087350..f4784b7aa61ea647c6da07dadc74f9d30af84893 100644 (file)
@@ -1001,6 +1001,7 @@ class Toplevel(obj: UiObject) {
         tooltip: String? = null,
         varname: String? = null,
         value: UiInteger? = null,
+        enableState: Int = 0,
         fill: Boolean = false,
         hexpand: Boolean = false,
         vexpand: Boolean = false,
@@ -1031,6 +1032,9 @@ class Toplevel(obj: UiObject) {
         value?.let {
             button.value(it)
         }
+        if(enableState > 0) {
+            button.enableState(enableState)
+        }
         if(fill) {
             button.fill(fill);
         }
@@ -1091,6 +1095,7 @@ class Toplevel(obj: UiObject) {
         tooltip: String? = null,
         varname: String? = null,
         value: UiInteger? = null,
+        enableState: Int = 0,
         fill: Boolean = false,
         hexpand: Boolean = false,
         vexpand: Boolean = false,
@@ -1116,6 +1121,7 @@ class Toplevel(obj: UiObject) {
             tooltip = tooltip,
             varname = varname,
             value = value,
+            enableState = enableState,
             fill = fill,
             hexpand = hexpand,
             vexpand = vexpand,
@@ -1142,6 +1148,7 @@ class Toplevel(obj: UiObject) {
         tooltip: String? = null,
         varname: String? = null,
         value: UiInteger? = null,
+        enableState: Int = 0,
         fill: Boolean = false,
         hexpand: Boolean = false,
         vexpand: Boolean = false,
@@ -1167,6 +1174,7 @@ class Toplevel(obj: UiObject) {
             tooltip = tooltip,
             varname = varname,
             value = value,
+            enableState = enableState,
             fill = fill,
             hexpand = hexpand,
             vexpand = vexpand,
@@ -1193,6 +1201,7 @@ class Toplevel(obj: UiObject) {
         tooltip: String? = null,
         varname: String? = null,
         value: UiInteger? = null,
+        enableState: Int = 0,
         fill: Boolean = false,
         hexpand: Boolean = false,
         vexpand: Boolean = false,
@@ -1218,6 +1227,7 @@ class Toplevel(obj: UiObject) {
             tooltip = tooltip,
             varname = varname,
             value = value,
+            enableState = enableState,
             fill = fill,
             hexpand = hexpand,
             vexpand = vexpand,