use std::any::Any;
use std::ffi::{c_char, c_int, c_void, CStr, CString};
-use crate::ui::{action_event_wrapper, event, ffi, ui_object_get_context, ui_object_get_windowdata, ui_reg_destructor, ui_remove_destructor, untyped_event_wrapper, ActionEventWrapper, Event, EventWrapper, SubList, UntypedEventWrapper, RUST_TYPED_OBJECT_BOX_ANY};
+use crate::ui::{action_event_wrapper, event, ffi, simple_event_wrapper, ui_object_get_context, ui_object_get_windowdata, ui_reg_destructor, ui_remove_destructor, untyped_event_wrapper, ActionEventWrapper, Event, EventWrapper, SimpleEventWrapper, SubList, UntypedEventWrapper, RUST_TYPED_OBJECT_BOX_ANY};
use std::marker::PhantomData;
use std::mem;
use std::ptr::null_mut;
use std::slice::{Iter, IterMut};
use std::sync::{Arc, Mutex};
-use crate::ui::ffi::{UiCallback, UiThreadFunc};
+use crate::ui::ffi::{UiCallback, UiEvent, UiThreadFunc};
pub struct UiContext {
pub ptr: *mut ffi::UiContext
}
}
+ pub fn onattach<F>(&self, f: F)
+ where F: FnMut() + 'static {
+ let wrapper = Box::new(SimpleEventWrapper { callback: Box::new(f) });
+ let ptr = self.reg_box(wrapper);
+ unsafe {
+ ui_onattach(self.ptr, Some(simple_event_wrapper), ptr as *mut c_void);
+ }
+ }
+
+ pub fn ondetach<F>(&self, f: F)
+ where F: FnMut() + 'static {
+ let wrapper = Box::new(SimpleEventWrapper { callback: Box::new(f) });
+ let ptr = self.reg_box(wrapper);
+ unsafe {
+ ui_ondetach(self.ptr, Some(simple_event_wrapper), ptr as *mut c_void);
+ }
+ }
+
+ pub fn onattach_action(&self, action: &str) {
+ let cstr = CString::new(action).unwrap();
+ unsafe {
+ ui_onattach_action(self.ptr, cstr.as_ptr());
+ }
+ }
+
+ pub fn ondetach_action(&self, action: &str) {
+ let cstr = CString::new(action).unwrap();
+ unsafe {
+ ui_ondetach_action(self.ptr, cstr.as_ptr());
+ }
+ }
+
pub fn list<T>(&self) -> UiList<T> {
let mut ls = UiList::<T>::default();
ls.init(self, None);
fn ui_document_context(doc: *mut c_void) -> *mut ffi::UiContext;
fn ui_attach_document(ctx: *mut ffi::UiContext, doc: *mut c_void);
fn ui_detach_document(ctx: *mut ffi::UiContext, doc: *mut c_void);
+ fn ui_onattach(ctx: *mut ffi::UiContext, callback: UiCallback, data: *mut c_void);
+ fn ui_ondetach(ctx: *mut ffi::UiContext, callback: UiCallback, data: *mut c_void);
+ fn ui_onattach_action(ctx: *mut ffi::UiContext, action: *const c_char);
+ fn ui_ondetach_action(ctx: *mut ffi::UiContext, action: *const c_char);
fn ui_context_document(ctx: *mut ffi::UiContext) -> *mut c_void;
fn ui_context_obj(ctx: *mut ffi::UiContext) -> *mut ffi::UiObject;