2022-04-02 18:38:46 +02:00
|
|
|
use super::{Channel, Event, Screens, Setup};
|
|
|
|
use crate::{lcd::Lcd, screen::ClockChannel, Input};
|
2022-03-17 12:03:22 +01:00
|
|
|
|
|
|
|
enum Selection {
|
|
|
|
Ch1,
|
|
|
|
Ch2,
|
|
|
|
Ch3,
|
|
|
|
Setup,
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct Home {
|
|
|
|
active: Selection,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Home {
|
|
|
|
pub fn new() -> Self {
|
|
|
|
Self {
|
|
|
|
active: Selection::Ch1,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-02 18:38:46 +02:00
|
|
|
pub fn input(&mut self, input: &Input, channels: [ClockChannel; 3]) -> Event {
|
2022-03-30 19:29:32 +02:00
|
|
|
self.active = match self.active {
|
|
|
|
Selection::Ch1 => match input {
|
|
|
|
Input::Next => Selection::Ch2,
|
|
|
|
Input::Previous => Selection::Setup,
|
2022-04-02 18:38:46 +02:00
|
|
|
Input::Select => return Event::Screen(Screens::Channel(Channel::new(channels[0]))),
|
2022-03-30 19:29:32 +02:00
|
|
|
Input::Back => Selection::Ch1,
|
2022-03-17 12:03:22 +01:00
|
|
|
},
|
2022-03-30 19:29:32 +02:00
|
|
|
Selection::Ch2 => match input {
|
|
|
|
Input::Next => Selection::Ch3,
|
|
|
|
Input::Previous => Selection::Ch1,
|
2022-04-02 18:38:46 +02:00
|
|
|
Input::Select => return Event::Screen(Screens::Channel(Channel::new(channels[1]))),
|
2022-03-30 19:29:32 +02:00
|
|
|
Input::Back => Selection::Ch2,
|
|
|
|
},
|
|
|
|
Selection::Ch3 => match input {
|
|
|
|
Input::Next => Selection::Setup,
|
|
|
|
Input::Previous => Selection::Ch2,
|
2022-04-02 18:38:46 +02:00
|
|
|
Input::Select => return Event::Screen(Screens::Channel(Channel::new(channels[2]))),
|
2022-03-30 19:29:32 +02:00
|
|
|
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
|
2022-03-17 12:03:22 +01:00
|
|
|
}
|
|
|
|
|
2022-04-02 18:38:46 +02:00
|
|
|
pub fn draw(&self, lcd: &mut Lcd, channels: [ClockChannel; 3]) {
|
2022-03-17 12:03:22 +01:00
|
|
|
match &self.active {
|
|
|
|
Selection::Ch1 => {
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 0, true, "CH1");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[0].print(lcd, 0);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 2, false, "CH2");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[1].print(lcd, 2);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 4, false, "CH3");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[2].print(lcd, 4);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(33, 6, false, "SETUP");
|
2022-03-17 12:03:22 +01:00
|
|
|
}
|
|
|
|
Selection::Ch2 => {
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 0, false, "CH1");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[0].print(lcd, 0);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 2, true, "CH2");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[1].print(lcd, 2);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 4, false, "CH3");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[2].print(lcd, 4);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(33, 6, false, "SETUP");
|
2022-03-17 12:03:22 +01:00
|
|
|
}
|
|
|
|
Selection::Ch3 => {
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 0, false, "CH1");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[0].print(lcd, 0);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 2, false, "CH2");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[1].print(lcd, 2);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 4, true, "CH3");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[2].print(lcd, 4);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(33, 6, false, "SETUP");
|
2022-03-17 12:03:22 +01:00
|
|
|
}
|
|
|
|
Selection::Setup => {
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 0, false, "CH1");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[0].print(lcd, 0);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 2, false, "CH2");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[1].print(lcd, 2);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(0, 4, false, "CH3");
|
2022-04-02 18:38:46 +02:00
|
|
|
channels[2].print(lcd, 4);
|
2022-04-10 18:09:35 +02:00
|
|
|
lcd.print(33, 6, true, "SETUP");
|
2022-03-17 12:03:22 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|