package de.unixwork.rssreader
import de.unixwork.ui.Document
+import de.unixwork.ui.UiLinkData
class FeedList : Document() {
val items = list<Item>("items")
val feedName = string("feedname")
val author = string("author")
- val link = string("link")
+ val linkstr = string("link")
+ val link = UiLinkData(linkstr)
val webview = webview("webview")
fun loadFeed(feed: FeedCollection) {
fun selectItem(item: Item) {
feedName.setString(item.feedName)
author.setString(item.author)
- link.setString(item.link)
+ link.set(item.link, item.link)
webview.loadContent(null, item.content ?: "", "text/html", "utf-8")
}
}
\ No newline at end of file
}
row {
rlabel("Link:", hfill = true)
- llabel(varname = "link")
+ linkbutton(varname = "link")
}
row {
public MethodHandle radiobutton_create;
public MethodHandle linkbutton_create;
+ public MethodHandle linkbutton_value_set;
+ public MethodHandle linkbutton_value_set_label;
+ public MethodHandle linkbutton_value_set_uri;
+ public MethodHandle linkbutton_value_set_visited;
+
private ButtonFuncs(Linker linker, SymbolLookup lib) {
// void* func(void*, void*)
FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS);
+ FunctionDescriptor sigv_mm = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS);
+ FunctionDescriptor sigv_mb = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_BOOLEAN);
MemorySegment ui_button_create_addr = lib.find("ui_button_create").orElseThrow();
MemorySegment ui_togglebutton_create_addr = lib.find("ui_togglebutton_create").orElseThrow();
MemorySegment ui_radiobutton_create_addr = lib.find("ui_radiobutton_create").orElseThrow();
MemorySegment ui_linkbutton_create_addr = lib.find("ui_linkbutton_create").orElseThrow();
+ MemorySegment ui_linkbutton_value_set_addr = lib.find("ui_linkbutton_value_set").orElseThrow();
+ MemorySegment ui_linkbutton_value_set_label_addr = lib.find("ui_linkbutton_value_set_label").orElseThrow();
+ MemorySegment ui_linkbutton_value_set_uri_addr = lib.find("ui_linkbutton_value_set_uri").orElseThrow();
+ MemorySegment ui_linkbutton_value_set_visited_addr = lib.find("ui_linkbutton_value_set_visited").orElseThrow();
+
button_create = linker.downcallHandle(ui_button_create_addr, sigm_mm);
togglebutton_create = linker.downcallHandle(ui_togglebutton_create_addr, sigm_mm);
checkbox_create = linker.downcallHandle(ui_checkbox_create_addr, sigm_mm);
switch_create = linker.downcallHandle(ui_switch_create_addr, sigm_mm);
radiobutton_create = linker.downcallHandle(ui_radiobutton_create_addr, sigm_mm);
linkbutton_create = linker.downcallHandle(ui_linkbutton_create_addr, sigm_mm);
+
+ linkbutton_value_set = linker.downcallHandle(ui_linkbutton_value_set_addr, sigv_mm);
+ linkbutton_value_set_label = linker.downcallHandle(ui_linkbutton_value_set_label_addr, sigv_mm);
+ linkbutton_value_set_uri = linker.downcallHandle(ui_linkbutton_value_set_uri_addr, sigv_mm);
+ linkbutton_value_set_visited = linker.downcallHandle(ui_linkbutton_value_set_visited_addr, sigv_mb);
}
static ButtonFuncs getInstance() {
private String varname;
private UiString value;
private boolean nofollow;
- private c type;
+ private LinkButtonType type;
private int[] states;
public LinkButtonBuilder(UiObject obj, MethodHandle widgetConstructor) {
--- /dev/null
+package de.unixwork.ui;
+
+import java.lang.foreign.Arena;
+import java.lang.foreign.MemorySegment;
+
+public class UiLinkData {
+ private UiString value;
+
+ public UiLinkData(UiString value) {
+ this.value = value;
+ }
+
+ public UiString getValue() {
+ return value;
+ }
+
+ public void set(String label, String uri) {
+ ButtonFuncs ui = ButtonFuncs.getInstance();
+ try (Arena arena = Arena.ofConfined()) {
+ MemorySegment labelCstr = arena.allocateFrom(label);
+ MemorySegment uriCstr = arena.allocateFrom(uri);
+ ui.linkbutton_value_set.invoke(value.valuePtr, labelCstr, uriCstr);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void setLabel(String label) {
+ ButtonFuncs ui = ButtonFuncs.getInstance();
+ try (Arena arena = Arena.ofConfined()) {
+ MemorySegment cstr = arena.allocateFrom(label);
+ ui.linkbutton_value_set_label.invoke(value.valuePtr, cstr);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void setUri(String uri) {
+ ButtonFuncs ui = ButtonFuncs.getInstance();
+ try (Arena arena = Arena.ofConfined()) {
+ MemorySegment cstr = arena.allocateFrom(uri);
+ ui.linkbutton_value_set_uri.invoke(value.valuePtr, cstr);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+}