obj: &'a mut toolkit::UiObject<T>,
}
-pub struct ToggleBuilder<T> {
+pub struct ToggleBuilder<'a, T> {
args: *mut UiToggleArgs,
- obj: *const UiObject,
- create: ToggleButtonCreate,
- _marker: PhantomData<T>
+ obj: &'a mut toolkit::UiObject<T>,
+ create: ToggleButtonCreate
}
pub enum LabelType {
}
}
- pub fn togglebutton_builder(&self) -> ToggleBuilder<T> {
+ pub fn togglebutton_builder<'a>(&'a mut self) -> ToggleBuilder<T> {
unsafe {
let args = ui_toggle_args_new();
- ToggleBuilder { args: args, obj: self.ptr, create: togglebutton_create, _marker: PhantomData }
+ ToggleBuilder { args: args, obj: self, create: togglebutton_create }
}
}
- pub fn checkbox_builder(&self) -> ToggleBuilder<T> {
+ pub fn checkbox_builder<'a>(&'a mut self) -> ToggleBuilder<T> {
unsafe {
let args = ui_toggle_args_new();
- ToggleBuilder { args: args, obj: self.ptr, create: checkbox_create, _marker: PhantomData }
+ ToggleBuilder { args: args, obj: self, create: checkbox_create }
}
}
- pub fn switch_builder(&self) -> ToggleBuilder<T> {
+ pub fn switch_builder<'a>(&'a mut self) -> ToggleBuilder<T> {
unsafe {
let args = ui_toggle_args_new();
- ToggleBuilder { args: args, obj: self.ptr, create: switch_create, _marker: PhantomData }
+ ToggleBuilder { args: args, obj: self, create: switch_create }
}
}
- pub fn radiobutton_builder(&self) -> ToggleBuilder<T> {
+ pub fn radiobutton_builder<'a>(&'a mut self) -> ToggleBuilder<T> {
unsafe {
let args = ui_toggle_args_new();
- ToggleBuilder { args: args, obj: self.ptr, create: radiobutton_create, _marker: PhantomData }
+ ToggleBuilder { args: args, obj: self, create: radiobutton_create }
}
}
}
-fn togglebutton_create(obj: *const UiObject, args: *const UiToggleArgs) {
+fn togglebutton_create<'a>(obj: *const UiObject, args: *const UiToggleArgs) {
unsafe {
ui_togglebutton_create(obj, args);
}
}
}
-impl<T> Drop for ToggleBuilder<T> {
+impl<'a, T> Drop for ToggleBuilder<'a, T> {
fn drop(&mut self) {
unsafe {
ui_toggle_args_free(self.args);
}
}
-impl<T> ToggleBuilder<T> {
+impl<'a, T> ToggleBuilder<'a, T> {
pub fn create(&mut self) {
- (self.create)(self.obj, self.args)
+ (self.create)(self.obj.ptr, self.args)
}
pub fn fill(&mut self, fill: bool) -> &mut Self {
}
}
+ pub fn onchange<F>(&mut self, f: F) -> &mut Self
+ where F: FnMut(&mut event::Event<T>) + 'static {
+ let wrapper = Box::new(EventWrapper { callback: Box::new(f) });
+ let ptr = self.obj.reg_box(wrapper);
+ unsafe {
+ ui_toggle_args_set_onchange(self.args, Some(event::event_wrapper::<T>));
+ ui_toggle_args_set_onchangedata(self.args, ptr as *mut c_void);
+ }
+ self
+ }
+
// TODO: callback, states
}