use crate::VirtualMachineRuntime; use crate::programs::prometeu_hub::window_manager::WindowManager; use prometeu_hal::HardwareBridge; use prometeu_hal::color::Color; use prometeu_hal::log::{LogLevel, LogSource}; use prometeu_hal::window::Rect; /// PrometeuHub: Launcher and system UI environment. pub struct PrometeuHub { pub window_manager: WindowManager, } impl PrometeuHub { pub fn new() -> Self { Self { window_manager: WindowManager::new() } } pub fn init(&mut self) { // Initializes the Window System and lists apps } pub fn gui_update(&mut self, os: &mut VirtualMachineRuntime, hw: &mut dyn HardwareBridge) { hw.gfx_mut().clear(Color::BLACK); let mut next_window = None; if hw.pad().a().pressed { os.log(LogLevel::Debug, LogSource::Hub, 0, "window A opened".to_string()); next_window = Some(( "Green Window".to_string(), Rect { x: 0, y: 0, w: 160, h: 90 }, Color::GREEN, )); } else if hw.pad().b().pressed { os.log(LogLevel::Debug, LogSource::Hub, 0, "window B opened".to_string()); next_window = Some(( "Indigo Window".to_string(), Rect { x: 160, y: 0, w: 160, h: 90 }, Color::INDIGO, )); } else if hw.pad().x().pressed { os.log(LogLevel::Debug, LogSource::Hub, 0, "window X opened".to_string()); next_window = Some(( "Yellow Window".to_string(), Rect { x: 0, y: 90, w: 160, h: 90 }, Color::YELLOW, )); } else if hw.pad().y().pressed { os.log(LogLevel::Debug, LogSource::Hub, 0, "window Y opened".to_string()); next_window = Some(("Red Window".to_string(), Rect { x: 160, y: 90, w: 160, h: 90 }, Color::RED)); } if let Some((title, rect, color)) = next_window { self.window_manager.remove_all_windows(); let id = self.window_manager.add_window(title, rect, color); self.window_manager.set_focus(id); } } pub fn render(&mut self, _os: &mut VirtualMachineRuntime, hw: &mut dyn HardwareBridge) { for window in &self.window_manager.windows { hw.gfx_mut().fill_rect( window.viewport.x, window.viewport.y, window.viewport.w, window.viewport.h, window.color, ); } } }