From: Olaf Wintermann Date: Sun, 20 Jul 2025 16:31:29 +0000 (+0200) Subject: add dialog/dialog window X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=aa092688c142b5aaccabb5d2e25ff3fe8d1a94a7;p=rssreader.git add dialog/dialog window --- diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt index f3c1a65..e1881ff 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt @@ -13,7 +13,7 @@ class MainWindow { sidebar { vbox(fill = true) { - sourcelist { elm: Object -> + sourcelist(fill = true) { elm: Object -> val item = SubListItem() item.label = "todo" item @@ -24,15 +24,14 @@ class MainWindow { } } - - hsplitpane(initialPosition = 300) { - vbox { + hsplitpane(fill = true, initialPosition = 300) { + vbox(fill = true) { listview(varname = "items", fill = true) { elm, col -> "todo" } } - vbox { + vbox(fill = true) { webview(varname = "webview", fill = true) } } diff --git a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java index ad5b37a..422e882 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ArgFuncs.java @@ -6,6 +6,39 @@ import java.lang.invoke.MethodHandle; class ArgFuncs { static ArgFuncs instance; + MethodHandle dialog_args_new; + MethodHandle dialog_args_set_title; + MethodHandle dialog_args_set_content; + MethodHandle dialog_args_set_button1_label; + MethodHandle dialog_args_set_button2_label; + MethodHandle dialog_args_set_closebutton_label; + MethodHandle dialog_args_set_input_value; + MethodHandle dialog_args_set_input; + MethodHandle dialog_args_set_password; + MethodHandle dialog_args_set_result; + MethodHandle dialog_args_set_resultdata; + MethodHandle dialog_args_free; + + MethodHandle dialogwindow_args_new; + MethodHandle dialogwindow_args_set_modal; + MethodHandle dialogwindow_args_set_titlebar_buttons; + MethodHandle dialogwindow_args_set_show_closebutton; + MethodHandle dialogwindow_args_set_title; + MethodHandle dialogwindow_args_set_lbutton1; + MethodHandle dialogwindow_args_set_lbutton2; + MethodHandle dialogwindow_args_set_rbutton3; + MethodHandle dialogwindow_args_set_rbutton4; + MethodHandle dialogwindow_args_set_lbutton1_states; + MethodHandle dialogwindow_args_set_lbutton2_states; + MethodHandle dialogwindow_args_set_rbutton3_states; + MethodHandle dialogwindow_args_set_rbutton4_states; + MethodHandle dialogwindow_args_set_default_button; + MethodHandle dialogwindow_args_set_width; + MethodHandle dialogwindow_args_set_height; + MethodHandle dialogwindow_args_set_onclick; + MethodHandle dialogwindow_args_set_onclickdata; + MethodHandle dialogwindow_args_free; + MethodHandle menuitem_args_new; MethodHandle menuitem_args_set_label; MethodHandle menuitem_args_set_stockid; @@ -316,6 +349,39 @@ class ArgFuncs { FunctionDescriptor sigv_mi = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_INT); FunctionDescriptor sigv_md = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.JAVA_DOUBLE); + MemorySegment ui_dialog_args_new_addr = lib.find("ui_dialog_args_new").orElseThrow(); + MemorySegment ui_dialog_args_set_title_addr = lib.find("ui_dialog_args_set_title").orElseThrow(); + MemorySegment ui_dialog_args_set_content_addr = lib.find("ui_dialog_args_set_content").orElseThrow(); + MemorySegment ui_dialog_args_set_button1_label_addr = lib.find("ui_dialog_args_set_button1_label").orElseThrow(); + MemorySegment ui_dialog_args_set_button2_label_addr = lib.find("ui_dialog_args_set_button2_label").orElseThrow(); + MemorySegment ui_dialog_args_set_closebutton_label_addr = lib.find("ui_dialog_args_set_closebutton_label").orElseThrow(); + MemorySegment ui_dialog_args_set_input_value_addr = lib.find("ui_dialog_args_set_input_value").orElseThrow(); + MemorySegment ui_dialog_args_set_input_addr = lib.find("ui_dialog_args_set_input").orElseThrow(); + MemorySegment ui_dialog_args_set_password_addr = lib.find("ui_dialog_args_set_password").orElseThrow(); + MemorySegment ui_dialog_args_set_result_addr = lib.find("ui_dialog_args_set_result").orElseThrow(); + MemorySegment ui_dialog_args_set_resultdata_addr = lib.find("ui_dialog_args_set_resultdata").orElseThrow(); + MemorySegment ui_dialog_args_free_addr = lib.find("ui_dialog_args_free").orElseThrow(); + + MemorySegment ui_dialogwindow_args_new_addr = lib.find("ui_dialogwindow_args_new").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_modal_addr = lib.find("ui_dialogwindow_args_set_modal").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_titlebar_buttons_addr = lib.find("ui_dialogwindow_args_set_titlebar_buttons").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_show_closebutton_addr = lib.find("ui_dialogwindow_args_set_show_closebutton").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_title_addr = lib.find("ui_dialogwindow_args_set_title").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_lbutton1_addr = lib.find("ui_dialogwindow_args_set_lbutton1").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_lbutton2_addr = lib.find("ui_dialogwindow_args_set_lbutton2").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_rbutton3_addr = lib.find("ui_dialogwindow_args_set_rbutton3").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_rbutton4_addr = lib.find("ui_dialogwindow_args_set_rbutton4").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_lbutton1_states_addr = lib.find("ui_dialogwindow_args_set_lbutton1_states").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_lbutton2_states_addr = lib.find("ui_dialogwindow_args_set_lbutton2_states").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_rbutton3_states_addr = lib.find("ui_dialogwindow_args_set_rbutton3_states").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_rbutton4_states_addr = lib.find("ui_dialogwindow_args_set_rbutton4_states").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_default_button_addr = lib.find("ui_dialogwindow_args_set_default_button").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_width_addr = lib.find("ui_dialogwindow_args_set_width").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_height_addr = lib.find("ui_dialogwindow_args_set_height").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_onclick_addr = lib.find("ui_dialogwindow_args_set_onclick").orElseThrow(); + MemorySegment ui_dialogwindow_args_set_onclickdata_addr = lib.find("ui_dialogwindow_args_set_onclickdata").orElseThrow(); + MemorySegment ui_dialogwindow_args_free_addr = lib.find("ui_dialogwindow_args_free").orElseThrow(); + MemorySegment ui_menuitem_args_new_addr = lib.find("ui_menuitem_args_new").orElseThrow(); MemorySegment ui_menuitem_args_set_label_addr = lib.find("ui_menuitem_args_set_label").orElseThrow(); MemorySegment ui_menuitem_args_set_stockid_addr = lib.find("ui_menuitem_args_set_stockid").orElseThrow(); @@ -617,6 +683,39 @@ class ArgFuncs { MemorySegment ui_webview_args_set_groups_addr = lib.find("ui_webview_args_set_groups").orElseThrow(); MemorySegment ui_webview_args_free_addr = lib.find("ui_webview_args_free").orElseThrow(); + dialog_args_new = linker.downcallHandle(ui_dialog_args_new_addr, sigm); + dialog_args_set_title = linker.downcallHandle(ui_dialog_args_set_title_addr, sigv_mm); + dialog_args_set_content = linker.downcallHandle(ui_dialog_args_set_content_addr, sigv_mm); + dialog_args_set_button1_label = linker.downcallHandle(ui_dialog_args_set_button1_label_addr, sigv_mm); + dialog_args_set_button2_label = linker.downcallHandle(ui_dialog_args_set_button2_label_addr, sigv_mm); + dialog_args_set_closebutton_label = linker.downcallHandle(ui_dialog_args_set_closebutton_label_addr, sigv_mm); + dialog_args_set_input_value = linker.downcallHandle(ui_dialog_args_set_input_value_addr, sigv_mm); + dialog_args_set_input = linker.downcallHandle(ui_dialog_args_set_input_addr, sigv_mb); + dialog_args_set_password = linker.downcallHandle(ui_dialog_args_set_password_addr, sigv_mb); + dialog_args_set_result = linker.downcallHandle(ui_dialog_args_set_result_addr, sigv_mm); + dialog_args_set_resultdata = linker.downcallHandle(ui_dialog_args_set_resultdata_addr, sigv_mm); + dialog_args_free = linker.downcallHandle(ui_dialog_args_free_addr, sigv_m); + + dialogwindow_args_new = linker.downcallHandle(ui_dialogwindow_args_new_addr, sigm); + dialogwindow_args_set_modal = linker.downcallHandle(ui_dialogwindow_args_set_modal_addr, sigv_mi); + dialogwindow_args_set_titlebar_buttons = linker.downcallHandle(ui_dialogwindow_args_set_titlebar_buttons_addr, sigv_mi); + dialogwindow_args_set_show_closebutton = linker.downcallHandle(ui_dialogwindow_args_set_show_closebutton_addr, sigv_mi); + dialogwindow_args_set_title = linker.downcallHandle(ui_dialogwindow_args_set_title_addr, sigv_mm); + dialogwindow_args_set_lbutton1 = linker.downcallHandle(ui_dialogwindow_args_set_lbutton1_addr, sigv_mm); + dialogwindow_args_set_lbutton2 = linker.downcallHandle(ui_dialogwindow_args_set_lbutton2_addr, sigv_mm); + dialogwindow_args_set_rbutton3 = linker.downcallHandle(ui_dialogwindow_args_set_rbutton3_addr, sigv_mm); + dialogwindow_args_set_rbutton4 = linker.downcallHandle(ui_dialogwindow_args_set_rbutton4_addr, sigv_mm); + dialogwindow_args_set_lbutton1_states = linker.downcallHandle(ui_dialogwindow_args_set_lbutton1_states_addr, sigv_mm); + dialogwindow_args_set_lbutton2_states = linker.downcallHandle(ui_dialogwindow_args_set_lbutton2_states_addr, sigv_mm); + dialogwindow_args_set_rbutton3_states = linker.downcallHandle(ui_dialogwindow_args_set_rbutton3_states_addr, sigv_mm); + dialogwindow_args_set_rbutton4_states = linker.downcallHandle(ui_dialogwindow_args_set_rbutton4_states_addr, sigv_mm); + dialogwindow_args_set_default_button = linker.downcallHandle(ui_dialogwindow_args_set_default_button_addr, sigv_mi); + dialogwindow_args_set_width = linker.downcallHandle(ui_dialogwindow_args_set_width_addr, sigv_mi); + dialogwindow_args_set_height = linker.downcallHandle(ui_dialogwindow_args_set_height_addr, sigv_mi); + dialogwindow_args_set_onclick = linker.downcallHandle(ui_dialogwindow_args_set_onclick_addr, sigv_mm); + dialogwindow_args_set_onclickdata = linker.downcallHandle(ui_dialogwindow_args_set_onclickdata_addr, sigv_mm); + dialogwindow_args_free = linker.downcallHandle(ui_dialogwindow_args_free_addr, sigv_m); + menuitem_args_new = linker.downcallHandle(ui_menuitem_args_new_addr, sigm); menuitem_args_set_label = linker.downcallHandle(ui_menuitem_args_set_label_addr, sigv_mm); menuitem_args_set_stockid = linker.downcallHandle(ui_menuitem_args_set_stockid_addr, sigv_mm); diff --git a/ui-java/src/main/java/de/unixwork/ui/Dialog.java b/ui-java/src/main/java/de/unixwork/ui/Dialog.java new file mode 100644 index 0000000..1ffe25d --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/Dialog.java @@ -0,0 +1,113 @@ +package de.unixwork.ui; + +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; + +public class Dialog { + private UiObject parent; + + private String title; + private String content; + private String button1Label; + private String button2Label; + private String closeButtonLabel; + private String inputValue; + private boolean input; + private boolean password; + private EventHandler resultHandler; + + public Dialog(UiObject parent) { + this.parent = parent; + } + + public Dialog title(String title) { + this.title = title; + return this; + } + + public Dialog content(String content) { + this.content = content; + return this; + } + + public Dialog button1Label(String button1Label) { + this.button1Label = button1Label; + return this; + } + + public Dialog button2Label(String button2Label) { + this.button2Label = button2Label; + return this; + } + + public Dialog closeButtonLabel(String closeButtonLabel) { + this.closeButtonLabel = closeButtonLabel; + return this; + } + + public Dialog inputValue(String inputValue) { + this.inputValue = inputValue; + return this; + } + + public Dialog input(boolean input) { + this.input = input; + return this; + } + + public Dialog password(boolean password) { + this.password = password; + return this; + } + + public Dialog resultHandler(EventHandler resultHandler) { + this.resultHandler = resultHandler; + return this; + } + + public void show() { + ArgFuncs ui = ArgFuncs.getInstance(); + try(Arena arena = Arena.ofConfined()) { + MemorySegment args = (MemorySegment) ui.dialog_args_new.invoke(); + + if(title != null) { + MemorySegment cstr = arena.allocateFrom(title); + ui.dialog_args_set_title.invoke(args, cstr); + } + if(content != null) { + MemorySegment cstr = arena.allocateFrom(content); + ui.dialog_args_set_content.invoke(args, cstr); + } + if(button1Label != null) { + MemorySegment cstr = arena.allocateFrom(button1Label); + ui.dialog_args_set_button1_label.invoke(args, cstr); + } + if(button2Label != null) { + MemorySegment cstr = arena.allocateFrom(button2Label); + ui.dialog_args_set_button2_label.invoke(args, cstr); + } + if(closeButtonLabel != null) { + MemorySegment cstr = arena.allocateFrom(closeButtonLabel); + ui.dialog_args_set_closebutton_label.invoke(args, cstr); + } + if(inputValue != null) { + MemorySegment cstr = arena.allocateFrom(inputValue); + ui.dialog_args_set_input_value.invoke(args, cstr); + } + ui.dialog_args_set_input.invoke(args, input); + ui.dialog_args_set_password.invoke(args, password); + if(resultHandler != null) { + EventWrapper event = new EventWrapper(resultHandler); + ui.dialog_args_set_result.invoke(args, event.getCallback()); + ui.dialog_args_set_resultdata.invoke(args, event.getUserData()); + } + + // create dialog + UiObjectFuncs.instance.ui_dialog_create.invoke(parent.ptr, args); + + ui.dialog_args_free.invoke(args); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } +} diff --git a/ui-java/src/main/java/de/unixwork/ui/DialogWindowBuilder.java b/ui-java/src/main/java/de/unixwork/ui/DialogWindowBuilder.java new file mode 100644 index 0000000..dc39ab1 --- /dev/null +++ b/ui-java/src/main/java/de/unixwork/ui/DialogWindowBuilder.java @@ -0,0 +1,141 @@ +package de.unixwork.ui; + +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; + +public class DialogWindowBuilder { + private UiObject parent; + + private int modal; + private int titlebarButtons; + private int showCloseButton; + + private String title; + private String lbutton1; + private String lbutton2; + private String rbutton3; + private String rbutton4; + private int defaultButton; + private int width; + private int height; + private EventHandler onClick; + + public DialogWindowBuilder(UiObject parent) { + this.parent = parent; + } + + public DialogWindowBuilder modal(boolean modal) { + this.modal = modal ? 1 : 2; // UiTri: default, on, off + return this; + } + + public DialogWindowBuilder titlebarButtons(boolean showButtons) { + this.titlebarButtons = showButtons ? 1 : 2; + return this; + } + + public DialogWindowBuilder showCloseButton(boolean showCloseButton) { + this.showCloseButton = showCloseButton ? 1 : 2; + return this; + } + + public DialogWindowBuilder title(String title) { + this.title = title; + return this; + } + + public DialogWindowBuilder lbutton1(String label) { + this.lbutton1 = label; + return this; + } + + public DialogWindowBuilder lbutton2(String label) { + this.lbutton2 = label; + return this; + } + + public DialogWindowBuilder rbutton3(String label) { + this.rbutton3 = label; + return this; + } + + public DialogWindowBuilder rbutton4(String label) { + this.rbutton4 = label; + return this; + } + + public DialogWindowBuilder defaultButton(int defaultButton) { + this.defaultButton = defaultButton; + return this; + } + + public DialogWindowBuilder width(int width) { + this.width = width; + return this; + } + + public DialogWindowBuilder height(int height) { + this.height = height; + return this; + } + + public DialogWindowBuilder size(int width, int height) { + this.width = width; + this.height = height; + return this; + } + + public DialogWindowBuilder onClick(EventHandler onClick) { + this.onClick = onClick; + return this; + } + + public UiObject create() { + ArgFuncs ui = ArgFuncs.getInstance(); + try(Arena arena = Arena.ofConfined()) { + MemorySegment args = (MemorySegment) ui.dialogwindow_args_new.invoke(); + + ui.dialogwindow_args_set_modal.invoke(args, modal); + ui.dialogwindow_args_set_titlebar_buttons.invoke(args, titlebarButtons); + ui.dialogwindow_args_set_show_closebutton.invoke(args, showCloseButton); + + if(title != null) { + MemorySegment cstr = arena.allocateFrom(title); + ui.dialogwindow_args_set_title.invoke(args, cstr); + } + + if (lbutton1 != null) { + MemorySegment cstr = arena.allocateFrom(lbutton1); + ui.dialogwindow_args_set_lbutton1.invoke(args, cstr); + } + if (lbutton2 != null) { + MemorySegment cstr = arena.allocateFrom(lbutton2); + ui.dialogwindow_args_set_lbutton2.invoke(args, cstr); + } + if (rbutton3 != null) { + MemorySegment cstr = arena.allocateFrom(rbutton3); + ui.dialogwindow_args_set_rbutton3.invoke(args, cstr); + } + if (rbutton4 != null) { + MemorySegment cstr = arena.allocateFrom(rbutton4); + ui.dialogwindow_args_set_rbutton4.invoke(args, cstr); + } + + ui.dialogwindow_args_set_default_button.invoke(args, defaultButton); + ui.dialogwindow_args_set_width.invoke(args, width); + ui.dialogwindow_args_set_height.invoke(args, height); + + if(onClick != null) { + EventWrapper event = new EventWrapper(onClick); + ui.dialogwindow_args_set_onclick.invoke(args, event.getCallback()); + ui.dialogwindow_args_set_onclickdata.invoke(args, event.getUserData()); + } + + UiObject obj = UiObjectFuncs.instance.dialogWindow(parent.ptr, args); + ui.dialogwindow_args_free.invoke(args); + return obj; + } catch (Throwable e) { + throw new RuntimeException(e); + } + } +} diff --git a/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java b/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java index 014e5a4..efe702c 100644 --- a/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/UiObjectFuncs.java @@ -10,22 +10,31 @@ class UiObjectFuncs { public MethodHandle ui_window; public MethodHandle ui_sidebar_window; public MethodHandle ui_simple_window; + public MethodHandle ui_dialog_window_create; + public MethodHandle ui_dialog_create; + private UiObjectFuncs(Linker linker, SymbolLookup lib) { // void* func(void*, void*) FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS); // void func(void*) FunctionDescriptor sigv_m = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS); + // void func(void*, void*) + FunctionDescriptor sigv_mm = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS); MemorySegment ui_show_addr = lib.find("ui_show").orElseThrow(); MemorySegment ui_window_addr = lib.find("ui_window").orElseThrow(); MemorySegment ui_sidebar_window_addr = lib.find("ui_sidebar_window").orElseThrow(); MemorySegment ui_simple_window_addr = lib.find("ui_simple_window").orElseThrow(); + MemorySegment ui_dialog_window_create_addr = lib.find("ui_dialog_window_create").orElseThrow(); + MemorySegment ui_dialog_create_addr = lib.find("ui_dialog_create").orElseThrow(); ui_show = linker.downcallHandle(ui_show_addr, sigv_m); ui_window = linker.downcallHandle(ui_window_addr, sigm_mm); ui_sidebar_window = linker.downcallHandle(ui_sidebar_window_addr, sigm_mm); ui_simple_window = linker.downcallHandle(ui_simple_window_addr, sigm_mm); + ui_dialog_window_create = linker.downcallHandle(ui_dialog_window_create_addr, sigm_mm); + ui_dialog_create = linker.downcallHandle(ui_dialog_create_addr, sigv_mm); } // must be called by the Toolkit constructor @@ -65,6 +74,22 @@ class UiObjectFuncs { return createWindow(title, ui_sidebar_window); } + UiObject dialogWindow(MemorySegment parent, MemorySegment args) { + MemorySegment obj = null; + Toolkit toolkit = Toolkit.getInstance(); + // see createWindow for details + toolkit.setIsObjRegEnabled(false); + try { + obj = (MemorySegment) ui_dialog_window_create.invoke(parent, args); + } catch (Throwable e) { + toolkit.setIsObjRegEnabled(true); + throw new RuntimeException(e); + } + toolkit.setIsObjRegEnabled(true); + + return new UiObject(obj); + } + void show(UiObject obj) { try { ui_show.invoke(obj.ptr); diff --git a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt index 20bfbb9..d337cb3 100644 --- a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt +++ b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Toplevel.kt @@ -56,6 +56,9 @@ class Toplevel(obj: UiObject) { rowspacing: Int = -1, ui: ContainerUI? = null ): UiWidget { + if(fill) { + container.fill(true) + } if(hexpand) { container.hexpand(true) } @@ -251,6 +254,9 @@ class Toplevel(obj: UiObject) { Container.vsplitview(this@Toplevel.ui) } + if(fill) { + container.fill(true) + } if(hexpand) { container.hexpand(true) } @@ -390,7 +396,6 @@ class Toplevel(obj: UiObject) { ui: ContainerUI? = null ): UiWidget { val container = Container.sidebar(this@Toplevel.ui) - if(margin > 0) { container.margin(margin) } diff --git a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Window.kt b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Window.kt index d3fe17f..a1c048f 100644 --- a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Window.kt +++ b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Window.kt @@ -1,5 +1,8 @@ package de.unixwork.ui.kotlin +import de.unixwork.ui.Dialog +import de.unixwork.ui.DialogWindowBuilder +import de.unixwork.ui.EventHandler import de.unixwork.ui.UiObject fun window(title: String, ui: (Toplevel.() -> Unit)?): Toplevel { @@ -22,3 +25,91 @@ fun sidebarWindow(title: String, ui: (Toplevel.() -> Unit)?): Toplevel { ui?.invoke(toplevel) return toplevel } + +fun dialog( + parent: UiObject, + title: String? = null, + content: String? = null, + button1Label: String? = null, + button2Label: String? = null, + closeButtonLabel: String? = null, + inputValue: String? = null, + input: Boolean = false, + password: Boolean = false, + result: EventHandler? = null +) { + val dialog = Dialog(parent) + title?.let { + dialog.title(it) + } + content?.let { + dialog.content(it) + } + button1Label?.let { + dialog.button1Label(it) + } + button2Label?.let { + dialog.button2Label(it) + } + closeButtonLabel?.let { + dialog.closeButtonLabel(it) + } + inputValue?.let { + dialog.inputValue(it) + } + dialog.input(input) + dialog.password(password) + result?.let { + dialog.resultHandler(result) + } + dialog.show() +} + +fun dialogWindow( + parent: UiObject, + modal: Boolean? = null, + titlebarButtons: Boolean? = null, + showCloseButton: Boolean? = null, + lbutton1: String? = null, + lbutton2: String? = null, + rbutton3: String? = null, + rbutton4: String? = null, + defaultButton: Int = 0, + width: Int = 0, + height: Int = 0, + onClick: EventHandler? = null, + ui: (Toplevel.() -> Unit)?): Toplevel +{ + val builder = DialogWindowBuilder(parent) + modal?.let { + builder.modal(it) + } + titlebarButtons?.let { + builder.titlebarButtons(it) + } + showCloseButton?.let { + builder.showCloseButton(it) + } + lbutton1?.let { + builder.lbutton1(it) + } + lbutton2?.let { + builder.lbutton2(it) + } + rbutton3?.let { + builder.rbutton3(it) + } + rbutton4?.let { + builder.rbutton4(it) + } + builder.defaultButton(defaultButton) + builder.width(width) + builder.height(height) + onClick?.let { + builder.onClick(it) + } + + val toplevel = Toplevel(builder.create()) + ui?.invoke(toplevel) + return toplevel +}