//! Desktop status shell for the Paperdoll Renderer foundation. //! //! The window lists what this build does not do. It is not a 3D viewport and //! it is not a paperdoll preview. use std::process::ExitCode; use eframe::egui; use paperdoll_renderer::foundation::{ availability, capabilities, dutch_label, dutch_state, dutch_summary, help_text, parse_cli, report, CliError, CliRequest, }; fn main() -> ExitCode { let args: Vec = std::env::args().skip(1).collect(); let borrowed: Vec<&str> = args.iter().map(String::as_str).collect(); match parse_cli(borrowed) { Ok(CliRequest::PrintHelp) => { println!("{}", help_text()); ExitCode::SUCCESS } Ok(CliRequest::PrintStatus) => { println!("{}", report()); ExitCode::SUCCESS } Ok(CliRequest::OpenWindow) => { if let Some(message) = window_preflight() { eprintln!("paperdoll-renderer: {message}"); return ExitCode::from(1); } match run_window() { Ok(()) => ExitCode::SUCCESS, Err(err) => { eprintln!("paperdoll-renderer: het statusvenster openen is mislukt: {err}"); ExitCode::from(1) } } } Err(CliError::UnknownArgument(arg)) => { eprintln!("paperdoll-renderer: onbekend argument '{arg}'."); eprintln!("Import en render zijn niet gebouwd. Gebruik --help."); ExitCode::from(2) } } } fn window_preflight() -> Option { #[cfg(target_os = "linux")] { let missing = paperdoll_renderer::foundation::missing_window_libraries(); if missing.is_empty() { None } else { Some(paperdoll_renderer::foundation::missing_library_message( &missing, )) } } #[cfg(not(target_os = "linux"))] { None } } fn run_window() -> eframe::Result<()> { let options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default() .with_title("Paperdoll Renderer") .with_inner_size([480.0, 560.0]) .with_min_inner_size([320.0, 280.0]), ..Default::default() }; eframe::run_native( "Paperdoll Renderer", options, Box::new(|_creation| Ok(Box::new(StatusApp))), ) } struct StatusApp; impl eframe::App for StatusApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { egui::CentralPanel::default().show(ctx, |ui| { egui::ScrollArea::vertical().show(ui, |ui| { ui.heading("Paperdoll Renderer"); ui.label("Projectbasis. Nog geen paperdoll-renderer."); ui.add_space(8.0); ui.label(dutch_summary()); ui.add_space(12.0); ui.strong("Status van deze build"); for capability in capabilities() { ui.label(format!( "{}: {}", dutch_label(*capability), dutch_state(availability(*capability)) )); } ui.add_space(12.0); if ui.button("Sluiten").clicked() { ctx.send_viewport_cmd(egui::ViewportCommand::Close); } }); }); } }