use crate::firmware::firmware_state::{AppCrashesStep, FirmwareState, ShellRunningStep}; use crate::firmware::prometeu_context::PrometeuContext; use prometeu_hal::log::{LogLevel, LogSource}; use prometeu_hal::primitives::Rect; use prometeu_system::SystemProfileAction; use prometeu_system::windows::WindowOwner; #[derive(Debug, Clone)] pub struct HubHomeStep; impl HubHomeStep { pub fn on_enter(&mut self, ctx: &mut PrometeuContext) { ctx.os.log(LogLevel::Info, LogSource::Hub, 0, "Entering HubHome".to_string()); ctx.os.windows().remove_all_windows(); ctx.hub.init(); } pub fn on_update(&mut self, ctx: &mut PrometeuContext) -> Option { let outcome = ctx.hub.update_shell_profile(ctx.os, ctx.vm, ctx.signals, ctx.hw); if let Some(report) = outcome.crash { return Some(FirmwareState::AppCrashes(AppCrashesStep { report })); } if let Some(SystemProfileAction::LaunchNativeShell(app)) = outcome.action { let task_id = ctx.os.sessions().create_native_shell_task(app.app_id(), app.title()); let id = ctx.os.windows().add_window( app.title().to_string(), WindowOwner::Task(task_id), Rect { x: 40, y: 20, w: 400, h: 220 }, app.color(), ); ctx.os.windows().set_focus(id); return Some(FirmwareState::ShellRunning(ShellRunningStep::new(task_id))); } None } pub fn on_exit(&mut self, _ctx: &mut PrometeuContext) {} }