From 0102c1cea511aaf49994ae08bddafcf9f11e56b8 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Tue, 24 Jun 2025 20:47:10 +0200 Subject: [PATCH] add ListFuncs, list_args funcs --- .../main/java/de/unixwork/ui/ArgFuncs.java | 94 +++++++++++++++++++ .../main/java/de/unixwork/ui/ListFuncs.java | 36 +++++++ 2 files changed, 130 insertions(+) create mode 100644 ui-java/src/main/java/de/unixwork/ui/ListFuncs.java diff --git a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java index 631da66..f56d838 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java @@ -76,10 +76,42 @@ class ArgFuncs { MethodHandle toggle_args_set_groups; MethodHandle toggle_args_free; + MethodHandle list_args_new; + MethodHandle list_args_set_fill; + MethodHandle list_args_set_hexpand; + MethodHandle list_args_set_vexpand; + MethodHandle list_args_set_hfill; + MethodHandle list_args_set_vfill; + MethodHandle list_args_set_override_defaults; + MethodHandle list_args_set_colspan; + MethodHandle list_args_set_rowspan; + MethodHandle list_args_set_name; + MethodHandle list_args_set_style_class; + MethodHandle list_args_set_varname; + MethodHandle list_args_set_value; + MethodHandle list_args_set_model; + MethodHandle list_args_set_static_elements; + MethodHandle list_args_set_getvalue_func; + MethodHandle list_args_set_onactivate; + MethodHandle list_args_set_onactivatedata; + MethodHandle list_args_set_onselection; + MethodHandle list_args_set_onselectiondata; + MethodHandle list_args_set_ondragstart; + MethodHandle list_args_set_ondragstartdata; + MethodHandle list_args_set_ondragcomplete; + MethodHandle list_args_set_ondragcompletedata; + MethodHandle list_args_set_ondrop; + MethodHandle list_args_set_ondropdata; + MethodHandle list_args_set_multiselection; + MethodHandle list_args_set_contextmenu; + MethodHandle list_args_set_groups; + MethodHandle list_args_free; + private ArgFuncs(Linker linker, SymbolLookup lib) { FunctionDescriptor sigm = FunctionDescriptor.of(ValueLayout.ADDRESS); FunctionDescriptor sigv_m = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS); FunctionDescriptor sigv_mm = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS); + FunctionDescriptor sigv_mml = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_LONG); FunctionDescriptor sigv_mb = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_BOOLEAN); FunctionDescriptor sigv_mi = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_INT); @@ -155,6 +187,37 @@ class ArgFuncs { MemorySegment ui_toggle_args_set_groups_addr = lib.find("ui_toggle_args_set_groups").orElseThrow(); MemorySegment ui_toggle_args_free_addr = lib.find("ui_toggle_args_free").orElseThrow(); + MemorySegment ui_list_args_new_addr = lib.find("ui_list_args_new").orElseThrow(); + MemorySegment ui_list_args_set_fill_addr = lib.find("ui_list_args_set_fill").orElseThrow(); + MemorySegment ui_list_args_set_hexpand_addr = lib.find("ui_list_args_set_hexpand").orElseThrow(); + MemorySegment ui_list_args_set_vexpand_addr = lib.find("ui_list_args_set_vexpand").orElseThrow(); + MemorySegment ui_list_args_set_hfill_addr = lib.find("ui_list_args_set_hfill").orElseThrow(); + MemorySegment ui_list_args_set_vfill_addr = lib.find("ui_list_args_set_vfill").orElseThrow(); + MemorySegment ui_list_args_set_override_defaults_addr = lib.find("ui_list_args_set_override_defaults").orElseThrow(); + MemorySegment ui_list_args_set_colspan_addr = lib.find("ui_list_args_set_colspan").orElseThrow(); + MemorySegment ui_list_args_set_rowspan_addr = lib.find("ui_list_args_set_rowspan").orElseThrow(); + MemorySegment ui_list_args_set_name_addr = lib.find("ui_list_args_set_name").orElseThrow(); + MemorySegment ui_list_args_set_style_class_addr = lib.find("ui_list_args_set_style_class").orElseThrow(); + MemorySegment ui_list_args_set_varname_addr = lib.find("ui_list_args_set_varname").orElseThrow(); + MemorySegment ui_list_args_set_value_addr = lib.find("ui_list_args_set_value").orElseThrow(); + MemorySegment ui_list_args_set_model_addr = lib.find("ui_list_args_set_model").orElseThrow(); + MemorySegment ui_list_args_set_static_elements_addr = lib.find("ui_list_args_set_static_elements").orElseThrow(); + MemorySegment ui_list_args_set_getvalue_func_addr = lib.find("ui_list_args_set_getvalue_func").orElseThrow(); + MemorySegment ui_list_args_set_onactivate_addr = lib.find("ui_list_args_set_onactivate").orElseThrow(); + MemorySegment ui_list_args_set_onactivatedata_addr = lib.find("ui_list_args_set_onactivatedata").orElseThrow(); + MemorySegment ui_list_args_set_onselection_addr = lib.find("ui_list_args_set_onselection").orElseThrow(); + MemorySegment ui_list_args_set_onselectiondata_addr = lib.find("ui_list_args_set_onselectiondata").orElseThrow(); + MemorySegment ui_list_args_set_ondragstart_addr = lib.find("ui_list_args_set_ondragstart").orElseThrow(); + MemorySegment ui_list_args_set_ondragstartdata_addr = lib.find("ui_list_args_set_ondragstartdata").orElseThrow(); + MemorySegment ui_list_args_set_ondragcomplete_addr = lib.find("ui_list_args_set_ondragcomplete").orElseThrow(); + MemorySegment ui_list_args_set_ondragcompletedata_addr = lib.find("ui_list_args_set_ondragcompletedata").orElseThrow(); + MemorySegment ui_list_args_set_ondrop_addr = lib.find("ui_list_args_set_ondrop").orElseThrow(); + MemorySegment ui_list_args_set_ondropdata_addr = lib.find("ui_list_args_set_ondropdata").orElseThrow(); + MemorySegment ui_list_args_set_multiselection_addr = lib.find("ui_list_args_set_multiselection").orElseThrow(); + MemorySegment ui_list_args_set_contextmenu_addr = lib.find("ui_list_args_set_contextmenu").orElseThrow(); + MemorySegment ui_list_args_set_groups_addr = lib.find("ui_list_args_set_groups").orElseThrow(); + MemorySegment ui_list_args_free_addr = lib.find("ui_list_args_free").orElseThrow(); + menuitem_args_new = linker.downcallHandle(ui_menuitem_args_new_addr, sigm); menuitem_args_set_label = linker.downcallHandle(ui_menuitem_args_set_label_addr, sigv_mm); menuitem_args_set_stockid = linker.downcallHandle(ui_menuitem_args_set_stockid_addr, sigv_mm); @@ -224,6 +287,37 @@ class ArgFuncs { toggle_args_set_enablegroup = linker.downcallHandle(ui_toggle_args_set_enablegroup, sigv_mi); toggle_args_set_groups = linker.downcallHandle(ui_toggle_args_set_groups_addr, sigv_mm); toggle_args_free = linker.downcallHandle(ui_toggle_args_free_addr, sigv_m); + + list_args_new = linker.downcallHandle(ui_list_args_new_addr, sigm); + list_args_set_fill = linker.downcallHandle(ui_list_args_set_fill_addr, sigv_mb); + list_args_set_hexpand = linker.downcallHandle(ui_list_args_set_hexpand_addr, sigv_mb); + list_args_set_vexpand = linker.downcallHandle(ui_list_args_set_vexpand_addr, sigv_mb); + list_args_set_hfill = linker.downcallHandle(ui_list_args_set_hfill_addr, sigv_mb); + list_args_set_vfill = linker.downcallHandle(ui_list_args_set_vfill_addr, sigv_mb); + list_args_set_override_defaults = linker.downcallHandle(ui_list_args_set_override_defaults_addr, sigv_mb); + list_args_set_colspan = linker.downcallHandle(ui_list_args_set_colspan_addr, sigv_mi); + list_args_set_rowspan = linker.downcallHandle(ui_list_args_set_rowspan_addr, sigv_mi); + list_args_set_name = linker.downcallHandle(ui_list_args_set_name_addr, sigv_mm); + list_args_set_style_class = linker.downcallHandle(ui_list_args_set_style_class_addr, sigv_mm); + list_args_set_varname = linker.downcallHandle(ui_list_args_set_varname_addr, sigv_mm); + list_args_set_value = linker.downcallHandle(ui_list_args_set_value_addr, sigv_mm); + list_args_set_model = linker.downcallHandle(ui_list_args_set_model_addr, sigv_mm); + list_args_set_static_elements = linker.downcallHandle(ui_list_args_set_static_elements_addr, sigv_mml); + list_args_set_getvalue_func = linker.downcallHandle(ui_list_args_set_getvalue_func_addr, sigv_mm); + list_args_set_onactivate = linker.downcallHandle(ui_list_args_set_onactivate_addr, sigv_mm); + list_args_set_onactivatedata = linker.downcallHandle(ui_list_args_set_onactivatedata_addr, sigv_mm); + list_args_set_onselection = linker.downcallHandle(ui_list_args_set_onselection_addr, sigv_mm); + list_args_set_onselectiondata = linker.downcallHandle(ui_list_args_set_onselectiondata_addr, sigv_mm); + list_args_set_ondragstart = linker.downcallHandle(ui_list_args_set_ondragstart_addr, sigv_mm); + list_args_set_ondragstartdata = linker.downcallHandle(ui_list_args_set_ondragstartdata_addr, sigv_mm); + list_args_set_ondragcomplete = linker.downcallHandle(ui_list_args_set_ondragcomplete_addr, sigv_mm); + list_args_set_ondragcompletedata = linker.downcallHandle(ui_list_args_set_ondragcompletedata_addr, sigv_mm); + list_args_set_ondrop = linker.downcallHandle(ui_list_args_set_ondrop_addr, sigv_mm); + list_args_set_ondropdata = linker.downcallHandle(ui_list_args_set_ondropdata_addr, sigv_mm); + list_args_set_multiselection = linker.downcallHandle(ui_list_args_set_multiselection_addr, sigv_mb); + list_args_set_contextmenu = linker.downcallHandle(ui_list_args_set_contextmenu_addr, sigv_mm); + list_args_set_groups = linker.downcallHandle(ui_list_args_set_groups_addr, sigv_mm); + list_args_free = linker.downcallHandle(ui_list_args_free_addr, sigv_m); } static ArgFuncs getInstance() { diff --git a/ui-java/src/main/java/de/unixwork/ui/ListFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ListFuncs.java new file mode 100644 index 0000000..a094ee7 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/ListFuncs.java @@ -0,0 +1,36 @@ +package de.unixwork.ui; + +import java.lang.foreign.*; +import java.lang.invoke.MethodHandle; + +public class ListFuncs { + static ListFuncs instance; + + public MethodHandle listview_create; + public MethodHandle table_create; + public MethodHandle combobox_create; + public MethodHandle sourcelist_create; + + private ListFuncs(Linker linker, SymbolLookup lib) { + // void* func(void*, void*) + FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS); + + MemorySegment ui_listview_create_addr = lib.find("ui_listview_create").orElseThrow(); + MemorySegment ui_table_create_addr = lib.find("ui_table_create").orElseThrow(); + MemorySegment ui_combobox_create_addr = lib.find("ui_combobox_create").orElseThrow(); + MemorySegment ui_sourcelist_create_addr = lib.find("ui_sourcelist_create").orElseThrow(); + + listview_create = linker.downcallHandle(ui_listview_create_addr, sigm_mm); + table_create = linker.downcallHandle(ui_table_create_addr, sigm_mm); + combobox_create = linker.downcallHandle(ui_combobox_create_addr, sigm_mm); + sourcelist_create = linker.downcallHandle(ui_sourcelist_create_addr, sigm_mm); + } + + static ListFuncs getInstance() { + if (instance == null) { + Toolkit toolkit = Toolkit.getInstance(); + instance = new ListFuncs(toolkit.getLinker(), toolkit.getSymbolLookup()); + } + return instance; + } +} -- 2.47.3