use std::ffi::{c_char, c_int, c_void, CString};
use std::marker::PhantomData;
-use crate::ui::ffi::{UiCallback, UiMenuItemArgs, UiMenuToggleItemArgs, UiToolbarItemArgs, UiToolbarMenuArgs, UiToolbarToggleItemArgs};
+use crate::ui::ffi::{UiCallback, UiMenuItemArgs, UiMenuToggleItemArgs, UiToolbarContentToggleItemArgs, UiToolbarItemArgs, UiToolbarMenuArgs, UiToolbarToggleItemArgs};
use crate::ui::{event, ffi, toolkit, AppContext, EventWrapper, UiActions, UiContext, UiModel};
use crate::ui::menu::{ui_menu_end, Menu, MenuItemBuilder, ToggleItemCreate};
}
}
+ pub fn toolbar_content_toggleitem(&self, name: &str) -> ToolbarContentToggleItemBuilder<T> {
+ unsafe {
+ ToolbarContentToggleItemBuilder {
+ args: ui_toolbar_content_toggleitem_args_new(),
+ ctx: toolkit::ui_global_context(),
+ name: CString::new(name).unwrap(),
+ _marker: PhantomData
+ }
+ }
+ }
+
pub fn toolbar_menu(&self, name: &str) -> ToolbarMenuItemBuilder<T> {
unsafe {
ToolbarMenuItemBuilder {
_marker: PhantomData<T>,
}
+pub struct ToolbarContentToggleItemBuilder<T: UiModel + UiActions> {
+ args: *mut UiToolbarContentToggleItemArgs,
+ ctx: *mut ffi::UiContext,
+ name: CString,
+ _marker: PhantomData<T>,
+}
+
pub struct ToolbarMenuItemBuilder<T: UiModel + UiActions> {
args: *mut UiToolbarMenuArgs,
ctx: *mut ffi::UiContext,
}
}
+impl<T: UiModel + UiActions> ToolbarContentToggleItemBuilder<T> {
+ pub fn create(&mut self) {
+ unsafe {
+ ui_toolbar_content_toggleitem_create(self.name.as_ptr(), self.args);
+ }
+ }
+ pub fn label0(&mut self, label: &str) -> &mut Self {
+ unsafe {
+ let cstr = CString::new(label).unwrap();
+ ui_toolbar_content_toggleitem_args_set_label0(self.args, cstr.as_ptr());
+ }
+ self
+ }
+
+ pub fn icon0(&mut self, icon: &str) -> &mut Self {
+ unsafe {
+ let cstr = CString::new(icon).unwrap();
+ ui_toolbar_content_toggleitem_args_set_icon0(self.args, cstr.as_ptr());
+ }
+ self
+ }
+
+ pub fn tooltip0(&mut self, tooltip: &str) -> &mut Self {
+ unsafe {
+ let cstr = CString::new(tooltip).unwrap();
+ ui_toolbar_content_toggleitem_args_set_tooltip0(self.args, cstr.as_ptr());
+ }
+ self
+ }
+
+ pub fn label1(&mut self, label: &str) -> &mut Self {
+ unsafe {
+ let cstr = CString::new(label).unwrap();
+ ui_toolbar_content_toggleitem_args_set_label1(self.args, cstr.as_ptr());
+ }
+ self
+ }
+
+ pub fn icon1(&mut self, icon: &str) -> &mut Self {
+ unsafe {
+ let cstr = CString::new(icon).unwrap();
+ ui_toolbar_content_toggleitem_args_set_icon1(self.args, cstr.as_ptr());
+ }
+ self
+ }
+
+ pub fn tooltip1(&mut self, tooltip: &str) -> &mut Self {
+ unsafe {
+ let cstr = CString::new(tooltip).unwrap();
+ ui_toolbar_content_toggleitem_args_set_tooltip1(self.args, cstr.as_ptr());
+ }
+ self
+ }
+
+ pub fn varname(&mut self, varname: &str) -> &mut Self {
+ unsafe {
+ let cstr = CString::new(varname).unwrap();
+ ui_toolbar_content_toggleitem_args_set_varname(self.args, cstr.as_ptr());
+ }
+ self
+ }
+
+ pub fn action(&mut self, action: &str) -> &mut Self {
+ unsafe {
+ let cstr = CString::new(action).unwrap();
+ ui_toolbar_content_toggleitem_args_set_action(self.args, cstr.as_ptr());
+ }
+ 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 ctx = UiContext { ptr: self.ctx };
+ let ptr = ctx.reg_box(wrapper);
+ unsafe {
+ ui_toolbar_content_toggleitem_args_set_onchange(self.args, Some(event::event_wrapper::<T>));
+ ui_toolbar_content_toggleitem_args_set_onchangedata(self.args, ptr as *mut c_void);
+ }
+ self
+ }
+
+ pub fn istogglebutton(&mut self, value: bool) -> &mut Self {
+ unsafe {
+ ui_toolbar_content_toggleitem_args_set_istogglebutton(self.args, value as c_int);
+ }
+ self
+ }
+
+ pub fn toggled_by_state(&mut self, state: i32) -> &mut Self {
+ unsafe {
+ ui_toolbar_content_toggleitem_args_set_toggled_by_state(self.args, state as c_int);
+ }
+ self
+ }
+
+ pub fn states(&mut self, states: &[i32]) -> &mut Self {
+ unsafe {
+ ui_toolbar_content_toggleitem_args_set_states(self.args, states.as_ptr(), states.len() as c_int);
+ }
+ self
+ }
+
+ pub fn visibility_states(&mut self, states: &[i32]) -> &mut Self {
+ unsafe {
+ ui_toolbar_content_toggleitem_args_set_visibility_states(self.args, states.as_ptr(), states.len() as c_int);
+ }
+ self
+ }
+}
+
impl<T: UiModel + UiActions> Drop for ToolbarMenuItemBuilder<T> {
fn drop(&mut self) {
unsafe {
unsafe extern "C" {
fn ui_toolbar_item_create(name: *const c_char, args: *const UiToolbarItemArgs);
fn ui_toolbar_toggleitem_create(name: *const c_char, args: *const UiToolbarToggleItemArgs);
+ fn ui_toolbar_content_toggleitem_create(name: *const c_char, args: *const UiToolbarContentToggleItemArgs);
fn ui_toolbar_menu_create(name: *const c_char, args: *const UiToolbarMenuArgs);
fn ui_toolbar_add_default(name: *const c_char, pos: c_int);
fn ui_toolbar_toggleitem_args_set_visibility_states(args: *mut UiToolbarToggleItemArgs, states: *const c_int, numstates: c_int);
fn ui_toolbar_toggleitem_args_free(args: *mut UiToolbarToggleItemArgs);
+ fn ui_toolbar_content_toggleitem_args_new() -> *mut UiToolbarContentToggleItemArgs;
+ fn ui_toolbar_content_toggleitem_args_set_label0(args: *mut UiToolbarContentToggleItemArgs, label: *const c_char);
+ fn ui_toolbar_content_toggleitem_args_set_icon0(args: *mut UiToolbarContentToggleItemArgs, icon: *const c_char);
+ fn ui_toolbar_content_toggleitem_args_set_tooltip0(args: *mut UiToolbarContentToggleItemArgs, tooltip: *const c_char);
+ fn ui_toolbar_content_toggleitem_args_set_label1(args: *mut UiToolbarContentToggleItemArgs, label: *const c_char);
+ fn ui_toolbar_content_toggleitem_args_set_icon1(args: *mut UiToolbarContentToggleItemArgs, icon: *const c_char);
+ fn ui_toolbar_content_toggleitem_args_set_tooltip1(args: *mut UiToolbarContentToggleItemArgs, tooltip: *const c_char);
+ fn ui_toolbar_content_toggleitem_args_set_action(args: *mut UiToolbarContentToggleItemArgs, action: *const c_char);
+ fn ui_toolbar_content_toggleitem_args_set_varname(args: *mut UiToolbarContentToggleItemArgs, varname: *const c_char);
+ fn ui_toolbar_content_toggleitem_args_set_onchange(args: *mut UiToolbarContentToggleItemArgs, onclick: UiCallback);
+ fn ui_toolbar_content_toggleitem_args_set_onchangedata(args: *mut UiToolbarContentToggleItemArgs, data: *mut c_void);
+ fn ui_toolbar_content_toggleitem_args_set_istogglebutton(args: *mut UiToolbarContentToggleItemArgs, value: c_int);
+ fn ui_toolbar_content_toggleitem_args_set_toggled_by_state(args: *mut UiToolbarContentToggleItemArgs, state: c_int);
+
+ fn ui_toolbar_content_toggleitem_args_set_states(args: *mut UiToolbarContentToggleItemArgs, states: *const c_int, numstates: c_int);
+ fn ui_toolbar_content_toggleitem_args_set_visibility_states(args: *mut UiToolbarContentToggleItemArgs, states: *const c_int, numstates: c_int);
+ fn ui_toolbar_content_toggleitem_args_free(args: *mut UiToolbarContentToggleItemArgs);
+
fn ui_toolbar_menu_args_new() -> *mut UiToolbarMenuArgs;
fn ui_toolbar_menu_args_set_label(args: *mut UiToolbarMenuArgs, label: *const c_char);
fn ui_toolbar_menu_args_set_icon(args: *mut UiToolbarMenuArgs, icon: *const c_char);