]> uap-core.de Git - note.git/commitdiff
implement SubList event type main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 21 May 2026 18:04:10 +0000 (20:04 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 21 May 2026 18:04:10 +0000 (20:04 +0200)
application/src/notebook.rs
application/src/window.rs
ui-rs/src/ui/event.rs
ui-rs/src/ui/ffi.rs
ui-rs/src/ui/toolkit.rs

index 80df47451f0d0e42cb3c0800c42f4c475743dc8c..a601006697814ff43c84d5eddd9b0f1a4932211e 100644 (file)
@@ -1,4 +1,4 @@
-use ui_rs::{action, ui_actions, UiModel};
+use ui_rs::{ui_actions, UiModel};
 use ui_rs::ui::*;
 
 use entity::note::Model as Note;
index d1bd531779e4e95d44eb6eb7090c86ed5cc12894..9f4810e2da138617c24fe2b470eb4eeeb2768498 100644 (file)
@@ -125,7 +125,9 @@ pub fn create_window(app: &App, ctx: &AppContext<MainWindow>) -> UiObject<MainWi
                     item.label = Some(elm.name.clone());
                 });
                 b.onactivate(|e|{
-                    
+                    if let EventType::SubList(sl) = &e.event_type {
+                        
+                    }
                 });
             });
         });
index 7c3b3d3bbe9144b0cabe48bfb7b49617b1f69a4e..378737446bde172d4fc883c55a5f8783d0e950ac 100644 (file)
@@ -30,7 +30,7 @@
 
 use std::ffi::{c_char, c_void, CStr, CString};
 use crate::ui::{event, ffi, UiDouble, UiInteger, UiString, UiText, UiRange, ListSelection, UiObject, NoAppData};
-use crate::ui::ffi::{UiEvent};
+use crate::ui::ffi::{UiEvent, UiSubListEventData};
 
 pub struct Event<'a, T> {
     pub obj: &'a mut UiObject<T>,
@@ -59,7 +59,7 @@ pub enum EventType<'a> {
     ListSelection(&'a ListSelection),
     ListElement,
     Dnd,
-    SubList,
+    SubList(&'a mut SubListEvent),
     FileList
 }
 
@@ -75,7 +75,7 @@ enum EventTypeData {
     ListSelection(ListSelection),
     ListElement,
     Dnd,
-    SubList,
+    SubList(SubListEvent),
     FileList
 }
 
@@ -106,6 +106,21 @@ fn get_event_data(e: *const ffi::UiEvent) -> EventTypeData {
         8 => {
             EventTypeData::ListSelection( ListSelection::from_ptr(ptr.cast()) )
         }
+        9 => {
+            // list elm
+            EventTypeData::Null
+        }
+        10 => {
+            // dnd
+            EventTypeData::Null
+        }
+        11 => {
+            EventTypeData::SubList(SubListEvent::from_ptr(ptr.cast()))
+        }
+        12 => {
+            // filelist
+            EventTypeData::Null
+        }
         _ => EventTypeData::Null
     }
 }
@@ -120,10 +135,10 @@ fn get_event_type<'a>(data: &'a mut EventTypeData) -> EventType<'a> {
         EventTypeData::TextValue(t) => EventType::TextValue( t ),
         EventTypeData::DoubleValue(d) => EventType::DoubleValue( d ),
         EventTypeData::RangeValue(r) => EventType::RangeValue( r ),
-        EventTypeData::ListSelection(s) => EventType::ListSelection( s),
+        EventTypeData::ListSelection(s) => EventType::ListSelection( s ),
         EventTypeData::ListElement => EventType::ListElement,
         EventTypeData::Dnd => EventType::Dnd,
-        EventTypeData::SubList => EventType::SubList,
+        EventTypeData::SubList(s) => EventType::SubList( s ),
         EventTypeData::FileList => EventType::FileList,
     }
 }
@@ -205,6 +220,26 @@ pub extern "C" fn action_event_wrapper<T>(e: *const ffi::UiEvent, data: *mut c_v
     }
 }
 
+
+pub struct SubListEvent {
+    /// SubList index
+    pub sublist_index: usize,
+    /// Row index (inside the sublist) or -1 if this is an event for the header item
+    pub row_index: i32,
+}
+
+impl SubListEvent {
+    pub fn from_ptr(ptr: *const UiSubListEventData) -> SubListEvent {
+        unsafe {
+            SubListEvent {
+                sublist_index: ui_sublist_event_get_sublist_index(ptr) as usize,
+                row_index: ui_sublist_event_get_row_index(ptr)
+            }
+        }
+    }
+}
+
+
 extern "C" {
     fn ui_event_get_obj(event: *const UiEvent) -> *mut ffi::UiObject;
     fn ui_event_get_windowdata(event: *const UiEvent) -> *const c_void;
@@ -213,4 +248,7 @@ extern "C" {
     fn ui_event_get_eventdatatype(event: *const UiEvent) -> i32;
     fn ui_event_get_int(event: *const UiEvent) -> i32;
     fn ui_event_get_set(event: *const UiEvent) -> i32;
+
+    fn ui_sublist_event_get_sublist_index(event: *const UiSubListEventData) -> i32;
+    fn ui_sublist_event_get_row_index(event: *const UiSubListEventData) -> i32;
 }
\ No newline at end of file
index cc48d34bcc927ad612bf4f54ce1fa8dc8a5b8f3b..c2a28584ed64187019cede9e9be6abb749a13461 100644 (file)
@@ -46,6 +46,11 @@ pub struct UiEvent {
     _private: [u8; 0],
 }
 
+#[repr(C)]
+pub struct UiSubListEventData {
+    _private: [u8; 0],
+}
+
 #[repr(C)]
 pub struct UiText {
     _private: [u8; 0],
index 60c08e84bcbd60232f0d241b87717f8c495773d7..917f948afb3b8735f3abcdfde3a00ea0fd8a979c 100644 (file)
@@ -718,6 +718,10 @@ impl<T> UiSourceList<T> {
         }
     }
 
+    pub fn data(&self) -> &Vec<SubList<T>> {
+        &self.sublists
+    }
+
     pub fn len(&self) -> usize {
         self.sublists.len()
     }