diff --git a/src/navigation/main_menu.rs b/src/navigation/main_menu.rs index 9b03637..5d7cb71 100644 --- a/src/navigation/main_menu.rs +++ b/src/navigation/main_menu.rs @@ -3,11 +3,11 @@ use core::future; use crate::{display::primary_lcd::PrimaryLcdDisplay, navigation::inputs::Inputs}; use crate::navigation::menu_item; +use crate::navigation::settings_menu::SettingsMenu; -use embedded_graphics::mono_font::MonoTextStyle; -use embedded_graphics::mono_font::ascii::FONT_10X20; use embedded_graphics::pixelcolor::Rgb565; use embedded_graphics::prelude::RgbColor; +use embedded_graphics_core::draw_target::DrawTarget; use super::state::Menu; @@ -23,8 +23,7 @@ impl super::navigation::Navigable for MainMenu { &self, display: &mut PrimaryLcdDisplay<'static>, ) -> impl core::future::Future + Send { - let style = MonoTextStyle::new(&FONT_10X20, Rgb565::WHITE); - let selected_style = MonoTextStyle::new(&FONT_10X20, Rgb565::BLUE); + display.clear(Rgb565::BLACK).unwrap(); menu_item::show(display, "Last card", 0, self.selected); menu_item::show(display, "Journal", 1, self.selected); @@ -54,6 +53,10 @@ impl super::navigation::Navigable for MainMenu { selected: new_selected, }) } + super::navigation::Action::Ok => match self.selected { + 2 => Menu::Settings(SettingsMenu { selected: 0 }), + _ => Menu::Main(self.clone()), + }, _ => Menu::Main(self.clone()), }; diff --git a/src/navigation/settings_menu.rs b/src/navigation/settings_menu.rs new file mode 100644 index 0000000..c1a5eff --- /dev/null +++ b/src/navigation/settings_menu.rs @@ -0,0 +1,33 @@ +use crate::navigation::menu_item; +use crate::navigation::state::Menu; +use crate::{display::primary_lcd::PrimaryLcdDisplay, navigation::inputs::Inputs}; + +use embedded_graphics::pixelcolor::Rgb565; +use embedded_graphics::prelude::RgbColor; +use embedded_graphics_core::draw_target::DrawTarget; +pub const MAX_SELECTED: i8 = 2; + +#[derive(Debug, Clone)] +pub struct SettingsMenu { + pub selected: i32, +} + +impl super::navigation::Navigable for SettingsMenu { + fn display( + &self, + display: &mut PrimaryLcdDisplay<'static>, + ) -> impl core::future::Future + Send { + display.clear(Rgb565::BLACK).unwrap(); + menu_item::show(display, "System Inforation", 0, self.selected); + menu_item::show(display, "Wifi Information", 1, self.selected); + + core::future::ready(()) + } + + fn handle_input( + &self, + input: super::navigation::Action, + ) -> impl core::future::Future + Send { + async move { Menu::Settings(SettingsMenu { selected: 0 }) } + } +} diff --git a/src/navigation/state.rs b/src/navigation/state.rs index 9d2b3f3..7171f45 100644 --- a/src/navigation/state.rs +++ b/src/navigation/state.rs @@ -1,10 +1,12 @@ -use crate::navigation::{main_menu::MainMenu, navigation::Navigable, scan_menu::ScanMenu}; +use crate::navigation::{ + main_menu::MainMenu, navigation::Navigable, scan_menu::ScanMenu, settings_menu::SettingsMenu, +}; #[derive(Debug, Clone)] pub enum Menu { Main(MainMenu), Scan(ScanMenu), - Settings, + Settings(SettingsMenu), } impl Navigable for Menu { @@ -16,7 +18,7 @@ impl Navigable for Menu { match self { Menu::Main(main_menu) => main_menu.display(display).await, Menu::Scan(scan_menu) => scan_menu.display(display).await, - Menu::Settings => {} + Menu::Settings(settings_menu) => settings_menu.display(display).await, } } } @@ -29,7 +31,7 @@ impl Navigable for Menu { match self { Menu::Main(main_menu) => main_menu.handle_input(input).await, Menu::Scan(scan_menu) => scan_menu.handle_input(input).await, - Menu::Settings => Self::Settings, + Menu::Settings(settings_menu) => settings_menu.handle_input(input).await, } } }