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;
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();
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);
}
}
+ 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 {