From: Olaf Wintermann Date: Sat, 25 Jul 2026 14:29:50 +0000 (+0200) Subject: remove closure based widget builder methods X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=HEAD;p=note.git remove closure based widget builder methods --- diff --git a/ui-rs/src/ui/button.rs b/ui-rs/src/ui/button.rs index b8ed0e4..fba6f06 100644 --- a/ui-rs/src/ui/button.rs +++ b/ui-rs/src/ui/button.rs @@ -135,12 +135,6 @@ pub enum LinkButtonType { pub type ToggleButtonCreate = fn(*const UiObject, *const UiToggleArgs) -> *mut c_void; impl toolkit::UiObject { - widget_fn!(button, button_builder, ButtonBuilder, Button); - widget_fn!(togglebutton, togglebutton_builder, ToggleBuilder, ToggleButton); - widget_fn!(checkbox, checkbox_builder, ToggleBuilder, ToggleButton); - widget_fn!(switch, switch_builder, ToggleBuilder, ToggleButton); - widget_fn!(radiobutton, radiobutton_builder, ToggleBuilder, ToggleButton); - pub fn button_builder<'a>(&'a mut self) -> ButtonBuilder<'a, T> { unsafe { let args = ui_button_args_new(); diff --git a/ui-rs/src/ui/label.rs b/ui-rs/src/ui/label.rs index dc0c107..0ff0694 100644 --- a/ui-rs/src/ui/label.rs +++ b/ui-rs/src/ui/label.rs @@ -1,7 +1,7 @@ use std::ffi::{c_char, c_int, c_void, CString}; use crate::ui::{ffi, toolkit, Button, ButtonBuilder}; use crate::ui::ffi::{UiButtonArgs, UiLabelArgs, UiObject, UiString, UiToggleArgs}; -use crate::ui::widget::{widget_fn, Widget}; +use crate::ui::widget::{Widget}; #[macro_export] @@ -58,10 +58,6 @@ pub enum Alignment { } impl toolkit::UiObject { - widget_fn!(label, label_builder, LabelBuilder, Label); - widget_fn!(llabel, llabel_builder, LabelBuilder, Label); - widget_fn!(rlabel, rlabel_builder, LabelBuilder, Label); - pub fn label_builder<'a>(&'a mut self) -> LabelBuilder<'a, T> { unsafe { let args = ui_label_args_new(); diff --git a/ui-rs/src/ui/list.rs b/ui-rs/src/ui/list.rs index 37c1f3a..78dedbb 100644 --- a/ui-rs/src/ui/list.rs +++ b/ui-rs/src/ui/list.rs @@ -34,7 +34,7 @@ use std::ffi::{c_char, c_int, c_void}; use std::ffi::CString; use std::marker::PhantomData; use std::mem; -use crate::ui::widget::{widget_typed_fn, Widget}; +use crate::ui::widget::{Widget}; #[macro_export] macro_rules! listview { @@ -138,10 +138,6 @@ pub enum ColumnType { pub type ListBuilderCreate = fn(*const UiObject, *const UiListArgs) -> ListView; impl toolkit::UiObject { - widget_typed_fn!(listview, listview_builder, ListViewBuilder); - widget_typed_fn!(tableview, tableview_builder, TableViewBuilder); - widget_typed_fn!(sourcelist, sourcelist_builder, SourceListBuilder); - pub fn listview_builder<'a, E>(&'a mut self) -> ListViewBuilder<'a, T, E> { unsafe { let args = ui_list_args_new(); diff --git a/ui-rs/src/ui/text.rs b/ui-rs/src/ui/text.rs index 31d7827..7a8c443 100644 --- a/ui-rs/src/ui/text.rs +++ b/ui-rs/src/ui/text.rs @@ -32,7 +32,7 @@ use std::ffi::{c_char, c_int, c_void}; use std::ffi::CString; use crate::ui::{event, toolkit, EventWrapper}; use crate::ui::ffi::*; -use crate::ui::widget::{widget_fn, Widget}; +use crate::ui::widget::{Widget}; #[macro_export] @@ -126,8 +126,6 @@ pub struct TextAreaBuilder<'a, T> { } impl toolkit::UiObject { - widget_fn!(textarea, textarea_builder, TextAreaBuilder, TextArea); - pub fn textarea_builder<'a>(&'a mut self) -> TextAreaBuilder<'a, T> { unsafe { let args = ui_textarea_args_new(); @@ -425,10 +423,6 @@ pub fn frameless_textfield_create(obj: *const UiObject, args: *const UiTextField } impl toolkit::UiObject { - widget_fn!(textfield, textfield_builder, TextFieldBuilder, TextField); - widget_fn!(passwordfield, passwordfield_builder, TextFieldBuilder, TextField); - widget_fn!(frameless_textfield, frameless_textfield_builder, TextFieldBuilder, TextField); - pub fn textfield_builder<'a>(&'a mut self) -> TextFieldBuilder<'a, T> { unsafe { let args = ui_textfield_args_new(); diff --git a/ui-rs/src/ui/widget.rs b/ui-rs/src/ui/widget.rs index ec37de6..cfc6e0c 100644 --- a/ui-rs/src/ui/widget.rs +++ b/ui-rs/src/ui/widget.rs @@ -28,6 +28,8 @@ #![allow(dead_code)] +use std::ffi::{c_int, c_void}; + pub trait Widget { fn get_widget(&self) -> *mut c_void; @@ -83,53 +85,4 @@ unsafe extern "C" { fn ui_widget_set_visible(widget: *mut c_void, enable: c_int); } -/* ------------------------ internal helper macros ------------------------ */ - -/// -/// Create a closure-based widget creation function -/// -/// # Example: -/// -/// pub fn button_builder(&self) -> ButtonBuilder { ... } -/// widget_fn!(button, button_builder, ButtonBuilder); -/// -/// This creates a function -/// -/// pub fn button(&self, build: F) -/// -/// That can be used like: -/// -/// obj.button(|b| { -/// b.label("Hello"); -/// } -/// -macro_rules! widget_fn { - ($fn_name:ident, $builder_fn:ident, $builder_ty:ident, $widget:ident) => { - pub fn $fn_name(&mut self, build: F) -> $widget - where - F: Fn(&mut $builder_ty), - { - let mut builder = self.$builder_fn(); - build(&mut builder); - builder.create() - } - }; -} - -macro_rules! widget_typed_fn { - ($fn_name:ident, $builder_fn:ident, $builder_ty:ident) => { - pub fn $fn_name(&mut self, build: F) - where - F: Fn(&mut $builder_ty), - { - let mut builder = self.$builder_fn(); - build(&mut builder); - builder.create(); - } - }; -} - -use std::ffi::{c_int, c_void}; -pub(super) use widget_fn; -pub(super) use widget_typed_fn; diff --git a/ui-rs/src/ui/window.rs b/ui-rs/src/ui/window.rs index bc28e3a..9c08b99 100644 --- a/ui-rs/src/ui/window.rs +++ b/ui-rs/src/ui/window.rs @@ -34,7 +34,6 @@ use std::ffi::{c_uint, CString}; use std::marker::PhantomData; use crate::ui::{destroy_boxed, event, event_wrapper_oneshot, ffi, toolkit, ui_object_ref, ui_update_action_bindings, AppContext, EventWrapper, NoAppData, UiActions, UiModel}; use crate::ui::ffi::{UiButtonArgs, UiCallback, UiContext, UiDestructor, UiDialogArgs, UiDialogWindowArgs, UiObject}; -use crate::ui::widget::widget_fn; impl toolkit::UiObject { pub fn show(&self) {