]> uap-core.de Git - note.git/commitdiff
add textfield bindings main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 8 Apr 2026 20:13:05 +0000 (22:13 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 8 Apr 2026 20:13:05 +0000 (22:13 +0200)
ui-rs/src/ui/text.rs

index 8cc55638c62ccc625219b10426b15c8f86fef535..59be48813cf6135b2dcc6492f805c62840d91fa4 100644 (file)
@@ -8,6 +8,8 @@ use crate::ui::ffi::*;
 use crate::ui::widget::widget_fn;
 
 
+/* -------------------------------- TextArea -------------------------------- */
+
 pub struct TextAreaBuilder {
     args: *mut UiTextAreaArgs,
     obj: *const UiObject
@@ -164,6 +166,202 @@ impl TextAreaBuilder {
 }
 
 
+/* -------------------------------- TextField -------------------------------- */
+
+pub type TextFieldCreate = fn(*const UiObject, *const UiTextFieldArgs);
+
+pub struct TextFieldBuilder {
+    args: *mut UiTextFieldArgs,
+    obj: *const UiObject,
+    create: TextFieldCreate
+}
+
+pub fn textfield_create(obj: *const UiObject, args: *const UiTextFieldArgs) {
+    unsafe {
+        ui_textfield_create(obj, args);
+    }
+}
+
+pub fn passwordfield_create(obj: *const UiObject, args: *const UiTextFieldArgs) {
+    unsafe {
+        ui_passwordfield_create(obj, args);
+    }
+}
+
+pub fn frameless_textfield_create(obj: *const UiObject, args: *const UiTextFieldArgs) {
+    unsafe {
+        ui_frameless_textfield_create(obj, args);
+    }
+}
+
+impl toolkit::UiObject {
+    widget_fn!(textfield, textfield_builder, TextFieldBuilder);
+    widget_fn!(passwordfield, passwordfield_builder, TextFieldBuilder);
+    widget_fn!(frameless_textfield, frameless_textfield_builder, TextFieldBuilder);
+
+    pub fn textfield_builder(&self) -> TextFieldBuilder {
+        unsafe {
+            let args = ui_textfield_args_new();
+            TextFieldBuilder { args: args, obj: self.ptr, create: textfield_create }
+        }
+    }
+
+    pub fn passwordfield_builder(&self) -> TextFieldBuilder {
+        unsafe {
+            let args = ui_textfield_args_new();
+            TextFieldBuilder { args: args, obj: self.ptr, create: passwordfield_create }
+        }
+    }
+
+    pub fn frameless_textfield_builder(&self) -> TextFieldBuilder {
+        unsafe {
+            let args = ui_textfield_args_new();
+            TextFieldBuilder { args: args, obj: self.ptr, create: frameless_textfield_create }
+        }
+    }
+}
+
+impl Drop for TextFieldBuilder {
+    fn drop(&mut self) {
+        unsafe {
+            ui_textfield_args_free(self.args);
+        }
+    }
+}
+
+impl TextFieldBuilder {
+    pub fn create(&mut self) {
+        unsafe {
+            ui_textfield_create(self.obj, self.args);
+        }
+    }
+
+    pub fn fill(&mut self, fill: bool) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_fill(self.args, if fill { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn hexpand(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_hexpand(self.args, if value { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn vexpand(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_vexpand(self.args, if value { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn hfill(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_hfill(self.args, if value { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn vfill(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_vfill(self.args, if value { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn override_defaults(&mut self, value: bool) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_override_defaults(self.args, if value { 1 } else { 0 });
+        }
+        self
+    }
+
+    pub fn margin(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_margin(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_left(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_margin_left(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_right(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_margin_right(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_top(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_margin_top(self.args, value);
+        }
+        self
+    }
+
+    pub fn margin_bottom(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_margin_bottom(self.args, value);
+        }
+        self
+    }
+
+    pub fn colspan(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_colspan(self.args, value);
+        }
+        self
+    }
+
+    pub fn rowspan(&mut self, value: i32) -> &mut Self {
+        unsafe {
+            ui_textfield_args_set_rowspan(self.args, value);
+        }
+        self
+    }
+
+    pub fn name(&mut self, value: &str) -> &mut Self {
+        let cstr = CString::new(value).unwrap();
+        unsafe {
+            ui_textfield_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_textfield_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_textfield_args_set_varname(self.args, cstr.as_ptr());
+        }
+        self
+    }
+
+    pub fn value(&mut self, value: &toolkit::UiString) {
+        unsafe {
+            ui_textfield_args_set_value(self.args, value.ptr);
+        }
+    }
+
+    // TODO: callback, states
+}
+
+
+/* -------------------------------- C functions -------------------------------- */
 
 extern "C" {
     fn ui_textarea_create(obj: *const UiObject, args: *const UiTextAreaArgs);
@@ -188,7 +386,7 @@ extern "C" {
     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_value(args: *mut UiTextFieldArgs, 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);