From: Olaf Wintermann Date: Sun, 13 Jul 2025 12:51:57 +0000 (+0200) Subject: implement sourcelist eventhandling X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=8c650d32eed5e5ee32ed867139320c69d8a6b357;p=rssreader.git implement sourcelist eventhandling --- diff --git a/ui-java/src/main/java/de/unixwork/ui/Event.java b/ui-java/src/main/java/de/unixwork/ui/Event.java index 156674e..d2b8507 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Event.java +++ b/ui-java/src/main/java/de/unixwork/ui/Event.java @@ -6,12 +6,14 @@ public class Event { private UiObject object; private Document document; private Object windowData; - private Object eventdata; + private Object eventData; private int intval; private int set; private MemorySegment windowPtr; private MemorySegment documentPtr; + private MemorySegment eventDataPtr; + private EventDataType eventDataType; public Event() { @@ -34,6 +36,23 @@ public class Event { intval = (int)ui.event_get_int.invoke(eventPtr); set = (int)ui.event_get_set.invoke(eventPtr); + + eventDataPtr = (MemorySegment)ui.event_get_eventdata.invoke(eventPtr); + int type = (int)ui.event_get_eventdatatype.invoke(eventPtr); + eventDataType = EventDataType.fromValue(type); + + if(eventDataPtr != MemorySegment.NULL) { + switch(eventDataType) { + case EventDataType.STRING: { + eventData = eventDataPtr.getString(0); + break; + } + case EventDataType.SUBLIST: { + eventData = new SubListEventData(eventDataPtr); + break; + } + } + } } catch (Throwable e) { throw new RuntimeException(e); } @@ -43,24 +62,51 @@ public class Event { return object; } + public void setObject(UiObject object) { + this.object = object; + } + public Document getDocumemt() { return document; } + public void setDocument(Document document) { + this.document = document; + } + public Object getWindowData() { return windowData; } - public Object getEventdata() { - return eventdata; + public void setWindowData(Object windowData) { + this.windowData = windowData; + } + + public Object getEventData() { + return eventData; + } + + public void setEventData(Object eventdata, EventDataType type) { + this.eventData = eventdata; + this.eventDataType = type; + } + + public EventDataType getEventDataType() { + return eventDataType; } public int getIntValue() { return intval; } + public void setIntValue(int intval) { + this.intval = intval; + } + public int getSet() { return set; } + public void setSet(int set) { this.set = set; } + public MemorySegment getWindowPtr() { return windowPtr; } @@ -68,4 +114,19 @@ public class Event { public MemorySegment getDocumentPtr() { return documentPtr; } + + + public String getStringData() { + if (eventDataType == EventDataType.STRING) { + return (String)eventData; + } + return null; + } + + public SubListEventData getSubListEventData() { + if (eventDataType == EventDataType.SUBLIST) { + return (SubListEventData)eventData; + } + return null; + } } diff --git a/ui-java/src/main/java/de/unixwork/ui/EventDataType.java b/ui-java/src/main/java/de/unixwork/ui/EventDataType.java new file mode 100644 index 0000000..7730867 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/EventDataType.java @@ -0,0 +1,37 @@ +package de.unixwork.ui; + +public enum EventDataType { + NULL(0), + POINTER(1), + STRING(2), + INTEGER_VALUE(3), + STRING_VALUE(4), + TEXT_VALUE(5), + DOUBLE_VALUE(6), + RANGE_VALUE(7), + LIST_SELECTION(8), + LIST_ELM(9), + DND(10), + SUBLIST(11), + FILE_LIST(12), + UNKNOWN(-1); + + private final int value; + + EventDataType(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + + public static EventDataType fromValue(int value) { + for (EventDataType type : values()) { + if (type.value == value) { + return type; + } + } + return EventDataType.UNKNOWN; + } +} \ No newline at end of file diff --git a/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java b/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java index ede0a66..ddc5f24 100644 --- a/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java +++ b/ui-java/src/main/java/de/unixwork/ui/SourceListBuilder.java @@ -172,6 +172,18 @@ public class SourceListBuilder extends AbstractWidgetBuilder { } else { throw new IllegalArgumentException("getvalue must be set"); } + if(onActivate != null) { + EventWrapper event = new EventWrapper(obj, onActivate); + // set toolkit args + ui.sourcelist_args_set_onactivate.invoke(args, event.getCallback()); + ui.sourcelist_args_set_onactivatedata.invoke(args, event.getUserData()); + } + if(onButtonClick != null) { + EventWrapper event = new EventWrapper(obj, onButtonClick); + // set toolkit args + ui.sourcelist_args_set_onbuttonclick.invoke(args, event.getCallback()); + ui.sourcelist_args_set_onbuttonclickdata.invoke(args, event.getUserData()); + } return args; } diff --git a/ui-java/src/main/java/de/unixwork/ui/SubListEventData.java b/ui-java/src/main/java/de/unixwork/ui/SubListEventData.java new file mode 100644 index 0000000..0f433e2 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/SubListEventData.java @@ -0,0 +1,50 @@ +package de.unixwork.ui; + +import java.lang.foreign.MemorySegment; + +public class SubListEventData { + private UiList list; + private int sublistIndex; + private int rowIndex; + + public SubListEventData() { + + } + + protected SubListEventData(MemorySegment ptr) { + ToolkitFuncs ui = ToolkitFuncs.getInstance(); + + try { + MemorySegment listPtr = (MemorySegment)ui.sublist_event_get_list.invoke(ptr); + list = Toolkit.listPtrToObject(listPtr); + sublistIndex = (int)ui.sublist_event_get_sublist_index.invoke(ptr); + rowIndex = (int)ui.sublist_event_get_row_index.invoke(ptr); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + public UiList getList() { + return list; + } + + public void setList(UiList list) { + this.list = list; + } + + public int getSublistIndex() { + return sublistIndex; + } + + public void setSublistIndex(int sublistIndex) { + this.sublistIndex = sublistIndex; + } + + public int getRowIndex() { + return rowIndex; + } + + public void setRowIndex(int rowIndex) { + this.rowIndex = rowIndex; + } +} diff --git a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java index cdf8127..cab31f3 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java @@ -19,6 +19,7 @@ public class ToolkitFuncs { public MethodHandle event_get_document; public MethodHandle event_get_windowdata; public MethodHandle event_get_eventdata; + public MethodHandle event_get_eventdatatype; public MethodHandle event_get_int; public MethodHandle event_get_set; @@ -37,6 +38,10 @@ public class ToolkitFuncs { public MethodHandle sublist_item_set_badge; public MethodHandle sublist_item_set_eventdata; + public MethodHandle sublist_event_get_list; + public MethodHandle sublist_event_get_sublist_index; + public MethodHandle sublist_event_get_row_index; + public MethodHandle string_new; public MethodHandle int_new; public MethodHandle double_new; @@ -82,6 +87,7 @@ public class ToolkitFuncs { MemorySegment event_get_document_addr = lib.find("ui_event_get_document").orElseThrow(); MemorySegment event_get_windowdata_addr = lib.find("ui_event_get_windowdata").orElseThrow(); MemorySegment event_get_eventdata_addr = lib.find("ui_event_get_eventdata").orElseThrow(); + MemorySegment event_get_eventdatatype_addr = lib.find("ui_event_get_eventdatatype").orElseThrow(); MemorySegment event_get_int_addr = lib.find("ui_event_get_int").orElseThrow(); MemorySegment event_get_set_addr = lib.find("ui_event_get_set").orElseThrow(); @@ -100,6 +106,10 @@ public class ToolkitFuncs { MemorySegment sublist_item_set_badge_addr = lib.find("ui_sublist_item_set_badge").orElseThrow(); MemorySegment sublist_item_set_eventdata_addr = lib.find("ui_sublist_item_set_eventdata").orElseThrow(); + MemorySegment sublist_event_get_list_addr = lib.find("ui_sublist_event_get_list").orElseThrow(); + MemorySegment sublist_event_get_sublist_index_addr = lib.find("ui_sublist_event_get_sublist_index").orElseThrow(); + MemorySegment sublist_event_get_row_index_addr = lib.find("ui_sublist_event_get_row_index").orElseThrow(); + MemorySegment string_new_addr = lib.find("ui_string_new").orElseThrow(); MemorySegment int_new_addr = lib.find("ui_int_new").orElseThrow(); MemorySegment double_new_addr = lib.find("ui_double_new").orElseThrow(); @@ -135,6 +145,7 @@ public class ToolkitFuncs { event_get_document = linker.downcallHandle(event_get_document_addr, sigm_m); event_get_windowdata = linker.downcallHandle(event_get_windowdata_addr, sigm_m); event_get_eventdata = linker.downcallHandle(event_get_eventdata_addr, sigm_m); + event_get_eventdatatype = linker.downcallHandle(event_get_eventdatatype_addr, sigi_m); event_get_int = linker.downcallHandle(event_get_int_addr, sigi_m); event_get_set = linker.downcallHandle(event_get_set_addr, sigi_m); @@ -153,6 +164,10 @@ public class ToolkitFuncs { sublist_item_set_badge = linker.downcallHandle(sublist_item_set_badge_addr, sigv_mm); sublist_item_set_eventdata = linker.downcallHandle(sublist_item_set_eventdata_addr, sigv_mm); + sublist_event_get_list = linker.downcallHandle(sublist_event_get_list_addr, sigm_m); + sublist_event_get_sublist_index = linker.downcallHandle(sublist_event_get_sublist_index_addr, sigi_m); + sublist_event_get_row_index = linker.downcallHandle(sublist_event_get_row_index_addr, sigi_m); + string_new = linker.downcallHandle(string_new_addr, sigm_mm); int_new = linker.downcallHandle(int_new_addr, sigm_mm); double_new = linker.downcallHandle(double_new_addr, sigm_mm); diff --git a/ui-java/src/test/java/de/unixwork/ui/demo/Main.java b/ui-java/src/test/java/de/unixwork/ui/demo/Main.java index 19f453c..9210823 100644 --- a/ui-java/src/test/java/de/unixwork/ui/demo/Main.java +++ b/ui-java/src/test/java/de/unixwork/ui/demo/Main.java @@ -36,7 +36,10 @@ public class Main implements Application{ ListView.sourcelist(window).dynamicSublists(src).fill(true).getvalue((elm) -> { return new SubListItem(elm); - }).create(); + }).onActivate((event -> { + SubListEventData data = event.getSubListEventData(); + System.out.println("sourcelist activate: " + data.getList().get(data.getRowIndex())); + })).create(); /*