Edit countdown by local time (#49)
This commit is contained in:
@@ -11,20 +11,13 @@ use ratatui::{
|
||||
|
||||
use crate::{
|
||||
common::Style,
|
||||
duration::{
|
||||
DurationEx, MINS_PER_HOUR, ONE_DECI_SECOND, ONE_HOUR, ONE_MINUTE, ONE_SECOND,
|
||||
SECS_PER_MINUTE,
|
||||
},
|
||||
duration::{DurationEx, MAX_DURATION, ONE_DECI_SECOND, ONE_HOUR, ONE_MINUTE, ONE_SECOND},
|
||||
utils::center_horizontal,
|
||||
widgets::clock_elements::{
|
||||
Colon, Digit, Dot, COLON_WIDTH, DIGIT_HEIGHT, DIGIT_WIDTH, DOT_WIDTH,
|
||||
Colon, Digit, Dot, COLON_WIDTH, DIGIT_HEIGHT, DIGIT_SPACE_WIDTH, DIGIT_WIDTH, DOT_WIDTH,
|
||||
},
|
||||
};
|
||||
|
||||
// max. 99:59:59
|
||||
const MAX_DURATION: Duration =
|
||||
Duration::from_secs(100 * MINS_PER_HOUR * SECS_PER_MINUTE).saturating_sub(ONE_SECOND);
|
||||
|
||||
#[derive(Debug, Copy, Clone, Display, PartialEq, Eq)]
|
||||
pub enum Time {
|
||||
Decis,
|
||||
@@ -128,6 +121,11 @@ impl<T> ClockState<T> {
|
||||
&self.current_value
|
||||
}
|
||||
|
||||
pub fn set_current_value(&mut self, duration: DurationEx) {
|
||||
self.current_value = duration;
|
||||
self.update_format();
|
||||
}
|
||||
|
||||
pub fn toggle_edit(&mut self) {
|
||||
self.mode = match self.mode.clone() {
|
||||
Mode::Editable(_, prev) => {
|
||||
@@ -463,8 +461,6 @@ impl ClockState<Timer> {
|
||||
}
|
||||
}
|
||||
|
||||
const SPACE_WIDTH: u16 = 1;
|
||||
|
||||
pub struct ClockWidget<T>
|
||||
where
|
||||
T: std::fmt::Debug,
|
||||
@@ -498,61 +494,61 @@ where
|
||||
match format {
|
||||
Format::HhMmSs => add_decis(
|
||||
vec![
|
||||
DIGIT_WIDTH, // h
|
||||
SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // h
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // m
|
||||
SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // m
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // s
|
||||
SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // s
|
||||
DIGIT_WIDTH, // h
|
||||
DIGIT_SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // h
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // m
|
||||
DIGIT_SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // m
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // s
|
||||
DIGIT_SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // s
|
||||
],
|
||||
with_decis,
|
||||
),
|
||||
Format::HMmSs => add_decis(
|
||||
vec![
|
||||
DIGIT_WIDTH, // h
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // m
|
||||
SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // m
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // s
|
||||
SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // s
|
||||
DIGIT_WIDTH, // h
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // m
|
||||
DIGIT_SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // m
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // s
|
||||
DIGIT_SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // s
|
||||
],
|
||||
with_decis,
|
||||
),
|
||||
Format::MmSs => add_decis(
|
||||
vec![
|
||||
DIGIT_WIDTH, // m
|
||||
SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // m
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // s
|
||||
SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // s
|
||||
DIGIT_WIDTH, // m
|
||||
DIGIT_SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // m
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // s
|
||||
DIGIT_SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // s
|
||||
],
|
||||
with_decis,
|
||||
),
|
||||
Format::MSs => add_decis(
|
||||
vec![
|
||||
DIGIT_WIDTH, // m
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // s
|
||||
SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // s
|
||||
DIGIT_WIDTH, // m
|
||||
COLON_WIDTH, // :
|
||||
DIGIT_WIDTH, // s
|
||||
DIGIT_SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // s
|
||||
],
|
||||
with_decis,
|
||||
),
|
||||
Format::Ss => add_decis(
|
||||
vec![
|
||||
DIGIT_WIDTH, // s
|
||||
SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // s
|
||||
DIGIT_WIDTH, // s
|
||||
DIGIT_SPACE_WIDTH, // (space)
|
||||
DIGIT_WIDTH, // s
|
||||
],
|
||||
with_decis,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user