sourcelist(
fill = true,
varname = "feeds",
+ headerIsItem = true,
onActivate = { event ->
val evt = event.subListEventData
currentSublistIndex = evt.sublistIndex
currentFeedIndex = evt.rowIndex
+ if(evt.rowIndex == -1) {
+ return@sourcelist
+ }
try {
val feed = sourceList.groups[evt.sublistIndex].feeds[evt.rowIndex]
feed?.let {
}
}
)
- { elm: FeedCollection ->
+ { elm: FeedCollection?, i, sublist ->
val item = SubListItem()
- item.label = elm.name
- if(elm.unreadItemsCount > 0 && elm.itemStateMode != 2) {
- item.badge = elm.unreadItemsCount.toString()
+ elm?.let {
+ item.label = it.name
+ if(it.unreadItemsCount > 0 && it.itemStateMode != 2) {
+ item.badge = it.unreadItemsCount.toString()
+ }
}
item
}
public MethodHandle srclist_remove;
public MethodHandle srclist_clear;
public MethodHandle srclist_size;
+ public MethodHandle srclist_generate_sublist_num_data;
public MethodHandle listview_create;
public MethodHandle table_create;
MemorySegment ui_srclist_remove_addr = lib.find("ui_srclist_remove").orElseThrow();
MemorySegment ui_srclist_clear_addr = lib.find("ui_srclist_clear").orElseThrow();
MemorySegment ui_srclist_size_addr = lib.find("ui_srclist_size").orElseThrow();
+ MemorySegment ui_srclist_generate_sublist_num_data_addr = lib.find("ui_srclist_generate_sublist_num_data").orElseThrow();
MemorySegment ui_listview_create_addr = lib.find("ui_listview_create").orElseThrow();
MemorySegment ui_table_create_addr = lib.find("ui_table_create").orElseThrow();
srclist_remove = linker.downcallHandle(ui_srclist_remove_addr, sigv_mi);
srclist_clear = linker.downcallHandle(ui_srclist_remove_addr, sigv_m);
srclist_size = linker.downcallHandle(ui_srclist_size_addr, sigi_m);
+ srclist_generate_sublist_num_data = linker.downcallHandle(ui_srclist_generate_sublist_num_data_addr, sigv_m);
listview_create = linker.downcallHandle(ui_listview_create_addr, sigm_mm);
table_create = linker.downcallHandle(ui_table_create_addr, sigm_mm);
private String name;
private String styleClass;
private Menu contextMenu;
+ private boolean headerIsItem;
private int[] states;
private List<SubList> sublists;
return this;
}
+ public SourceListBuilder<T> headerIsItem(boolean headerIsItem) {
+ this.headerIsItem = headerIsItem;
+ return this;
+ }
+
public MemorySegment createArgs(Arena arena) throws Throwable {
ArgFuncs ui = ArgFuncs.getInstance();
menuBuilder = contextMenu.createMenuBuilder();
ui.sourcelist_args_set_contextmenu.invoke(args, menuBuilder);
}
+ if (headerIsItem) {
+ ui.sourcelist_args_set_header_is_item.invoke(args, headerIsItem);
+ }
return args;
}
@FunctionalInterface
public interface SubListValueConverter<T> {
- public SubListItem getValue(T elm);
+ public SubListItem getValue(T elm, int index, int sublistIndex);
}
return;
}
+ int sublistIndex = (int)sublistData.address();
+
userdata = userdata.reinterpret(16); // long[2]
long ctxPtr = userdata.getAtIndex(ValueLayout.JAVA_LONG, 0);
long converterIndex = userdata.getAtIndex(ValueLayout.JAVA_LONG, 1);
ToolkitFuncs ui = ToolkitFuncs.getInstance();
try(Arena arena = Arena.ofShared()) {
- Object listElm = uilist.get((int) index);
- SubListItem item = conv.getValue(listElm);
+ Object listElm = index >= 0 ? uilist.get((int) index) : null;
+ SubListItem item = conv.getValue(listElm, index, sublistIndex);
if(item.icon != null) {
MemorySegment cstr = arena.allocateFrom(item.icon);
ui.sublist_item_set_badge.invoke(out_item, cstr);
}
} catch (Throwable e) {
-
+ e.printStackTrace();
}
}
ListFuncs ui = ListFuncs.getInstance();
try {
ui.srclist_add.invoke(valuePtr, sublist.createToolkitSublist());
+ ui.srclist_generate_sublist_num_data.invoke(valuePtr);
} catch (Throwable e) {
throw new RuntimeException(e);
}
ListFuncs ui = ListFuncs.getInstance();
try {
ui.srclist_insert.invoke(valuePtr, index, sublist.createToolkitSublist());
+ ui.srclist_generate_sublist_num_data.invoke(valuePtr);
} catch (Throwable e) {
throw new RuntimeException(e);
}
try {
list.remove(index);
ui.srclist_remove.invoke(valuePtr, index);
+ ui.srclist_generate_sublist_num_data.invoke(valuePtr);
} catch (Throwable e) {
throw new RuntimeException(e);
}
//MyDocument doc = new MyDocument();
- ListView.<String>sourcelist(window).dynamicSublists(src).fill(true).getvalue((elm) -> {
+ ListView.<String>sourcelist(window).dynamicSublists(src).fill(true).getvalue((elm, i, sublist) -> {
return new SubListItem(elm);
}).onActivate((event -> {
SubListEventData data = event.getSubListEventData();
name: String? = null,
styleClass: String? = null,
contextmenu: Menu? = null,
+ headerIsItem: Boolean = false,
onActivate: EventHandler? = null,
onButtonClick: EventHandler? = null,
getvalue: SubListValueConverter<T>? = null
contextmenu?.let {
list.contextmenu(it)
}
+ if(headerIsItem) {
+ list.headerIsItem(true)
+ }
onActivate?.let {
list.onActivate(it)
}