diff --git a/selection_ui/src/lib.rs b/selection_ui/src/lib.rs index 0e7a09b..6a58b3a 100644 --- a/selection_ui/src/lib.rs +++ b/selection_ui/src/lib.rs @@ -4,9 +4,9 @@ extern crate alloc; use abi::{ display::Display, - fs::{Entries, FileName}, get_key, keyboard::{KeyCode, KeyState}, + print, sleep, }; use alloc::vec::Vec; use embedded_graphics::{ @@ -26,13 +26,13 @@ use embedded_text::TextBox; pub struct SelectionUi<'a> { selection: usize, - items: &'a Entries, + items: &'a [&'a str], error: &'a str, last_bounds: Option, } impl<'a> SelectionUi<'a> { - pub fn new(items: &'a Entries, error: &'a str) -> Self { + pub fn new(items: &'a [&'a str], error: &'a str) -> Self { Self { selection: 0, items, @@ -47,6 +47,7 @@ impl<'a> SelectionUi<'a> { loop { let key = get_key(); if key.state == KeyState::Pressed { + print!("Got Key press: {:?}", key.key); if let Some(s) = self.update(display, key.key)? { selection = Some(s); break; @@ -61,13 +62,13 @@ impl<'a> SelectionUi<'a> { pub fn update(&mut self, display: &mut Display, key: KeyCode) -> Result, ()> { match key { KeyCode::JoyUp => { - let _ = self.selection.saturating_sub(1); + self.selection = self.selection.saturating_sub(1); } KeyCode::JoyDown => { - let _ = self.selection.saturating_add(1); + self.selection = self.selection.saturating_add(1); } KeyCode::Enter | KeyCode::JoyRight => return Ok(Some(self.selection)), - _ => (), + _ => return Ok(Some(self.selection)), }; self.draw(display)?; Ok(None) @@ -77,9 +78,7 @@ impl<'a> SelectionUi<'a> { let text_style = MonoTextStyle::new(&FONT_10X20, Rgb565::WHITE); let display_area = display.bounding_box(); - let entries = self.items.entries(); - - if entries.is_empty() { + if self.items.is_empty() { TextBox::new( &self.error, Rectangle::new( @@ -94,8 +93,8 @@ impl<'a> SelectionUi<'a> { let mut views: Vec>> = Vec::new(); - for i in &entries { - views.push(Text::new(i.full_name(), Point::zero(), text_style)); + for i in self.items { + views.push(Text::new(i, Point::zero(), text_style)); } let views_group = Views::new(views.as_mut_slice()); diff --git a/user-apps/gif/src/main.rs b/user-apps/gif/src/main.rs index 7dbdfbf..81a52d1 100644 --- a/user-apps/gif/src/main.rs +++ b/user-apps/gif/src/main.rs @@ -32,11 +32,12 @@ pub fn main() { print!("Starting Gif app"); let mut display = Display; - let mut gifs = Entries::new(); - list_dir("/gifs", &mut gifs); + let mut entries = Entries::new(); + list_dir("/gifs", &mut entries); - gifs.entries() - .retain(|e| e.extension().unwrap_or("") == "gif"); + let mut files = entries.entries(); + files.retain(|e| e.extension().unwrap_or("") == "gif"); + let gifs = &files.iter().map(|e| e.full_name()).collect::>(); let mut selection_ui = SelectionUi::new(&gifs, "No Gif files found in /gifs"); let selection = selection_ui @@ -44,9 +45,10 @@ pub fn main() { .expect("failed to draw") .expect("Failed to get user selection"); - let size = file_len(&format!("/gifs/{}.gif", gifs.entries()[selection])); + let file_name = format!("/gifs/{}", gifs[selection]); + let size = file_len(&file_name); let mut buf = vec![0_u8; size]; - let read = read_file("/gifs/bad_apple.gif", 0, &mut buf); + let read = read_file(&file_name, 0, &mut buf); print!("read: {}, file size: {}", read, size); assert!(read == size);