From: Olaf Wintermann Date: Wed, 13 Aug 2025 17:02:10 +0000 (+0200) Subject: add method for getting UiList selections X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=32f8a7a3b33c04c129d6fd3f4bf3adaca79f4ada;p=rssreader.git add method for getting UiList selections --- diff --git a/ui-java/src/main/java/de/unixwork/ui/Context.java b/ui-java/src/main/java/de/unixwork/ui/Context.java index 11d983e..e1e22f8 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Context.java +++ b/ui-java/src/main/java/de/unixwork/ui/Context.java @@ -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); } diff --git a/ui-java/src/main/java/de/unixwork/ui/ListFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ListFuncs.java index 0c248f6..e91eb73 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ListFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ListFuncs.java @@ -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); diff --git a/ui-java/src/main/java/de/unixwork/ui/UiList.java b/ui-java/src/main/java/de/unixwork/ui/UiList.java index fb5dca2..fa6cafc 100644 --- a/ui-java/src/main/java/de/unixwork/ui/UiList.java +++ b/ui-java/src/main/java/de/unixwork/ui/UiList.java @@ -75,6 +75,24 @@ public class UiList extends ArrayList { } } + 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