use std::ffi::{c_char, c_int, c_void};
use std::ffi::CString;
use crate::ui::ffi::*;
-use crate::ui::{toolkit};
+use crate::ui::{toolkit, Button};
+use crate::ui::widget::Widget;
#[macro_export]
macro_rules! vbox {
}};
}
+pub struct Container {
+ ptr: *mut c_void
+}
+
+impl Widget for Container {
+ fn get_widget(&self) -> *mut c_void {
+ self.ptr
+ }
+}
pub enum SubContainer {
/* -------------------------------- Box/Grid Container -------------------------------- */
-pub type ContainerCreate = fn(*mut UiObject, *const UiContainerArgs);
+pub type ContainerCreate = fn(*mut UiObject, *const UiContainerArgs) -> *mut c_void;
pub type CreateContainerUI<T> = fn(obj: &toolkit::UiObject<T>);
pub struct ContainerBuilder<'a, T> {
create: ContainerCreate
}
-fn vbox_create(obj: *mut UiObject, args: *const UiContainerArgs) {
+fn vbox_create(obj: *mut UiObject, args: *const UiContainerArgs) -> *mut c_void {
unsafe {
- ui_vbox_create(obj, args);
+ ui_vbox_create(obj, args)
}
}
-fn hbox_create(obj: *mut UiObject, args: *const UiContainerArgs) {
+fn hbox_create(obj: *mut UiObject, args: *const UiContainerArgs) -> *mut c_void {
unsafe {
- ui_hbox_create(obj, args);
+ ui_hbox_create(obj, args)
}
}
-fn grid_create(obj: *mut UiObject, args: *const UiContainerArgs) {
+fn grid_create(obj: *mut UiObject, args: *const UiContainerArgs) -> *mut c_void {
unsafe {
- ui_grid_create(obj, args);
+ ui_grid_create(obj, args)
}
}
}
impl<'a, T> ContainerBuilder<'a, T> {
- pub fn create<F>(&mut self, create_ui: F)
+ pub fn create<F>(&mut self, create_ui: F) -> Container
where F: FnOnce(&mut toolkit::UiObject<T>) {
- (self.create)(self.obj.ptr, self.args);
+ let widget_ptr = (self.create)(self.obj.ptr, self.args);
create_ui(self.obj);
unsafe {
ui_container_begin_close(self.obj.ptr);
ui_container_finish(self.obj.ptr);
}
+ Container {
+ ptr: widget_ptr,
+ }
}
pub fn fill(&mut self, fill: bool) -> &mut Self {
/* -------------------------------- Frame Container -------------------------------- */
-pub type FrameCreate = fn(*mut UiObject, *const UiFrameArgs);
+pub type FrameCreate = fn(*mut UiObject, *const UiFrameArgs) -> *mut c_void;
pub struct FrameBuilder<'a, T> {
args: *mut UiFrameArgs,
create: FrameCreate
}
-fn frame_create(obj: *mut UiObject, args: *const UiFrameArgs) {
+fn frame_create(obj: *mut UiObject, args: *const UiFrameArgs) -> *mut c_void {
unsafe {
- ui_frame_create(obj, args);
+ ui_frame_create(obj, args)
}
}
-fn expander_create(obj: *mut UiObject, args: *const UiFrameArgs) {
+fn expander_create(obj: *mut UiObject, args: *const UiFrameArgs) -> *mut c_void {
unsafe {
- ui_expander_create(obj, args);
+ ui_expander_create(obj, args)
}
}
-fn scrolledwindow_create(obj: *mut UiObject, args: *const UiFrameArgs) {
+fn scrolledwindow_create(obj: *mut UiObject, args: *const UiFrameArgs) -> *mut c_void {
unsafe {
- ui_scrolledwindow_create(obj, args);
+ ui_scrolledwindow_create(obj, args)
}
}
}
impl<'a, T> FrameBuilder<'a, T> {
- pub fn create<F>(&mut self, create_ui: F)
+ pub fn create<F>(&mut self, create_ui: F) -> Container
where F: FnOnce(&mut toolkit::UiObject<T>) {
- (self.create)(self.obj.ptr, self.args);
+ let widget_ptr = (self.create)(self.obj.ptr, self.args);
create_ui(self.obj);
unsafe {
ui_container_begin_close(self.obj.ptr);
ui_container_finish(self.obj.ptr);
}
+ Container {
+ ptr: widget_ptr,
+ }
}
pub fn fill(&mut self, fill: bool) -> &mut Self {