]> uap-core.de Git - note.git/commitdiff
implement FileList event type main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 7 Aug 2026 19:07:30 +0000 (21:07 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 7 Aug 2026 19:07:30 +0000 (21:07 +0200)
application/note/src/main.rs
application/note/src/notebook.rs
ui-rs/src/ui/event.rs
ui-rs/src/ui/ffi.rs

index f18e7623dbc7b4511e8edad528065f742642d98d..fc5a96e99bb2b210d319147468269c57599287c7 100644 (file)
@@ -172,6 +172,9 @@ fn create_toolbar(app: &AppContext<MainWindow>) {
     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();
index 0ed22692cd87bb7d75904fb7bba533ecc62142fa..14712cbb3fabef2b5ad0484d537f69e4e36e5643 100644 (file)
@@ -295,6 +295,22 @@ impl Notebook {
         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");
index 139e7f545d4b986c8e5dd335f8e2f8f8e202313a..8d85131cccda6c0f0bbc1a1a75672e2caffd59ef 100644 (file)
@@ -86,7 +86,7 @@ pub enum EventType<'a> {
     ListElement,
     Dnd,
     SubList(&'a mut SubListEvent),
-    FileList,
+    FileList(&'a Vec<String>),
     TypedObject(&'a mut dyn Any)
 }
 
@@ -105,7 +105,7 @@ enum EventTypeData {
     ListElement,
     Dnd,
     SubList(SubListEvent),
-    FileList,
+    FileList(Vec<String>),
     TypedObject(*mut Box<dyn Any>)
 }
 
@@ -184,7 +184,22 @@ fn get_event_data(e: *const ffi::UiEvent) -> EventTypeData {
         }
         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 {
@@ -217,7 +232,7 @@ fn get_event_type<'a>(data: &'a mut EventTypeData) -> EventType<'a> {
         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();
index 1f9579f689482027297235098178c258bade79d5..d97c15db5646342df28bf9149015a38fdcbf9646 100644 (file)
@@ -28,7 +28,7 @@
 
 #![allow(dead_code)]
 
-use std::ffi::{c_int, c_void};
+use std::ffi::{c_char, c_int, c_void};
 
 
 #[repr(C)]
@@ -256,3 +256,9 @@ pub struct UiImageViewerArgs {
 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