From 33f87292d54969478d8adb699c7c8f02ea372322 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sun, 10 May 2026 09:15:11 +0200 Subject: [PATCH] add app_run_startup_error --- ui-rs/src/ui/application.rs | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/ui-rs/src/ui/application.rs b/ui-rs/src/ui/application.rs index 1ab0aed..af70f65 100644 --- a/ui-rs/src/ui/application.rs +++ b/ui-rs/src/ui/application.rs @@ -30,8 +30,9 @@ 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 { fn on_startup(&mut self, app: &AppContext); @@ -44,6 +45,15 @@ pub struct AppContext { _marker: PhantomData, } +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(); @@ -89,6 +99,29 @@ pub fn app_run(app: &mut dyn Application) { } } + + + +struct ErrApp<'a> { + title: &'a str, + message: &'a str +} + +impl<'a> Application for ErrApp<'a> { + fn on_startup(&mut self, app: &AppContext) { + 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, -- 2.47.3