From 9c3b87b20957c8d61fdd0a5012e5e558a74f23e9 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Mon, 13 Apr 2026 19:56:20 +0200 Subject: [PATCH] extend Event struct --- application/src/main.rs | 24 +++++++++++++---------- ui-rs/src/ui/event.rs | 43 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/application/src/main.rs b/application/src/main.rs index daf250e..3ed693d 100644 --- a/application/src/main.rs +++ b/application/src/main.rs @@ -13,17 +13,21 @@ struct TestData { i: i32 } -impl ui::Application for App { - fn on_startup(&self) { - let testdata = TestData { i: 0 } ; +fn create_window() { + let testdata = TestData { i: 0 } ; + + let window = ui::window("note", testdata, |obj, _data| { + obj.button_builder().label("Hello").onclick(|e| { + println!("Button clicked: {}", e.data.i); + e.data.i += 1; + }).create(); + }); - let window = ui::window("note", testdata, |obj, _data| { - obj.button_builder().label("Hello").onclick(|e| { - println!("Button clicked: {}", e.data.i); - e.data.i += 1; - }).create(); - }); + window.show(); +} - window.show(); +impl ui::Application for App { + fn on_startup(&self) { + create_window(); } } diff --git a/ui-rs/src/ui/event.rs b/ui-rs/src/ui/event.rs index d8e0392..bbf822c 100644 --- a/ui-rs/src/ui/event.rs +++ b/ui-rs/src/ui/event.rs @@ -1,9 +1,30 @@ +#![allow(dead_code)] + use std::ffi::c_void; -use crate::ui::ffi; -use crate::ui::ffi::UiEvent; +use crate::ui::{ffi, UiDouble, UiInteger, UiString, UiText}; +use crate::ui::ffi::{UiEvent, UiRange}; pub struct Event<'a, T> { - pub data: &'a mut T + pub data: &'a mut T, + pub event_type: EventType<'a>, + pub intval: i32, + pub set: bool +} + +pub enum EventType<'a> { + Null, + Pointer, + String(String), + IntegerValue(&'a mut UiInteger), + StringValue(&'a mut UiString), + TextValue(&'a mut UiText), + DoubleValue(&'a mut UiDouble), + RangeValue(&'a mut UiRange), + ListSelection, + ListElement, + Dnd, + SubList, + FileList } pub struct EventWrapper { @@ -17,7 +38,16 @@ pub extern "C" fn event_wrapper(e: *const ffi::UiEvent, data: *mut c_void) { let wdata_ptr = ui_event_get_windowdata(e); let wdata = &mut *(wdata_ptr as *mut T); - let mut event = Event { data: wdata }; + //let ev_type = ui_event_get_eventdatatype(e); + let ev_int = ui_event_get_int(e); + let ev_set = ui_event_get_set(e) != 0; + + let mut event = Event { + data: wdata, + event_type: EventType::Null, + intval: ev_int, + set: ev_set + }; (wrapper.callback)(&mut event); } @@ -26,4 +56,9 @@ pub extern "C" fn event_wrapper(e: *const ffi::UiEvent, data: *mut c_void) { extern "C" { fn ui_event_get_windowdata(event: *const UiEvent) -> *const c_void; + fn ui_event_get_document(event: *const UiEvent) -> *const c_void; + fn ui_event_get_eventdata(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; } \ No newline at end of file -- 2.47.3