use crate::app::AppState; use crate::steps; pub struct WizardState { pub current_step: usize, pub total_steps: usize, pub visited: Vec, names: Vec, } impl WizardState { pub fn new() -> Self { let names = vec![ "Workflow".into(), "Images".into(), "Resize".into(), "Adjustments".into(), "Convert".into(), "Compress".into(), "Metadata".into(), "Watermark".into(), "Rename".into(), "Output".into(), ]; let total = names.len(); let mut visited = vec![false; total]; visited[0] = true; Self { current_step: 0, total_steps: total, visited, names, } } pub fn step_names(&self) -> Vec { self.names.clone() } pub fn can_go_next(&self) -> bool { self.current_step < self.total_steps - 1 } pub fn can_go_back(&self) -> bool { self.current_step > 0 } pub fn is_last_step(&self) -> bool { self.current_step == self.total_steps - 1 } } pub fn build_wizard_pages(state: &AppState) -> Vec { vec![ steps::step_workflow::build_workflow_page(state), // 0: Workflow steps::step_images::build_images_page(state), // 1: Images steps::step_resize::build_resize_page(state), // 2: Resize steps::step_adjustments::build_adjustments_page(state),// 3: Adjustments steps::step_convert::build_convert_page(state), // 4: Convert steps::step_compress::build_compress_page(state), // 5: Compress steps::step_metadata::build_metadata_page(state), // 6: Metadata steps::step_watermark::build_watermark_page(state), // 7: Watermark steps::step_rename::build_rename_page(state), // 8: Rename steps::step_output::build_output_page(state), // 9: Output ] }