app.toolbar_appmenu(|menu|{
menu.item("New Window").onclick(|_| new_app_window() ).create();
menu.separator();
+ menu.item("New Note").action("new_note").create();
+ menu.item("Add File").action("new_file_note").create();
+ menu.separator();
menu.item("Rename").action("note_rename").create();
menu.item("Delete").action("delete_note").create();
menu.item("Edit Title").action("note_edit_title").create();
self.notes.select_with_event(0, true);
}
+ #[action]
+ pub fn new_file_note(&mut self, event: &ActionEvent) {
+ println!("new file note");
+
+ let Some(doc) = self.doc_ref.get_doc() else {
+ return;
+ };
+ let proxy = doc.doc_proxy();
+
+ if let Some(obj) = &event.obj {
+ obj.openfile_dialog(false, move|event|{
+
+ });
+ }
+ }
+
#[action(NavigationItem)]
pub fn navigate_to_note(&mut self, _event: &mut ActionEvent, nav: &NavigationItem) {
//println!("navigate to note");
ListElement,
Dnd,
SubList(&'a mut SubListEvent),
- FileList,
+ FileList(&'a Vec<String>),
TypedObject(&'a mut dyn Any)
}
ListElement,
Dnd,
SubList(SubListEvent),
- FileList,
+ FileList(Vec<String>),
TypedObject(*mut Box<dyn Any>)
}
}
UiEventType::FileList => {
// filelist
- EventTypeData::Null
+ let filelist: *mut ffi::UiFileList = ptr.cast();
+ let filelist = unsafe { &*filelist };
+ let mut files = Vec::with_capacity(filelist.nfiles as usize);
+
+ for i in 0..filelist.nfiles {
+ let file_ptr = unsafe { *filelist.files.add(i as usize) };
+
+ if !file_ptr.is_null() {
+ let file = unsafe { CStr::from_ptr(file_ptr) }
+ .to_string_lossy()
+ .into_owned();
+
+ files.push(file);
+ }
+ }
+ EventTypeData::FileList(files)
},
UiEventType::TypedObject => {
unsafe {
EventTypeData::ListElement => EventType::ListElement,
EventTypeData::Dnd => EventType::Dnd,
EventTypeData::SubList(s) => EventType::SubList( s ),
- EventTypeData::FileList => EventType::FileList,
+ EventTypeData::FileList(ls) => EventType::FileList( ls ),
EventTypeData::TypedObject(ptr) => unsafe {
let boxed: &mut Box<dyn Any> = ptr.as_mut().unwrap();
let any: &mut dyn Any = boxed.as_mut();
#![allow(dead_code)]
-use std::ffi::{c_int, c_void};
+use std::ffi::{c_char, c_int, c_void};
#[repr(C)]
pub struct UiWebviewArgs {
_private: [u8; 0],
}
+
+#[repr(C)]
+pub struct UiFileList {
+ pub files: *mut *mut c_char,
+ pub nfiles: libc::size_t,
+}
\ No newline at end of file