]> uap-core.de Git - rssreader.git/commitdiff
add method for getting UiList selections
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 13 Aug 2025 17:02:10 +0000 (19:02 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 13 Aug 2025 17:02:10 +0000 (19:02 +0200)
ui-java/src/main/java/de/unixwork/ui/Context.java
ui-java/src/main/java/de/unixwork/ui/ListFuncs.java
ui-java/src/main/java/de/unixwork/ui/UiList.java

index 11d983e37141c930de1c537e15a4656d1d6fb709..e1e22f84dfe9258c875f4e18cba9c340b1334dd3 100644 (file)
@@ -31,6 +31,14 @@ public abstract class Context {
         return new UiString(this, name);
     }
 
+    public UiText text() {
+        return text(null);
+    }
+
+    public UiText text(String name) {
+        return new UiText(this, name);
+    }
+
     public UiInteger integer() {
         return integer(null);
     }
index 0c248f602ba770519047549b8e5ccb0f2ac90fd4..e91eb731c4ea509ce3099c81ab33a81fe950518f 100644 (file)
@@ -19,6 +19,11 @@ public class ListFuncs {
     public MethodHandle list_set_iter;
     public MethodHandle list_update_row;
 
+    public MethodHandle list_get_selection_allocated;
+    public MethodHandle list_selection_get_count;
+    public MethodHandle list_selection_get_rows;
+    public MethodHandle list_selection_free;
+
     public MethodHandle srclist_new;
     public MethodHandle srclist_add;
     public MethodHandle srclist_insert;
@@ -54,6 +59,11 @@ public class ListFuncs {
         MemorySegment ui_list_set_iter_addr = lib.find("ui_list_set_iter").orElseThrow();
         MemorySegment ui_list_update_row_addr = lib.find("ui_list_update_row").orElseThrow();
 
+        MemorySegment ui_list_get_selection_allocated_addr = lib.find("ui_list_get_selection_allocated").orElseThrow();
+        MemorySegment ui_list_selection_get_count_addr = lib.find("ui_list_selection_get_count").orElseThrow();
+        MemorySegment ui_list_selection_get_rows_addr = lib.find("ui_list_selection_get_rows").orElseThrow();
+        MemorySegment ui_list_selection_free_addr = lib.find("ui_list_selection_free").orElseThrow();
+
         MemorySegment ui_srclist_new_addr = lib.find("ui_srclist_new").orElseThrow();
         MemorySegment ui_srclist_add_addr = lib.find("ui_srclist_add").orElseThrow();
         MemorySegment ui_srclist_insert_addr = lib.find("ui_srclist_insert").orElseThrow();
@@ -79,6 +89,11 @@ public class ListFuncs {
         list_set_iter = linker.downcallHandle(ui_list_set_iter_addr, sigm_mm);
         list_update_row = linker.downcallHandle(ui_list_update_row_addr, sigv_mi);
 
+        list_get_selection_allocated = linker.downcallHandle(ui_list_get_selection_allocated_addr, sigm_m);
+        list_selection_get_count = linker.downcallHandle(ui_list_selection_get_count_addr, sigi_m);
+        list_selection_get_rows = linker.downcallHandle(ui_list_selection_get_rows_addr, sigm_m);
+        list_selection_free = linker.downcallHandle(ui_list_selection_free_addr, sigv_m);
+
         srclist_new = linker.downcallHandle(ui_srclist_new_addr, sigm_mm);
         srclist_add = linker.downcallHandle(ui_srclist_add_addr, sigv_mm);
         srclist_insert = linker.downcallHandle(ui_srclist_insert_addr, sigv_mim);
index fb5dca242050b381b83e11cef5ba75f1d712f427..fa6cafc33a280636aa9f2bc082aef8b035746349 100644 (file)
@@ -75,6 +75,24 @@ public class UiList<T> extends ArrayList<T> {
         }
     }
 
+    public int[] getSelection() {
+        ListFuncs ui = ListFuncs.getInstance();
+        try {
+            MemorySegment sel = (MemorySegment)ui.list_get_selection_allocated.invoke(valuePtr);
+            int count = (int)ui.list_selection_get_count.invoke(sel);
+            int[] selection = new int[count];
+            MemorySegment rows = (MemorySegment)ui.list_selection_get_rows.invoke(sel);
+            rows = rows.reinterpret(count * ValueLayout.JAVA_INT.byteSize());
+            for(int i=0; i<count; i++) {
+                selection[i] = (int)rows.getAtIndex(ValueLayout.JAVA_INT, i);
+            }
+            ui.list_selection_free.invoke(sel);
+            return selection;
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     public void free() {
         ToolkitFuncs tk = ToolkitFuncs.getInstance();
         try {