use std::ffi::{c_char, c_int, c_void, CString};
use std::marker::PhantomData;
+use ui_rs_derive::UiModel;
use crate::ui::ffi::{UiCallback, UiEvent};
-use crate::ui::{toolkit, ui_global_context, UiActions, UiModel};
+use crate::ui::{dialog, toolkit, ui_global_context, UiActions, UiContext, UiModel};
pub trait Application<T: UiModel + UiActions> {
fn on_startup(&mut self, app: &AppContext<T>);
_marker: PhantomData<T>,
}
+pub struct NoAppData {}
+
+impl UiModel for NoAppData {
+ fn init(&mut self, ctx: &UiContext) {}
+}
+
+impl UiActions for NoAppData {
+ fn init_actions(&mut self, _ctx: &mut UiContext) {}
+}
extern "C" {
fn ui_main();
}
}
+
+
+
+struct ErrApp<'a> {
+ title: &'a str,
+ message: &'a str
+}
+
+impl<'a> Application<NoAppData> for ErrApp<'a> {
+ fn on_startup(&mut self, app: &AppContext<NoAppData>) {
+ dialog(|d| {
+ d.title(self.title);
+ d.content(self.message);
+ d.button1_label("OK");
+ });
+ }
+}
+
+pub fn app_run_startup_error(title: &str, message: &str) {
+ let mut app = ErrApp { title, message };
+ app_run(&mut app);
+}
+
#[repr(C)]
struct AppWrapper<'a, T> {
app: &'a mut dyn Application<T>,