]> uap-core.de Git - note.git/commitdiff
add new macros for creating widgets
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 24 Jul 2026 18:27:38 +0000 (20:27 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 24 Jul 2026 18:27:38 +0000 (20:27 +0200)
application/note/src/window.rs
ui-rs/src/ui/button.rs
ui-rs/src/ui/label.rs
ui-rs/src/ui/list.rs
ui-rs/src/ui/text.rs
ui-rs/src/ui/widget.rs

index 2b5b01976650f36ce7330f6656344d417b2450c2..0c6aac4ab6719c78934d444b7c8fbe5db602f923 100644 (file)
@@ -28,7 +28,7 @@
 
 use std::any::Any;
 use backend::backend::{BackendHandle, BroadcastMessage, NoteId};
-use ui_rs::{action, ui_actions, UiModel};
+use ui_rs::{action, button, ui_actions, UiModel};
 use ui_rs::ui::*;
 use crate::{App, AppStates};
 use entity::collection::{Model as Collection, Node};
@@ -305,10 +305,7 @@ pub fn create_window(app: &App, ctx: &AppContext<MainWindow>) -> UiObject<MainWi
                                         t.varname("note_nodename");
                                         t.onchange_action("note_nodename_change");
                                     });
-                                    obj.button(|b|{
-                                        b.label("Open");
-                                        b.action("open_extern");
-                                    });
+                                    button!(obj, label = "Open", action = "open_extern");
                                 });
                             }
                         );
index 48e7d3d90050e04f44758ee9136555d350cd6444..b8ed0e453e52bc6ffd7f6d8f7bdfb8b1a1967108 100644 (file)
@@ -36,6 +36,43 @@ use crate::ui::{event, toolkit, EventWrapper};
 use crate::ui::ffi::*;
 use crate::ui::widget::*;
 
+
+#[macro_export]
+macro_rules! button {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, button_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! togglebutton {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, togglebutton_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! checkbox {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, checkbox_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! switch {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, switch_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! radiobutton {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, radiobutton_builder, $($tt)*)
+    };
+}
+
+
 pub struct Button {
     ptr: *mut c_void
 }
index 501ba0ca4b2982c3861f743c13b662c189cb9414..dc0c107bafa677239b76fb044e44bee9eaa13413 100644 (file)
@@ -3,6 +3,28 @@ use crate::ui::{ffi, toolkit, Button, ButtonBuilder};
 use crate::ui::ffi::{UiButtonArgs, UiLabelArgs, UiObject, UiString, UiToggleArgs};
 use crate::ui::widget::{widget_fn, Widget};
 
+
+#[macro_export]
+macro_rules! label {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, label_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! llabel {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, llabel_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! rlabel {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, rlabel_builder, $($tt)*)
+    };
+}
+
 pub struct Label {
     ptr: *mut c_void
 }
index 0a732d684c5e9c4c8fac925cf78fe62848e4bb65..37c1f3a79badc51c522f0826fe4a81e718e723f8 100644 (file)
@@ -36,6 +36,34 @@ use std::marker::PhantomData;
 use std::mem;
 use crate::ui::widget::{widget_typed_fn, Widget};
 
+#[macro_export]
+macro_rules! listview {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, listview_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! dropdown {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, dropdown_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! tableview {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, tableview_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! sourcelist {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, sourcelist_builder, $($tt)*)
+    };
+}
+
 
 pub struct ListView {
     ptr: *mut c_void
index 3064de0d7dd1cf0b972663f7f50d2dd263156ea4..31d78270fc0575518684e72c12dec5c9afe83b06 100644 (file)
@@ -35,6 +35,35 @@ use crate::ui::ffi::*;
 use crate::ui::widget::{widget_fn, Widget};
 
 
+#[macro_export]
+macro_rules! textarea {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, textarea_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! textfield {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, textfield_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! passwordfield {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, passwordfield_builder, $($tt)*)
+    };
+}
+
+#[macro_export]
+macro_rules! frameless_textfield {
+    ($parent:expr, $($tt:tt)*) => {
+        $crate::widget!($parent, frameless_textfield_builder, $($tt)*)
+    };
+}
+
+
 /* -------------------------------- TextArea -------------------------------- */
 
 pub struct TextArea {
index bf0f7e83b9b2a5824444d8b0da9ace1522008a6e..b4d9bf9c8337e1b49a9e6de3e1679a26d807db2a 100644 (file)
@@ -57,6 +57,23 @@ pub trait Widget {
 }
 
 
+#[macro_export]
+macro_rules! widget {
+    (
+        $parent:expr,
+        $widget:ident
+        $(, $name:ident = $value:expr )*
+        $(,)?
+    ) => {{
+        let mut builder = $parent.$widget();
+        let builder = builder
+            $(.$name($value))*;
+        builder.create()
+    }};
+}
+
+
+
 /* ------------------------------ C functions ----------------------------- */
 
 unsafe extern "C" {