use std::ffi::{c_char, c_int, c_void};
use std::ffi::CString;
-use crate::ui::toolkit;
+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);
pub type ToggleButtonCreate = fn(*const UiObject, *const UiToggleArgs);
impl toolkit::UiObject {
- pub fn button(&self) -> ButtonBuilder {
+ widget_fn!(button, button_builder, ButtonBuilder);
+ widget_fn!(togglebutton, togglebutton_builder, ToggleBuilder);
+ widget_fn!(checkbox, checkbox_builder, ToggleBuilder);
+ widget_fn!(switch, switch_builder, ToggleBuilder);
+ widget_fn!(radiobutton, radiobutton_builder, ToggleBuilder);
+
+ pub fn button_builder(&self) -> ButtonBuilder {
unsafe {
let args = ui_button_args_new();
ButtonBuilder { args: args, obj: self.ptr }
}
}
- pub fn togglebutton(&self) -> ToggleBuilder {
+ pub fn togglebutton_builder(&self) -> ToggleBuilder {
unsafe {
let args = ui_toggle_args_new();
ToggleBuilder { args: args, obj: self.ptr, create: togglebutton_create }
}
}
- pub fn checkbox(&self) -> ToggleBuilder {
+
+
+ pub fn checkbox_builder(&self) -> ToggleBuilder {
unsafe {
let args = ui_toggle_args_new();
ToggleBuilder { args: args, obj: self.ptr, create: checkbox_create }
}
}
- pub fn switch(&self) -> ToggleBuilder {
+ pub fn switch_builder(&self) -> ToggleBuilder {
unsafe {
let args = ui_toggle_args_new();
ToggleBuilder { args: args, obj: self.ptr, create: switch_create }
}
}
- pub fn radiobutton(&self) -> ToggleBuilder {
+ pub fn radiobutton_builder(&self) -> ToggleBuilder {
unsafe {
let args = ui_toggle_args_new();
ToggleBuilder { args: args, obj: self.ptr, create: radiobutton_create }
}
impl ButtonBuilder {
- pub fn build(self) {
+ pub fn build(&mut self) {
unsafe {
ui_button_create(self.obj, self.args);
}
}
- pub fn fill(self, fill: bool) -> Self {
+ pub fn fill(&mut self, fill: bool) -> &mut Self {
unsafe {
ui_button_args_set_fill(self.args, if fill { 1 } else { 0 });
}
self
}
- pub fn hexpand(self, value: bool) -> Self {
+ pub fn hexpand(&mut self, value: bool) -> &mut Self {
unsafe {
ui_button_args_set_hexpand(self.args, if value { 1 } else { 0 });
}
self
}
- pub fn vexpand(self, value: bool) -> Self {
+ pub fn vexpand(&mut self, value: bool) -> &mut Self {
unsafe {
ui_button_args_set_vexpand(self.args, if value { 1 } else { 0 });
}
self
}
- pub fn hfill(self, value: bool) -> Self {
+ pub fn hfill(&mut self, value: bool) -> &mut Self {
unsafe {
ui_button_args_set_hfill(self.args, if value { 1 } else { 0 });
}
self
}
- pub fn vfill(self, value: bool) -> Self {
+ pub fn vfill(&mut self, value: bool) -> &mut Self {
unsafe {
ui_button_args_set_vfill(self.args, if value { 1 } else { 0 });
}
self
}
- pub fn override_defaults(self, value: bool) -> Self {
+ pub fn override_defaults(&mut self, value: bool) -> &mut Self {
unsafe {
ui_button_args_set_override_defaults(self.args, if value { 1 } else { 0 });
}
self
}
- pub fn margin(self, value: i32) -> Self {
+ pub fn margin(&mut self, value: i32) -> &mut Self {
unsafe {
ui_button_args_set_margin(self.args, value);
}
self
}
- pub fn margin_left(self, value: i32) -> Self {
+ pub fn margin_left(&mut self, value: i32) -> &mut Self {
unsafe {
ui_button_args_set_margin_left(self.args, value);
}
self
}
- pub fn margin_right(self, value: i32) -> Self {
+ pub fn margin_right(&mut self, value: i32) -> &mut Self {
unsafe {
ui_button_args_set_margin_right(self.args, value);
}
self
}
- pub fn margin_top(self, value: i32) -> Self {
+ pub fn margin_top(&mut self, value: i32) -> &mut Self {
unsafe {
ui_button_args_set_margin_top(self.args, value);
}
self
}
- pub fn margin_bottom(self, value: i32) -> Self {
+ pub fn margin_bottom(&mut self, value: i32) -> &mut Self {
unsafe {
ui_button_args_set_margin_bottom(self.args, value);
}
self
}
- pub fn colspan(self, value: i32) -> Self {
+ pub fn colspan(&mut self, value: i32) -> &mut Self {
unsafe {
ui_button_args_set_colspan(self.args, value);
}
self
}
- pub fn rowspan(self, value: i32) -> Self {
+ pub fn rowspan(&mut self, value: i32) -> &mut Self {
unsafe {
ui_button_args_set_rowspan(self.args, value);
}
self
}
- pub fn name(self, value: &str) -> Self {
+ pub fn name(&mut self, value: &str) -> &mut Self {
let cstr = CString::new(value).unwrap();
unsafe {
ui_button_args_set_name(self.args, cstr.as_ptr());
self
}
- pub fn style_class(self, value: &str) -> Self {
+ pub fn style_class(&mut self, value: &str) -> &mut Self {
let cstr = CString::new(value).unwrap();
unsafe {
ui_button_args_set_style_class(self.args, cstr.as_ptr());
self
}
- pub fn label(self, label: &str) -> Self {
+ pub fn label(&mut self, label: &str) -> &mut Self {
let cstr = CString::new(label).unwrap();
unsafe {
ui_button_args_set_label(self.args, cstr.as_ptr());
self
}
- pub fn icon(self, icon: &str) -> Self {
+ pub fn icon(&mut self, icon: &str) -> &mut Self {
let cstr = CString::new(icon).unwrap();
unsafe {
ui_button_args_set_label(self.args, cstr.as_ptr());
self
}
- pub fn tooltip(self, tooltip: &str) -> Self {
+ pub fn tooltip(&mut self, tooltip: &str) -> &mut Self {
let cstr = CString::new(tooltip).unwrap();
unsafe {
ui_button_args_set_tooltip(self.args, cstr.as_ptr());
self
}
- pub fn labeltype(self, ltype: LabelType) -> Self {
+ pub fn labeltype(&mut self, ltype: LabelType) -> &mut Self {
let lt = ltype as i32;
unsafe {
ui_button_args_set_labeltype(self.args, lt);
}
impl ToggleBuilder {
- pub fn build(self) {
+ pub fn build(&mut self) {
(self.create)(self.obj, self.args)
}
- pub fn fill(self, fill: bool) -> Self {
+ pub fn fill(&mut self, fill: bool) -> &mut Self {
unsafe {
ui_toggle_args_set_fill(self.args, if fill { 1 } else { 0 });
}
self
}
- pub fn hexpand(self, value: bool) -> Self {
+ pub fn hexpand(&mut self, value: bool) -> &mut Self {
unsafe {
ui_toggle_args_set_hexpand(self.args, if value { 1 } else { 0 });
}
self
}
- pub fn vexpand(self, value: bool) -> Self {
+ pub fn vexpand(&mut self, value: bool) -> &mut Self {
unsafe {
ui_toggle_args_set_vexpand(self.args, if value { 1 } else { 0 });
}
self
}
- pub fn hfill(self, value: bool) -> Self {
+ pub fn hfill(&mut self, value: bool) -> &mut Self {
unsafe {
ui_toggle_args_set_hfill(self.args, if value { 1 } else { 0 });
}
self
}
- pub fn vfill(self, value: bool) -> Self {
+ pub fn vfill(&mut self, value: bool) -> &mut Self {
unsafe {
ui_toggle_args_set_vfill(self.args, if value { 1 } else { 0 });
}
self
}
- pub fn override_defaults(self, value: bool) -> Self {
+ pub fn override_defaults(&mut self, value: bool) -> &mut Self {
unsafe {
ui_toggle_args_set_override_defaults(self.args, if value { 1 } else { 0 });
}
self
}
- pub fn margin(self, value: i32) -> Self {
+ pub fn margin(&mut self, value: i32) -> &mut Self {
unsafe {
ui_toggle_args_set_margin(self.args, value);
}
self
}
- pub fn margin_left(self, value: i32) -> Self {
+ pub fn margin_left(&mut self, value: i32) -> &mut Self {
unsafe {
ui_toggle_args_set_margin_left(self.args, value);
}
self
}
- pub fn margin_right(self, value: i32) -> Self {
+ pub fn margin_right(&mut self, value: i32) -> &mut Self {
unsafe {
ui_toggle_args_set_margin_right(self.args, value);
}
self
}
- pub fn margin_top(self, value: i32) -> Self {
+ pub fn margin_top(&mut self, value: i32) -> &mut Self {
unsafe {
ui_toggle_args_set_margin_top(self.args, value);
}
self
}
- pub fn margin_bottom(self, value: i32) -> Self {
+ pub fn margin_bottom(&mut self, value: i32) -> &mut Self {
unsafe {
ui_toggle_args_set_margin_bottom(self.args, value);
}
self
}
- pub fn colspan(self, value: i32) -> Self {
+ pub fn colspan(&mut self, value: i32) -> &mut Self {
unsafe {
ui_toggle_args_set_colspan(self.args, value);
}
self
}
- pub fn rowspan(self, value: i32) -> Self {
+ pub fn rowspan(&mut self, value: i32) -> &mut Self {
unsafe {
ui_toggle_args_set_rowspan(self.args, value);
}
self
}
- pub fn name(self, value: &str) -> Self {
+ pub fn name(&mut self, value: &str) -> &mut Self {
let cstr = CString::new(value).unwrap();
unsafe {
ui_toggle_args_set_name(self.args, cstr.as_ptr());
self
}
- pub fn style_class(self, value: &str) -> Self {
+ pub fn style_class(&mut self, value: &str) -> &mut Self {
let cstr = CString::new(value).unwrap();
unsafe {
ui_toggle_args_set_style_class(self.args, cstr.as_ptr());
self
}
- pub fn label(self, label: &str) -> Self {
+ pub fn label(&mut self, label: &str) -> &mut Self {
let cstr = CString::new(label).unwrap();
unsafe {
ui_toggle_args_set_label(self.args, cstr.as_ptr());
self
}
- pub fn icon(self, icon: &str) -> Self {
+ pub fn icon(&mut self, icon: &str) -> &mut Self {
let cstr = CString::new(icon).unwrap();
unsafe {
ui_toggle_args_set_label(self.args, cstr.as_ptr());
self
}
- pub fn tooltip(self, tooltip: &str) -> Self {
+ pub fn tooltip(&mut self, tooltip: &str) -> &mut Self {
let cstr = CString::new(tooltip).unwrap();
unsafe {
ui_toggle_args_set_tooltip(self.args, cstr.as_ptr());
self
}
- pub fn labeltype(self, ltype: LabelType) -> Self {
+ pub fn labeltype(&mut self, ltype: LabelType) -> &mut Self {
let lt = ltype as i32;
unsafe {
ui_toggle_args_set_labeltype(self.args, lt);
self
}
- pub fn varname(self, varname: &str) -> Self {
+ pub fn varname(&mut self, varname: &str) -> &mut Self {
let cstr = CString::new(varname).unwrap();
unsafe {
ui_toggle_args_set_varname(self.args, cstr.as_ptr());
self
}
- pub fn value(self, value: &toolkit::UiInteger) {
+ pub fn value(&mut self, value: &toolkit::UiInteger) {
unsafe {
ui_toggle_args_set_value(self.args, value.ptr);
}
}
- // TODO: value, callback, states
+ // TODO: callback, states
}
\ No newline at end of file