]> uap-core.de Git - note.git/commitdiff
add textarea
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 7 Apr 2026 18:04:18 +0000 (20:04 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 7 Apr 2026 18:04:18 +0000 (20:04 +0200)
ui-rs/src/ui/button.rs
ui-rs/src/ui/ffi.rs
ui-rs/src/ui/mod.rs
ui-rs/src/ui/text.rs [new file with mode: 0644]

index 45f36abd11a7ed1210ace152024b35b3192e3ab9..9001aca2caa72fc3c9327d98b3de728a62907e34 100644 (file)
@@ -7,70 +7,6 @@ use crate::ui::{toolkit};
 use crate::ui::ffi::*;
 use crate::ui::widget::widget_fn;
 
-extern "C" {
-    fn ui_button_create(obj: *const UiObject, args: *const UiButtonArgs);
-    fn ui_togglebutton_create(obj: *const UiObject, args: *const UiToggleArgs);
-    fn ui_checkbox_create(obj: *const UiObject, args: *const UiToggleArgs);
-    fn ui_switch_create(obj: *const UiObject, args: *const UiToggleArgs);
-    fn ui_radiobutton_create(obj: *const UiObject, args: *const UiToggleArgs);
-    fn ui_linkbutton_create(obj: *const UiObject, args: *const UiLinkButtonArgs);
-
-    fn ui_button_args_new() -> *mut UiButtonArgs;
-    fn ui_button_args_set_fill(args: *mut UiButtonArgs, fill: c_int);
-    fn ui_button_args_set_hexpand(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_vexpand(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_hfill(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_vfill(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_override_defaults(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_margin(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_margin_left(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_margin_right(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_margin_top(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_margin_bottom(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_colspan(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_rowspan(args: *mut UiButtonArgs, value: c_int);
-    fn ui_button_args_set_name(args: *mut UiButtonArgs, name: *const c_char);
-    fn ui_button_args_set_style_class(args: *mut UiButtonArgs, classname: *const c_char);
-    fn ui_button_args_set_label(args: *mut UiButtonArgs, label: *const c_char);
-    fn ui_button_args_set_icon(args: *mut UiButtonArgs, icon: *const c_char);
-    fn ui_button_args_set_tooltip(args: *mut UiButtonArgs, tooltip: *const c_char);
-    fn ui_button_args_set_labeltype(args: *mut UiButtonArgs, ltype: c_int);
-    fn ui_button_args_set_onclick(args: *mut UiButtonArgs, callback: UiCallback);
-    fn ui_button_args_set_onclickdata(args: *mut UiButtonArgs, data: *mut c_void);
-    fn ui_button_args_set_states(args: *mut UiButtonArgs, states: *const c_int, numstates: c_int);
-    fn ui_button_args_set_visibility_states(args: *mut UiButtonArgs, states: *const c_int, numstates: c_int);
-    fn ui_button_args_free(args: *mut UiButtonArgs);
-
-    fn ui_toggle_args_new() -> *mut UiToggleArgs;
-    fn ui_toggle_args_set_fill(args: *mut UiToggleArgs, fill: c_int);
-    fn ui_toggle_args_set_hexpand(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_vexpand(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_hfill(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_vfill(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_override_defaults(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_margin(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_margin_left(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_margin_right(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_margin_top(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_margin_bottom(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_colspan(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_rowspan(args: *mut UiToggleArgs, value: c_int);
-    fn ui_toggle_args_set_name(args: *mut UiToggleArgs, name: *const c_char);
-    fn ui_toggle_args_set_style_class(args: *mut UiToggleArgs, classname: *const c_char);
-    fn ui_toggle_args_set_label(args: *mut UiToggleArgs, label: *const c_char);
-    fn ui_toggle_args_set_icon(args: *mut UiToggleArgs, icon: *const c_char);
-    fn ui_toggle_args_set_tooltip(args: *mut UiToggleArgs, tooltip: *const c_char);
-    fn ui_toggle_args_set_labeltype(args: *mut UiToggleArgs, ltype: c_int);
-    fn ui_toggle_args_set_onchange(args: *mut UiToggleArgs, callback: UiCallback);
-    fn ui_toggle_args_set_onchangedata(args: *mut UiToggleArgs, data: *mut c_void);
-    fn ui_toggle_args_set_varname(args: *mut UiToggleArgs, varname: *const c_char);
-    fn ui_toggle_args_set_value(args: *mut UiToggleArgs, ivalue: *mut UiInteger);
-    fn ui_toggle_args_set_enablestate(args: *mut UiToggleArgs, state: c_int);
-    fn ui_toggle_args_set_states(args: *mut UiToggleArgs, states: *const c_int, numstates: c_int);
-    fn ui_toggle_args_set_visibility_states(args: *mut UiToggleArgs, states: *const c_int, numstates: c_int);
-    fn ui_toggle_args_free(args: *mut UiToggleArgs);
-}
-
 pub struct ButtonBuilder {
     args: *mut UiButtonArgs,
     obj: *const UiObject
@@ -484,4 +420,69 @@ impl ToggleBuilder {
     }
 
     // TODO: callback, states
-}
\ No newline at end of file
+}
+
+
+extern "C" {
+    fn ui_button_create(obj: *const UiObject, args: *const UiButtonArgs);
+    fn ui_togglebutton_create(obj: *const UiObject, args: *const UiToggleArgs);
+    fn ui_checkbox_create(obj: *const UiObject, args: *const UiToggleArgs);
+    fn ui_switch_create(obj: *const UiObject, args: *const UiToggleArgs);
+    fn ui_radiobutton_create(obj: *const UiObject, args: *const UiToggleArgs);
+    fn ui_linkbutton_create(obj: *const UiObject, args: *const UiLinkButtonArgs);
+
+    fn ui_button_args_new() -> *mut UiButtonArgs;
+    fn ui_button_args_set_fill(args: *mut UiButtonArgs, fill: c_int);
+    fn ui_button_args_set_hexpand(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_vexpand(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_hfill(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_vfill(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_override_defaults(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_margin(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_margin_left(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_margin_right(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_margin_top(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_margin_bottom(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_colspan(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_rowspan(args: *mut UiButtonArgs, value: c_int);
+    fn ui_button_args_set_name(args: *mut UiButtonArgs, name: *const c_char);
+    fn ui_button_args_set_style_class(args: *mut UiButtonArgs, classname: *const c_char);
+    fn ui_button_args_set_label(args: *mut UiButtonArgs, label: *const c_char);
+    fn ui_button_args_set_icon(args: *mut UiButtonArgs, icon: *const c_char);
+    fn ui_button_args_set_tooltip(args: *mut UiButtonArgs, tooltip: *const c_char);
+    fn ui_button_args_set_labeltype(args: *mut UiButtonArgs, ltype: c_int);
+    fn ui_button_args_set_onclick(args: *mut UiButtonArgs, callback: UiCallback);
+    fn ui_button_args_set_onclickdata(args: *mut UiButtonArgs, data: *mut c_void);
+    fn ui_button_args_set_states(args: *mut UiButtonArgs, states: *const c_int, numstates: c_int);
+    fn ui_button_args_set_visibility_states(args: *mut UiButtonArgs, states: *const c_int, numstates: c_int);
+    fn ui_button_args_free(args: *mut UiButtonArgs);
+
+    fn ui_toggle_args_new() -> *mut UiToggleArgs;
+    fn ui_toggle_args_set_fill(args: *mut UiToggleArgs, fill: c_int);
+    fn ui_toggle_args_set_hexpand(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_vexpand(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_hfill(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_vfill(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_override_defaults(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_margin(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_margin_left(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_margin_right(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_margin_top(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_margin_bottom(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_colspan(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_rowspan(args: *mut UiToggleArgs, value: c_int);
+    fn ui_toggle_args_set_name(args: *mut UiToggleArgs, name: *const c_char);
+    fn ui_toggle_args_set_style_class(args: *mut UiToggleArgs, classname: *const c_char);
+    fn ui_toggle_args_set_label(args: *mut UiToggleArgs, label: *const c_char);
+    fn ui_toggle_args_set_icon(args: *mut UiToggleArgs, icon: *const c_char);
+    fn ui_toggle_args_set_tooltip(args: *mut UiToggleArgs, tooltip: *const c_char);
+    fn ui_toggle_args_set_labeltype(args: *mut UiToggleArgs, ltype: c_int);
+    fn ui_toggle_args_set_onchange(args: *mut UiToggleArgs, callback: UiCallback);
+    fn ui_toggle_args_set_onchangedata(args: *mut UiToggleArgs, data: *mut c_void);
+    fn ui_toggle_args_set_varname(args: *mut UiToggleArgs, varname: *const c_char);
+    fn ui_toggle_args_set_value(args: *mut UiToggleArgs, ivalue: *mut UiInteger);
+    fn ui_toggle_args_set_enablestate(args: *mut UiToggleArgs, state: c_int);
+    fn ui_toggle_args_set_states(args: *mut UiToggleArgs, states: *const c_int, numstates: c_int);
+    fn ui_toggle_args_set_visibility_states(args: *mut UiToggleArgs, states: *const c_int, numstates: c_int);
+    fn ui_toggle_args_free(args: *mut UiToggleArgs);
+}
index 624291c4f80dc179434b02f5d94181cbf2055e2b..55d8b9b14e997ebb7117b94e6f8a0dbab91a4cc3 100644 (file)
@@ -100,3 +100,13 @@ pub struct UiLinkButtonArgs {
     _private: [u8; 0],
 }
 
+#[repr(C)]
+pub struct UiTextAreaArgs {
+    _private: [u8; 0],
+}
+
+#[repr(C)]
+pub struct UiTextFieldArgs {
+    _private: [u8; 0],
+}
+
index b6b6f5e3ab698e298d185caef8366d77dbafb28e..583875ce39e2a4b4253f0b0e8574c51cc1805863 100644 (file)
@@ -5,6 +5,7 @@ mod window;
 mod button;
 mod container;
 mod widget;
+mod text;
 
 pub use toolkit::*;
 pub use application::*;
diff --git a/ui-rs/src/ui/text.rs b/ui-rs/src/ui/text.rs
new file mode 100644 (file)
index 0000000..8cc5563
--- /dev/null
@@ -0,0 +1,221 @@
+#![allow(dead_code)]
+#[allow(unused_imports)]
+
+use std::ffi::{c_char, c_int, c_void};
+use std::ffi::CString;
+use crate::ui::{toolkit};
+use crate::ui::ffi::*;
+use crate::ui::widget::widget_fn;
+
+
+pub struct TextAreaBuilder {
+    args: *mut UiTextAreaArgs,
+    obj: *const UiObject
+}
+
+impl toolkit::UiObject {
+    widget_fn!(textarea, textarea_builder, TextAreaBuilder);
+
+    pub fn textarea_builder(&self) -> TextAreaBuilder {
+        unsafe {
+            let args = ui_textarea_args_new();
+            TextAreaBuilder { args: args, obj: self.ptr }
+        }
+    }
+}
+
+impl Drop for TextAreaBuilder {
+    fn drop(&mut self) {
+        unsafe {
+            ui_textarea_args_free(self.args);
+        }
+    }
+}
+
+impl TextAreaBuilder {
+    pub fn create(&mut self) {
+        unsafe {
+            ui_textarea_create(self.obj, self.args);
+        }
+    }
+
+    pub fn fill(&mut self, fill: bool) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_fill(self.args, if fill { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn hexpand(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_hexpand(self.args, if value { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn vexpand(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_vexpand(self.args, if value { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn hfill(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_hfill(self.args, if value { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn vfill(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_vfill(self.args, if value { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn override_defaults(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_override_defaults(self.args, if value { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn margin(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_margin(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_left(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_margin_left(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_right(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_margin_right(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_top(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_margin_top(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_bottom(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_margin_bottom(self.args, value);
+        }
+        self
+    }
+
+    pub fn colspan(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_colspan(self.args, value);
+        }
+        self
+    }
+
+    pub fn rowspan(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textarea_args_set_rowspan(self.args, value);
+        }
+        self
+    }
+
+    pub fn name(&mut self, value: &str) -> &mut Self {
+        let cstr = CString::new(value).unwrap();
+        unsafe {
+            ui_textarea_args_set_name(self.args, cstr.as_ptr());
+        }
+        self
+    }
+
+    pub fn style_class(&mut self, value: &str) -> &mut Self {
+        let cstr = CString::new(value).unwrap();
+        unsafe {
+            ui_textarea_args_set_style_class(self.args, cstr.as_ptr());
+        }
+        self
+    }
+
+    pub fn varname(&mut self, varname: &str) -> &mut Self {
+        let cstr = CString::new(varname).unwrap();
+        unsafe {
+            ui_textarea_args_set_varname(self.args, cstr.as_ptr());
+        }
+        self
+    }
+
+    pub fn value(&mut self, value: &toolkit::UiText) {
+        unsafe {
+            ui_textarea_args_set_value(self.args, value.ptr);
+        }
+    }
+
+    // TODO: callback, states
+}
+
+
+
+extern "C" {
+    fn ui_textarea_create(obj: *const UiObject, args: *const UiTextAreaArgs);
+    fn ui_textfield_create(obj: *const UiObject, args: *const UiTextFieldArgs);
+    fn ui_frameless_textfield_create(obj: *const UiObject, args: *const UiTextFieldArgs);
+    fn ui_passwordfield_create(obj: *const UiObject, args: *const UiTextFieldArgs);
+
+    fn ui_textfield_args_new() -> *mut UiTextFieldArgs;
+    fn ui_textfield_args_set_fill(args: *mut UiTextFieldArgs, fill: c_int);
+    fn ui_textfield_args_set_hexpand(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_vexpand(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_hfill(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_vfill(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_override_defaults(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_margin(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_margin_left(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_margin_right(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_margin_top(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_margin_bottom(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_colspan(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_rowspan(args: *mut UiTextFieldArgs, value: c_int);
+    fn ui_textfield_args_set_name(args: *mut UiTextFieldArgs, name: *const c_char);
+    fn ui_textfield_args_set_style_class(args: *mut UiTextFieldArgs, classname: *const c_char);
+    fn ui_textfield_args_set_varname(args: *mut UiTextFieldArgs, varname: *const c_char);
+    fn ui_textfield_args_set_value(args: *mut UiTextAreaArgs, ivalue: *mut UiString);
+    fn ui_textfield_args_set_onchange(args: *mut UiTextFieldArgs, callback: UiCallback);
+    fn ui_textfield_args_set_onchangedata(args: *mut UiTextFieldArgs, data: *mut c_void);
+    fn ui_textfield_args_set_states(args: *mut UiTextFieldArgs, states: *const c_int, numstates: c_int);
+    fn ui_textfield_args_set_visibility_states(args: *mut UiTextFieldArgs, states: *const c_int, numstates: c_int);
+    fn ui_textfield_args_free(args: *mut UiTextFieldArgs);
+
+    fn ui_textarea_args_new() -> *mut UiTextAreaArgs;
+    fn ui_textarea_args_set_fill(args: *mut UiTextAreaArgs, fill: c_int);
+    fn ui_textarea_args_set_hexpand(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_vexpand(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_hfill(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_vfill(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_override_defaults(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_margin(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_margin_left(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_margin_right(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_margin_top(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_margin_bottom(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_colspan(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_rowspan(args: *mut UiTextAreaArgs, value: c_int);
+    fn ui_textarea_args_set_name(args: *mut UiTextAreaArgs, name: *const c_char);
+    fn ui_textarea_args_set_style_class(args: *mut UiTextAreaArgs, classname: *const c_char);
+    fn ui_textarea_args_set_onchange(args: *mut UiTextAreaArgs, callback: UiCallback);
+    fn ui_textarea_args_set_onchangedata(args: *mut UiTextAreaArgs, data: *mut c_void);
+    fn ui_textarea_args_set_varname(args: *mut UiTextAreaArgs, varname: *const c_char);
+    fn ui_textarea_args_set_value(args: *mut UiTextAreaArgs, ivalue: *mut UiText);
+    fn ui_textarea_args_set_states(args: *mut UiTextAreaArgs, states: *const c_int, numstates: c_int);
+    fn ui_textarea_args_set_visibility_states(args: *mut UiTextAreaArgs, states: *const c_int, numstates: c_int);
+    fn ui_textarea_args_free(args: *mut UiTextAreaArgs);
+}
\ No newline at end of file