use ui::UI;
use libui_ffi::{self, uiControl};
use std::ptr;
#[macro_use]
mod create_macro;
mod area;
pub use self::area::*;
mod button;
pub use self::button::*;
mod checkbox;
pub use self::checkbox::*;
mod colorbutton;
pub use self::colorbutton::*;
mod combobox;
pub use self::combobox::*;
mod datetimepicker;
pub use self::datetimepicker::*;
mod fontbutton;
pub use self::fontbutton::*;
mod form;
pub use self::form::*;
mod label;
pub use self::label::*;
mod layout;
pub use self::layout::*;
mod numericentry;
pub use self::numericentry::*;
mod progressbar;
pub use self::progressbar::*;
mod radiobuttons;
pub use self::radiobuttons::*;
mod table;
pub use self::table::*;
mod textentry;
pub use self::textentry::*;
mod window;
pub use self::window::*;
pub struct Control {
ui_control: *mut uiControl,
}
impl Drop for Control {
fn drop(&mut self) {
}
}
impl Clone for Control {
fn clone(&self) -> Control {
Control {
ui_control: self.ui_control,
}
}
}
impl Control {
pub unsafe fn from_ui_control(ui_control: *mut uiControl) -> Control {
Control { ui_control }
}
pub fn as_ui_control(&self) -> *mut uiControl {
self.ui_control
}
pub unsafe fn destroy(&self) {
libui_ffi::uiControlDestroy(self.ui_control)
}
}
impl UI {
pub fn parent_of<T: Into<Control>>(&self, control: T) -> Option<Control> {
unsafe {
let ptr = libui_ffi::uiControlParent(control.into().ui_control);
if ptr.is_null() {
None
} else {
Some(Control::from_ui_control(ptr))
}
}
}
pub unsafe fn set_parent_of<T: Into<Control>>(&mut self, control: T, parent: Option<T>) {
libui_ffi::uiControlSetParent(
control.into().ui_control,
match parent {
None => ptr::null_mut(),
Some(parent) => parent.into().ui_control,
},
)
}
pub fn is_toplevel<T: Into<Control>>(&self, control: T) -> bool {
unsafe { libui_ffi::uiControlToplevel(control.into().ui_control) != 0 }
}
pub fn is_shown<T: Into<Control>>(&self, control: T) -> bool {
unsafe { libui_ffi::uiControlVisible(control.into().ui_control) != 0 }
}
pub fn set_shown<T: Into<Control>>(&mut self, control: T, show: bool) {
if show {
unsafe { libui_ffi::uiControlShow(control.into().ui_control) }
} else {
unsafe { libui_ffi::uiControlHide(control.into().ui_control) }
}
}
pub fn is_enabled<T: Into<Control>>(&self, control: T) -> bool {
unsafe { libui_ffi::uiControlEnabled(control.into().ui_control) != 0 }
}
pub fn set_enabled<T: Into<Control>>(&mut self, control: T, enabled: bool) {
if enabled {
unsafe { libui_ffi::uiControlEnable(control.into().ui_control) }
} else {
unsafe { libui_ffi::uiControlDisable(control.into().ui_control) }
}
}
}