diff --git a/src/navigation.rs b/src/navigation.rs index 6d97813..d228ed0 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -1,5 +1,7 @@ pub mod inputs; pub mod main_menu; +pub mod menu_item; pub mod navigation; pub mod scan_menu; +pub mod settings_menu; pub mod state; diff --git a/src/navigation/main_menu.rs b/src/navigation/main_menu.rs index ffc842f..9b03637 100644 --- a/src/navigation/main_menu.rs +++ b/src/navigation/main_menu.rs @@ -2,23 +2,20 @@ use core::future; use crate::{display::primary_lcd::PrimaryLcdDisplay, navigation::inputs::Inputs}; -use alloc::format; +use crate::navigation::menu_item; + use embedded_graphics::mono_font::MonoTextStyle; use embedded_graphics::mono_font::ascii::FONT_10X20; use embedded_graphics::pixelcolor::Rgb565; -use embedded_graphics::prelude::Point; use embedded_graphics::prelude::RgbColor; -use embedded_graphics::text::Text; -use embedded_graphics::{Drawable, geometry::Size, primitives::Rectangle}; -use embedded_graphics_core::draw_target::DrawTarget; use super::state::Menu; -pub const MAX_SELECTED: i8 = 3; +pub const MAX_SELECTED: i32 = 3; #[derive(Debug, Clone)] pub struct MainMenu { - pub selected: i8, + pub selected: i32, } impl super::navigation::Navigable for MainMenu { @@ -29,41 +26,9 @@ impl super::navigation::Navigable for MainMenu { let style = MonoTextStyle::new(&FONT_10X20, Rgb565::WHITE); let selected_style = MonoTextStyle::new(&FONT_10X20, Rgb565::BLUE); - Text::new( - &format!("Last card"), - Point::new(40, 40), - if self.selected == 0 { - selected_style - } else { - style - }, - ) - .draw(display) - .unwrap(); - - Text::new( - &format!("Journal"), - Point::new(40, 60), - if self.selected == 1 { - selected_style - } else { - style - }, - ) - .draw(display) - .unwrap(); - - Text::new( - &format!("Settings"), - Point::new(40, 80), - if self.selected == 2 { - selected_style - } else { - style - }, - ) - .draw(display) - .unwrap(); + menu_item::show(display, "Last card", 0, self.selected); + menu_item::show(display, "Journal", 1, self.selected); + menu_item::show(display, "Settings", 2, self.selected); core::future::ready(()) } diff --git a/src/navigation/menu_item.rs b/src/navigation/menu_item.rs new file mode 100644 index 0000000..f0a68ba --- /dev/null +++ b/src/navigation/menu_item.rs @@ -0,0 +1,33 @@ +use embedded_graphics::mono_font::MonoTextStyle; +use embedded_graphics::mono_font::ascii::FONT_10X20; +use embedded_graphics::pixelcolor::Rgb565; +use embedded_graphics::prelude::Point; +use embedded_graphics::prelude::RgbColor; +use embedded_graphics::text::Text; +use embedded_graphics::{Drawable, geometry::Size, primitives::Rectangle}; +use embedded_graphics_core::draw_target::DrawTarget; + +use crate::display::primary_lcd::PrimaryLcdDisplay; + +pub fn show<'a>( + display: &mut PrimaryLcdDisplay<'static>, + name: &str, + position: i32, + selected: i32, +) { + let style = MonoTextStyle::new(&FONT_10X20, Rgb565::WHITE); + let selected_style = MonoTextStyle::new(&FONT_10X20, Rgb565::BLUE); + + Text::new( + name, + Point::new(40, 40 + position * 40), + if position == selected { + selected_style + } else { + style + }, + ) + .draw(display) + .unwrap(); +} +