From b55b444db45e7bd64530a435bf7038d7b7330940 Mon Sep 17 00:00:00 2001 From: rhetenor Date: Tue, 18 Aug 2026 19:53:56 +0000 Subject: [PATCH] implement journal view skelleton --- src/views.rs | 1 + src/views/journal_view.rs | 40 +++++++++++++++++++++++++++++++++++++++ src/views/main_menu.rs | 6 ++++++ src/views/view.rs | 8 +++++++- 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/views/journal_view.rs diff --git a/src/views.rs b/src/views.rs index fa99794..4d465b2 100644 --- a/src/views.rs +++ b/src/views.rs @@ -1,4 +1,5 @@ pub mod card_view; +pub mod journal_view; pub mod main_menu; pub mod menu_item; pub mod scan_menu; diff --git a/src/views/journal_view.rs b/src/views/journal_view.rs new file mode 100644 index 0000000..e9b7c37 --- /dev/null +++ b/src/views/journal_view.rs @@ -0,0 +1,40 @@ +use core::future; + +use alloc::vec::Vec; + +use embedded_graphics::pixelcolor::Rgb565; +use embedded_graphics::prelude::RgbColor; +use embedded_graphics_core::draw_target::DrawTarget; + +use crate::{ + card::model::Card, + display::primary_lcd::PrimaryLcdDisplay, + navigation::navigation::{Action, Navigable}, + views::view::View, +}; + +#[derive(Debug, Clone)] +pub struct JournalView { + pub cards: Vec, + pub selected_card: usize, +} + +impl Navigable for JournalView { + fn display( + &self, + display: &mut PrimaryLcdDisplay<'static>, + ) -> impl core::future::Future + Send { + display.clear(Rgb565::BLACK).unwrap(); + + core::future::ready(()) + } + + fn handle_input(&self, input: Action) -> impl core::future::Future + Send { + let new_menu = match input { + Action::Ok => View::Journal(self.clone()), + _ => View::Journal(self.clone()), + }; + + future::ready(new_menu) + } +} diff --git a/src/views/main_menu.rs b/src/views/main_menu.rs index 0cb2eec..8840ba7 100644 --- a/src/views/main_menu.rs +++ b/src/views/main_menu.rs @@ -1,7 +1,9 @@ +use alloc::vec; use core::future; use crate::display::primary_lcd::PrimaryLcdDisplay; +use crate::views::journal_view::JournalView; use crate::views::{menu_item, settings_menu::SettingsMenu, view::View}; use crate::navigation::navigation::{Action, Navigable}; @@ -49,6 +51,10 @@ impl Navigable for MainMenu { }) } Action::Ok => match self.selected { + 1 => View::Journal(JournalView { + cards: vec![], + selected_card: 0, + }), 2 => View::Settings(SettingsMenu { selected: 0 }), _ => View::Main(self.clone()), }, diff --git a/src/views/view.rs b/src/views/view.rs index d9db225..bd0abc3 100644 --- a/src/views/view.rs +++ b/src/views/view.rs @@ -1,4 +1,7 @@ -use crate::views::{main_menu::MainMenu, scan_menu::ScanMenu, settings_menu::SettingsMenu}; +use crate::views::{ + journal_view::JournalView, main_menu::MainMenu, scan_menu::ScanMenu, + settings_menu::SettingsMenu, +}; use crate::navigation::navigation::Navigable; @@ -7,6 +10,7 @@ pub enum View { Main(MainMenu), Scan(ScanMenu), Settings(SettingsMenu), + Journal(JournalView), } impl Navigable for View { @@ -19,6 +23,7 @@ impl Navigable for View { View::Main(main_menu) => main_menu.display(display).await, View::Scan(scan_menu) => scan_menu.display(display).await, View::Settings(settings_menu) => settings_menu.display(display).await, + View::Journal(journal_view) => journal_view.display(display).await, } } } @@ -32,6 +37,7 @@ impl Navigable for View { View::Main(main_menu) => main_menu.handle_input(input).await, View::Scan(scan_menu) => scan_menu.handle_input(input).await, View::Settings(settings_menu) => settings_menu.handle_input(input).await, + View::Journal(journal_view) => journal_view.handle_input(input).await, } } }