use crate::{ clock_display::{ClockDisplay, DisplayPart}, clock_state::ClockState, }; use super::{DisplayView, DisplayViewError}; pub struct ClockDisplayView { show_seconds: bool, show_date: bool, } impl Default for ClockDisplayView { fn default() -> Self { Self::new() } } impl ClockDisplayView { pub fn new() -> Self { Self { show_date: false, show_seconds: false, } } pub fn with_seconds() -> Self { Self { show_date: false, show_seconds: true, } } pub fn with_date() -> Self { Self { show_date: true, show_seconds: false, } } } impl DisplayView for ClockDisplayView { fn update_display( &mut self, state: &ClockState, display: &mut ClockDisplay, ) -> Result<(), DisplayViewError> { let calendar = state.calendar(); if self.show_seconds { display.hide(DisplayPart::SideDisplay1); display.show_number(DisplayPart::SideDisplay2, calendar.seconds() as u32, true)?; } else if self.show_date { display.show_ordinal(DisplayPart::SideDisplay1, calendar.day() as u32, true)?; display.show_ordinal(DisplayPart::SideDisplay2, calendar.month() as u32, true)?; } else { display.hide(DisplayPart::SideDisplay1); display.hide(DisplayPart::SideDisplay2); } display.set_colon(calendar.seconds() % 2 == 0); display.show_number( DisplayPart::MainDisplay, (calendar.hours() as u32) * 100 + (calendar.minutes() as u32), true, )?; Ok(()) } }