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>,
ListSelection(&'a ListSelection),
ListElement,
Dnd,
- SubList,
+ SubList(&'a mut SubListEvent),
FileList
}
ListSelection(ListSelection),
ListElement,
Dnd,
- SubList,
+ SubList(SubListEvent),
FileList
}
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
}
}
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,
}
}
}
}
+
+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;
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