use crate::ui::widget::widget_fn;
+/* -------------------------------- TextArea -------------------------------- */
+
pub struct TextAreaBuilder {
args: *mut UiTextAreaArgs,
obj: *const UiObject
}
+/* -------------------------------- 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);
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);