Mainmenu #28
@@ -1,5 +1,7 @@
|
|||||||
pub mod inputs;
|
pub mod inputs;
|
||||||
pub mod main_menu;
|
pub mod main_menu;
|
||||||
|
pub mod menu_item;
|
||||||
pub mod navigation;
|
pub mod navigation;
|
||||||
pub mod scan_menu;
|
pub mod scan_menu;
|
||||||
|
pub mod settings_menu;
|
||||||
pub mod state;
|
pub mod state;
|
||||||
|
|||||||
@@ -2,23 +2,20 @@ use core::future;
|
|||||||
|
|
||||||
use crate::{display::primary_lcd::PrimaryLcdDisplay, navigation::inputs::Inputs};
|
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::MonoTextStyle;
|
||||||
use embedded_graphics::mono_font::ascii::FONT_10X20;
|
use embedded_graphics::mono_font::ascii::FONT_10X20;
|
||||||
use embedded_graphics::pixelcolor::Rgb565;
|
use embedded_graphics::pixelcolor::Rgb565;
|
||||||
use embedded_graphics::prelude::Point;
|
|
||||||
use embedded_graphics::prelude::RgbColor;
|
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;
|
use super::state::Menu;
|
||||||
|
|
||||||
pub const MAX_SELECTED: i8 = 3;
|
pub const MAX_SELECTED: i32 = 3;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct MainMenu {
|
pub struct MainMenu {
|
||||||
pub selected: i8,
|
pub selected: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl super::navigation::Navigable for MainMenu {
|
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 style = MonoTextStyle::new(&FONT_10X20, Rgb565::WHITE);
|
||||||
let selected_style = MonoTextStyle::new(&FONT_10X20, Rgb565::BLUE);
|
let selected_style = MonoTextStyle::new(&FONT_10X20, Rgb565::BLUE);
|
||||||
|
|
||||||
Text::new(
|
menu_item::show(display, "Last card", 0, self.selected);
|
||||||
&format!("Last card"),
|
menu_item::show(display, "Journal", 1, self.selected);
|
||||||
Point::new(40, 40),
|
menu_item::show(display, "Settings", 2, self.selected);
|
||||||
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();
|
|
||||||
|
|
||||||
core::future::ready(())
|
core::future::ready(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user