use super::types::{PresetRange, RangeFocus};
use crate::style::Color;
use crate::widget::data::calendar::{Date, FirstDayOfWeek};
use crate::widget::datetime_picker::{DateTime, Time};
use crate::widget::traits::{WidgetProps, WidgetState};
pub struct RangePicker {
pub(crate) start: DateTime,
pub(crate) end: DateTime,
pub(crate) active_preset: Option<PresetRange>,
pub(crate) presets: Vec<PresetRange>,
pub(crate) preset_cursor: usize,
pub(crate) focus: RangeFocus,
pub(crate) first_day: FirstDayOfWeek,
pub(crate) show_time: bool,
pub(crate) start_cursor_day: u32,
pub(crate) end_cursor_day: u32,
pub(crate) min_date: Option<Date>,
pub(crate) max_date: Option<Date>,
pub(crate) show_presets: bool,
pub(crate) header_fg: Color,
pub(crate) selected_fg: Color,
pub(crate) selected_bg: Color,
pub(crate) range_bg: Color,
pub(crate) preset_fg: Color,
pub(crate) preset_selected_fg: Color,
pub(crate) preset_selected_bg: Color,
pub state: WidgetState,
pub props: WidgetProps,
}
impl RangePicker {
pub fn new() -> Self {
let today = Date::today();
Self {
start: DateTime::new(today, Time::new(0, 0, 0)),
end: DateTime::new(today, Time::new(23, 59, 59)),
active_preset: Some(PresetRange::Today),
presets: PresetRange::common().to_vec(),
preset_cursor: 0,
focus: RangeFocus::Start,
first_day: FirstDayOfWeek::Sunday,
show_time: false,
start_cursor_day: today.day,
end_cursor_day: today.day,
min_date: None,
max_date: None,
show_presets: true,
header_fg: Color::CYAN,
selected_fg: Color::BLACK,
selected_bg: Color::CYAN,
range_bg: Color::rgb(60, 100, 140),
preset_fg: Color::WHITE,
preset_selected_fg: Color::BLACK,
preset_selected_bg: Color::CYAN,
state: WidgetState::new(),
props: WidgetProps::new(),
}
}
}
impl Default for RangePicker {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
}