1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
use crate::utils; use std::path::PathBuf; #[derive(Debug, Clone)] pub enum AppState { Init, Initialized { images: Vec<PathBuf>, selected_index: usize, }, } impl AppState { pub fn initialized(path: &str) -> Self { let images = utils::get_image_paths(path); let selected_index = 0; Self::Initialized { images, selected_index, } } pub fn is_initialized(&self) -> bool { matches!(self, &Self::Initialized { .. }) } pub fn set_images(&mut self, imgs: Vec<PathBuf>) { if let Self::Initialized { images, .. } = self { *images = imgs; } } pub fn get_images(&self) -> Vec<PathBuf> { if let Self::Initialized { images, .. } = self { images.clone() } else { vec![] } } pub fn get_image(&self, index: usize) -> Option<PathBuf> { if let Self::Initialized { images, .. } = self { if images.is_empty() { None } else { Some(images[index].clone()) } } else { None } } pub fn increment_index(&mut self) { if let Self::Initialized { selected_index, images, } = self { if *selected_index < images.len() - 1 { *selected_index += 1; } } } pub fn decrement_index(&mut self) { if let Self::Initialized { selected_index, .. } = self { if *selected_index > 0 { *selected_index -= 1; } } } pub fn get_index(&self) -> Option<usize> { if let Self::Initialized { selected_index, .. } = self { Some(*selected_index) } else { None } } } impl Default for AppState { fn default() -> Self { Self::Init } }