public MethodHandle ui_get_list_var;
public MethodHandle ui_get_generic_var;
+ public MethodHandle int_add_observer;
+ public MethodHandle double_add_observer;
+ public MethodHandle string_add_observer;
+ public MethodHandle text_add_observer;
+ public MethodHandle range_add_observer;
+ public MethodHandle list_add_observer;
+
public MethodHandle model_new;
public MethodHandle model_add_column;
public MethodHandle model_free;
MemorySegment get_list_var_addr = lib.find("ui_get_list_var").orElseThrow();
MemorySegment get_generic_var_addr = lib.find("ui_get_generic_var").orElseThrow();
+ MemorySegment int_add_observer_addr = lib.find("ui_int_add_observer").orElseThrow();
+ MemorySegment double_add_observer_addr = lib.find("ui_double_add_observer").orElseThrow();
+ MemorySegment string_add_observer_addr = lib.find("ui_string_add_observer").orElseThrow();
+ MemorySegment text_add_observer_addr = lib.find("ui_text_add_observer").orElseThrow();
+ MemorySegment range_add_observer_addr = lib.find("ui_range_add_observer").orElseThrow();
+ MemorySegment list_add_observer_addr = lib.find("ui_list_add_observer").orElseThrow();
+
MemorySegment model_new_addr = lib.find("ui_model_new").orElseThrow();
MemorySegment model_add_column_addr = lib.find("ui_model_add_column").orElseThrow();
MemorySegment model_free_addr = lib.find("ui_model_free").orElseThrow();
ui_get_list_var = linker.downcallHandle(get_list_var_addr, sigm_mm);
ui_get_generic_var = linker.downcallHandle(get_generic_var_addr, sigm_mm);
+ int_add_observer = linker.downcallHandle(int_add_observer_addr, sigv_mmm);
+ double_add_observer = linker.downcallHandle(double_add_observer_addr, sigv_mmm);
+ string_add_observer = linker.downcallHandle(string_add_observer_addr, sigv_mmm);
+ text_add_observer = linker.downcallHandle(text_add_observer_addr, sigv_mmm);
+ range_add_observer = linker.downcallHandle(range_add_observer_addr, sigv_mmm);
+
model_new = linker.downcallHandle(model_new_addr, sigm_m);
model_add_column = linker.downcallHandle(model_add_column_addr, sigv_mimi);
model_free = linker.downcallHandle(model_free_addr, sigv_m);
import java.lang.foreign.Arena;
import java.lang.foreign.MemorySegment;
+import java.util.LinkedList;
public class UiDouble {
+ protected Context ctx;
protected MemorySegment valuePtr;
+ protected LinkedList<EventHandler> observers;
protected UiDouble(Context ctx, String name) {
+ this.ctx = ctx;
ToolkitFuncs ui = ToolkitFuncs.getInstance();
MemorySegment nameCStr = MemorySegment.NULL;
throw new RuntimeException(e);
}
}
+
+ public void addObserver(EventHandler eh) {
+ if(observers == null) {
+ observers = new LinkedList<>();
+ // register native observer for this value
+ EventWrapper event = new EventWrapper(e -> {
+ observers.forEach(obs -> obs.callback(e));
+ });
+ ToolkitFuncs ui = ToolkitFuncs.getInstance();
+ try {
+ ui.double_add_observer.invoke(valuePtr, event.getCallback(), event.getUserData());
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+ observers.add(eh);
+ }
}
import java.lang.foreign.Arena;
import java.lang.foreign.MemorySegment;
+import java.util.LinkedList;
public class UiInteger {
+ protected Context ctx;
protected MemorySegment valuePtr;
+ protected LinkedList<EventHandler> observers;
protected UiInteger(Context ctx, String name) {
+ this.ctx = ctx;
ToolkitFuncs ui = ToolkitFuncs.getInstance();
MemorySegment nameCStr = MemorySegment.NULL;
public void setBooleanValue(boolean value) {
setLongValue(value ? 1 : 0);
}
+
+ public void addObserver(EventHandler eh) {
+ if(observers == null) {
+ observers = new LinkedList<>();
+ // register native observer for this value
+ EventWrapper event = new EventWrapper(e -> {
+ observers.forEach(obs -> obs.callback(e));
+ });
+ ToolkitFuncs ui = ToolkitFuncs.getInstance();
+ try {
+ ui.int_add_observer.invoke(valuePtr, event.getCallback(), event.getUserData());
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+ observers.add(eh);
+ }
}
import java.lang.foreign.Arena;
import java.lang.foreign.MemorySegment;
+import java.util.LinkedList;
public class UiString {
+ protected Context ctx;
protected MemorySegment valuePtr;
+ protected LinkedList<EventHandler> observers;
protected UiString(Context ctx, String name) {
+ this.ctx = ctx;
ToolkitFuncs ui = ToolkitFuncs.getInstance();
MemorySegment nameCStr = MemorySegment.NULL;
throw new RuntimeException(e);
}
}
+
+ public void addObserver(EventHandler eh) {
+ if(observers == null) {
+ observers = new LinkedList<>();
+ // register native observer for this value
+ EventWrapper event = new EventWrapper(e -> {
+ observers.forEach(obs -> obs.callback(e));
+ });
+ ToolkitFuncs ui = ToolkitFuncs.getInstance();
+ try {
+ ui.string_add_observer.invoke(valuePtr, event.getCallback(), event.getUserData());
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+ observers.add(eh);
+ }
}