42 lines
1005 B
Rust
42 lines
1005 B
Rust
use crate::views::{main_menu::MainMenu, view::View};
|
|
use alloc::vec;
|
|
use alloc::vec::Vec;
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct NavigationState {
|
|
pub screens: Vec<View>,
|
|
}
|
|
|
|
impl Default for NavigationState {
|
|
fn default() -> Self {
|
|
Self {
|
|
screens: vec![View::Main(MainMenu { selected: 0 })],
|
|
}
|
|
}
|
|
}
|
|
|
|
impl NavigationState {
|
|
pub fn new() -> Self {
|
|
Self::default()
|
|
}
|
|
|
|
pub fn back(&mut self) -> &View {
|
|
match &self.screens.len() {
|
|
0 => {
|
|
log::info!("No screens to go back to");
|
|
return self.screens.last().unwrap();
|
|
}
|
|
1 => {
|
|
log::info!("Only one screen on stack, cannot go back");
|
|
return self.screens.last().unwrap();
|
|
}
|
|
_ => {
|
|
log::info!("Going back to previous screen");
|
|
self.screens.pop();
|
|
return self.screens.last().unwrap();
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|