#[allow(unused_imports)]
use std::ffi::{c_char, c_int, c_void};
-use std::ffi::CString;
+use std::ffi::{c_uint, CString};
use std::marker::PhantomData;
-use crate::ui::{event, ffi, toolkit, ui_object_ref, AppContext, EventWrapper, NoAppData, UiActions, UiModel};
+use crate::ui::{event, event_wrapper_oneshot, ffi, toolkit, ui_object_ref, AppContext, EventWrapper, NoAppData, UiActions, UiModel};
use crate::ui::ffi::{UiButtonArgs, UiCallback, UiContext, UiDestructor, UiDialogArgs, UiObject};
use crate::ui::widget::widget_fn;
build(&mut builder);
builder.create();
}
+
+ pub fn openfile_dialog<F>(&mut self, multiselect: bool, callback: F)
+ where F: FnMut(&mut event::Event<T>) + 'static {
+ openfile_dialog(self, multiselect as c_uint, callback);
+ }
+
+ pub fn selectdirectory_dialog<F>(&mut self, callback: F)
+ where F: FnMut(&mut event::Event<T>) + 'static {
+ openfile_dialog(self, 2, callback);
+ }
+
+ pub fn savefile_dialog<F>(&mut self, name: &str, callback: F)
+ where F: FnMut(&mut event::Event<T>) + 'static {
+ savefile_dialog(self, name, callback);
+ }
}
pub fn dialog_builder() -> DialogBuilder<NoAppData> {
builder.create();
}
+fn openfile_dialog<T, F>(obj: &toolkit::UiObject<T>, mode: c_uint, f: F)
+where F: FnMut(&mut event::Event<T>) + 'static {
+ let b: Box<EventWrapper<T>> = Box::new(EventWrapper { callback: Box::new(f) });
+ let ptr = Box::into_raw(b);
+ unsafe {
+ ui_openfiledialog(obj.ptr, mode, Some(event_wrapper_oneshot::<T>), ptr as *mut c_void);
+ }
+}
+
+fn savefile_dialog<T, F>(obj: &toolkit::UiObject<T>, name: &str, f: F)
+where F: FnMut(&mut event::Event<T>) + 'static {
+ let cstr = CString::new(name).unwrap();
+ let b: Box<EventWrapper<T>> = Box::new(EventWrapper { callback: Box::new(f) });
+ let ptr = Box::into_raw(b);
+ unsafe {
+ ui_savefiledialog(obj.ptr, cstr.as_ptr(), Some(event_wrapper_oneshot::<T>), ptr as *mut c_void);
+ }
+}
+
/* ---------------------------------- C functions ---------------------------------- */
fn ui_dialog_args_set_result(args: *mut UiDialogArgs, callback: UiCallback);
fn ui_dialog_args_set_resultdata(args: *mut UiDialogArgs, data: *mut c_void);
fn ui_dialog_args_free(args: *mut UiDialogArgs);
+
+ fn ui_openfiledialog(obj: *mut ffi::UiObject, mode: c_uint, callback: UiCallback, data: *mut c_void);
+ fn ui_savefiledialog(obj: *mut ffi::UiObject, name: *const c_char, callback: UiCallback, data: *mut c_void);
}