diff --git a/demo/local-time.gif b/demo/local-time.gif index f796b8b..d7cb219 100644 Binary files a/demo/local-time.gif and b/demo/local-time.gif differ diff --git a/src/common.rs b/src/common.rs index 5da1562..a65e720 100644 --- a/src/common.rs +++ b/src/common.rs @@ -135,6 +135,17 @@ impl AppTime { .unwrap_or_else(|e| e.to_string()) } + pub fn format_date(&self) -> String { + format_description::parse("[year]-[month]-[day]") + .map_err(|_| "parse error") + .and_then(|fd| { + OffsetDateTime::from(*self) + .format(&fd) + .map_err(|_| "format error") + }) + .unwrap_or_else(|e| e.to_string()) + } + pub fn get_period(&self) -> String { format_description::parse("[period]") .map_err(|_| "parse error") diff --git a/src/widgets/local_time.rs b/src/widgets/local_time.rs index 633f1a6..2350838 100644 --- a/src/widgets/local_time.rs +++ b/src/widgets/local_time.rs @@ -115,6 +115,8 @@ impl StatefulWidget for LocalTimeWidget { let symbol = self.style.get_digit_symbol(); let label = Line::raw("Local Time".to_uppercase()); + let label_date = Line::raw(state.time.format_date().to_uppercase()); + let mut content_width = max(label.width(), label_date.width()) as u16; let format = state.format; let widths = self.get_horizontal_lengths(&format); @@ -127,14 +129,21 @@ impl StatefulWidget for LocalTimeWidget { widths[2] = 0; // `space` } - let width = widths.iter().sum(); + content_width = max(widths.iter().sum(), content_width); + let v_heights = [ + 1, // empty (offset) to keep everything centered vertically comparing to "clock" widgets with one label only + DIGIT_HEIGHT, // local time + 1, // label + 1, // date + ]; + let area = center( area, - Constraint::Length(max(width, label.width() as u16)), - Constraint::Length(DIGIT_HEIGHT + 1 /* height of label */), + Constraint::Length(content_width), + Constraint::Length(v_heights.iter().sum()), ); - let [v1, v2] = Layout::vertical(Constraint::from_lengths([DIGIT_HEIGHT, 1])).areas(area); + let [_, v1, v2, v3] = Layout::vertical(Constraint::from_lengths(v_heights)).areas(area); match state.format { AppTimeFormat::HhMmSs => { @@ -181,5 +190,6 @@ impl StatefulWidget for LocalTimeWidget { } } label.centered().render(v2, buf); + label_date.centered().render(v3, buf); } }