private EventHandler onDragComplete;
private EventHandler onDrop;
private boolean multiselection;
+ private Menu contextMenu;
// TODO: contextmenu
private int[] states;
+ MemorySegment menuBuilder;
+
public ListViewBuilder(UiObject obj, MethodHandle widgetConstructor) {
this.obj = obj;
this.widgetConstructor = widgetConstructor;
return this;
}
+ public ListViewBuilder<T> contextmenu(Menu menu) {
+ this.contextMenu = menu;
+ return this;
+ }
+
public ListViewBuilder<T> onActivate(EventHandler onActivate) {
this.onActivate = onActivate;
return this;
ui.list_args_set_ondrop.invoke(args, event.getCallback());
ui.list_args_set_ondropdata.invoke(args, event.getUserData());
}
+ if (contextMenu != null) {
+ menuBuilder = contextMenu.createMenuBuilder();
+ ui.list_args_set_contextmenu.invoke(args, menuBuilder);
+ }
return args;
}
+
+ void freeArgs() {
+ super.freeArgs();
+ if(menuBuilder != null) {
+ MenuFuncs ui = MenuFuncs.getInstance();
+ try {
+ ui.menubuilder_free.invoke(menuBuilder);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
}
import java.lang.foreign.Arena;
import java.lang.foreign.MemorySegment;
+import java.lang.foreign.ValueLayout;
import java.util.LinkedList;
public class Menu extends MenuElement {
}
}
}
+
+ protected MemorySegment createMenuBuilder() {
+ MenuFuncs ui = MenuFuncs.getInstance();
+
+ try(Arena arena = Arena.ofConfined()) {
+ MemorySegment menuBuilderPtr = arena.allocate(ValueLayout.JAVA_LONG, 1);
+ ui.contextmenu_builder.invoke(menuBuilderPtr);
+ MemorySegment menuBuilder = MemorySegment.ofAddress(menuBuilderPtr.get(ValueLayout.JAVA_LONG, 0));
+ for(var item : items) {
+ item.create();
+ }
+ ui.menu_end.invoke();
+ return menuBuilder;
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
}
private EventHandler onDragComplete;
private EventHandler onDrop;
private boolean multiselection;
+ private Menu contextMenu;
// TODO: contextmenu
private int[] states;
private MemorySegment modelPtr;
+ MemorySegment menuBuilder;
+
public TableViewBuilder(UiObject obj, MethodHandle widgetConstructor) {
this.obj = obj;
this.widgetConstructor = widgetConstructor;
return this;
}
+ public TableViewBuilder<T> contextmenu(Menu menu) {
+ this.contextMenu = menu;
+ return this;
+ }
+
public TableViewBuilder<T> onActivate(EventHandler onActivate) {
this.onActivate = onActivate;
return this;
ui.list_args_set_ondrop.invoke(args, event.getCallback());
ui.list_args_set_ondropdata.invoke(args, event.getUserData());
}
+ if (contextMenu != null) {
+ menuBuilder = contextMenu.createMenuBuilder();
+ ui.list_args_set_contextmenu.invoke(args, menuBuilder);
+ }
return args;
}
void freeArgs() {
super.freeArgs();
- // currently, ui_table_create does not copy the model
- // therefore we can't free it here
- /*
- ToolkitFuncs ui = ToolkitFuncs.getInstance();
- if(model != null) {
+ if(menuBuilder != null) {
+ MenuFuncs ui = MenuFuncs.getInstance();
try {
- ui.model_free.invoke(obj.getCtx(), modelPtr);
+ ui.menubuilder_free.invoke(menuBuilder);
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
- */
}
}