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() {
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);
}
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;
}
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;
+ }
}
--- /dev/null
+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
} 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;
}
--- /dev/null
+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;
+ }
+}
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;
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;
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();
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();
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);
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);
ListView.<String>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();
/*