use super::{Channel, Event, Screens, Setup}; use crate::{lcd::Lcd, screen::ClockChannel, Input}; enum Selection { Ch1, Ch2, Ch3, Setup, } pub struct Home { active: Selection, } impl Home { pub fn new() -> Self { Self { active: Selection::Ch1, } } pub fn input(&mut self, input: &Input, channels: [ClockChannel; 3]) -> Event { self.active = match self.active { Selection::Ch1 => match input { Input::Next => Selection::Ch2, Input::Previous => Selection::Setup, Input::Select => return Event::Screen(Screens::Channel(Channel::new(channels[0]))), Input::Back => Selection::Ch1, }, Selection::Ch2 => match input { Input::Next => Selection::Ch3, Input::Previous => Selection::Ch1, Input::Select => return Event::Screen(Screens::Channel(Channel::new(channels[1]))), Input::Back => Selection::Ch2, }, Selection::Ch3 => match input { Input::Next => Selection::Setup, Input::Previous => Selection::Ch2, Input::Select => return Event::Screen(Screens::Channel(Channel::new(channels[2]))), Input::Back => Selection::Ch3, }, Selection::Setup => match input { Input::Next => Selection::Ch1, Input::Previous => Selection::Ch3, Input::Select => return Event::Screen(Screens::Setup(Setup::new())), Input::Back => Selection::Setup, }, }; Event::None } pub fn draw(&self, lcd: &mut Lcd, channels: [ClockChannel; 3]) { match &self.active { Selection::Ch1 => { lcd.print(0, 0, true, "CH1"); channels[0].print(lcd, 0); lcd.print(0, 2, false, "CH2"); channels[1].print(lcd, 2); lcd.print(0, 4, false, "CH3"); channels[2].print(lcd, 4); lcd.print(33, 6, false, "SETUP"); } Selection::Ch2 => { lcd.print(0, 0, false, "CH1"); channels[0].print(lcd, 0); lcd.print(0, 2, true, "CH2"); channels[1].print(lcd, 2); lcd.print(0, 4, false, "CH3"); channels[2].print(lcd, 4); lcd.print(33, 6, false, "SETUP"); } Selection::Ch3 => { lcd.print(0, 0, false, "CH1"); channels[0].print(lcd, 0); lcd.print(0, 2, false, "CH2"); channels[1].print(lcd, 2); lcd.print(0, 4, true, "CH3"); channels[2].print(lcd, 4); lcd.print(33, 6, false, "SETUP"); } Selection::Setup => { lcd.print(0, 0, false, "CH1"); channels[0].print(lcd, 0); lcd.print(0, 2, false, "CH2"); channels[1].print(lcd, 2); lcd.print(0, 4, false, "CH3"); channels[2].print(lcd, 4); lcd.print(33, 6, true, "SETUP"); } } } }