start adding Week view
Signed-off-by: Fabrizio Iannetti <fabrizio.iannetti@gmail.com>
This commit is contained in:
parent
80a05b0b04
commit
75a019db80
11
src/main.rs
11
src/main.rs
@ -67,6 +67,8 @@ struct CalendarApp {
|
|||||||
|
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
enum Message {
|
enum Message {
|
||||||
|
NextWeek,
|
||||||
|
PrevWeek,
|
||||||
NextMonth,
|
NextMonth,
|
||||||
PrevMonth,
|
PrevMonth,
|
||||||
NextYear,
|
NextYear,
|
||||||
@ -93,6 +95,7 @@ impl std::fmt::Display for ViewMode {
|
|||||||
f,
|
f,
|
||||||
"{}",
|
"{}",
|
||||||
match self {
|
match self {
|
||||||
|
ViewMode::Week => "Week",
|
||||||
ViewMode::Month => "Month",
|
ViewMode::Month => "Month",
|
||||||
ViewMode::Year => "Year",
|
ViewMode::Year => "Year",
|
||||||
}
|
}
|
||||||
@ -101,7 +104,7 @@ impl std::fmt::Display for ViewMode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Controls {
|
impl Controls {
|
||||||
const MODES : [ViewMode; 2] = [ViewMode::Month, ViewMode::Year];
|
const MODES : [ViewMode; 3] = [ViewMode::Week, ViewMode::Month, ViewMode::Year];
|
||||||
|
|
||||||
fn view<'a>(&'a self, month_name: &'a str, year: i32) -> Element<Message> {
|
fn view<'a>(&'a self, month_name: &'a str, year: i32) -> Element<Message> {
|
||||||
let description = match self.mode {
|
let description = match self.mode {
|
||||||
@ -184,6 +187,12 @@ impl Application for CalendarApp {
|
|||||||
|
|
||||||
fn update(&mut self, message: Message) -> Command<Message> {
|
fn update(&mut self, message: Message) -> Command<Message> {
|
||||||
match message {
|
match message {
|
||||||
|
Message::PrevWeek => {
|
||||||
|
self.month = self.month; // TODO
|
||||||
|
}
|
||||||
|
Message::NextWeek => {
|
||||||
|
self.month = self.month; // TODO
|
||||||
|
}
|
||||||
Message::PrevMonth => {
|
Message::PrevMonth => {
|
||||||
self.month = self.month - Months::new(1);
|
self.month = self.month - Months::new(1);
|
||||||
}
|
}
|
||||||
|
@ -275,6 +275,7 @@ where
|
|||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
pub enum CalendarViewMode {
|
pub enum CalendarViewMode {
|
||||||
|
Week,
|
||||||
Month,
|
Month,
|
||||||
Year,
|
Year,
|
||||||
}
|
}
|
||||||
@ -292,9 +293,10 @@ pub struct CalendarView<'a> {
|
|||||||
impl<'a> CalendarView<'a> {
|
impl<'a> CalendarView<'a> {
|
||||||
pub fn new(mode: CalendarViewMode, params: &CalendarParams, day: NaiveDate, events: &'a EventsCollection) -> Self {
|
pub fn new(mode: CalendarViewMode, params: &CalendarParams, day: NaiveDate, events: &'a EventsCollection) -> Self {
|
||||||
let first_day = match mode {
|
let first_day = match mode {
|
||||||
CalendarViewMode::Month => day.with_day0(0),
|
CalendarViewMode::Week => day.week(chrono::Weekday::Mon).first_day(),
|
||||||
CalendarViewMode::Year => day.with_month0(0).unwrap().with_day0(0)
|
CalendarViewMode::Month => day.with_day0(0).unwrap(),
|
||||||
}.unwrap();
|
CalendarViewMode::Year => day.with_month0(0).unwrap().with_day0(0).unwrap()
|
||||||
|
};
|
||||||
CalendarView {
|
CalendarView {
|
||||||
first_day,
|
first_day,
|
||||||
params: params.clone(),
|
params: params.clone(),
|
||||||
@ -308,6 +310,7 @@ impl<'a> CalendarView<'a> {
|
|||||||
|
|
||||||
fn get_days_per_row(&self) -> u32 {
|
fn get_days_per_row(&self) -> u32 {
|
||||||
match self.mode {
|
match self.mode {
|
||||||
|
CalendarViewMode::Week => 7, // one week -> 7 days
|
||||||
CalendarViewMode::Month => 7, // one week per row -> 7 days
|
CalendarViewMode::Month => 7, // one week per row -> 7 days
|
||||||
CalendarViewMode::Year => YEAR_VIEW_DAYS_PER_ROW, // one month per row, aligned by weekday
|
CalendarViewMode::Year => YEAR_VIEW_DAYS_PER_ROW, // one month per row, aligned by weekday
|
||||||
}
|
}
|
||||||
@ -315,6 +318,7 @@ impl<'a> CalendarView<'a> {
|
|||||||
|
|
||||||
fn get_row_count(&self) -> u32 {
|
fn get_row_count(&self) -> u32 {
|
||||||
match self.mode {
|
match self.mode {
|
||||||
|
CalendarViewMode::Week => 1, // just one week
|
||||||
CalendarViewMode::Month => 6, // one week per row -> max 6 (incomplate) in a month
|
CalendarViewMode::Month => 6, // one week per row -> max 6 (incomplate) in a month
|
||||||
CalendarViewMode::Year => 12, // one month per row
|
CalendarViewMode::Year => 12, // one month per row
|
||||||
}
|
}
|
||||||
@ -322,6 +326,7 @@ impl<'a> CalendarView<'a> {
|
|||||||
|
|
||||||
fn get_calendar_row(&self, day: NaiveDate, row: u32) -> CalendarRow {
|
fn get_calendar_row(&self, day: NaiveDate, row: u32) -> CalendarRow {
|
||||||
match self.mode {
|
match self.mode {
|
||||||
|
CalendarViewMode::Week => CalendarRow::for_week(day + Duration::weeks(row.into())),
|
||||||
CalendarViewMode::Month => CalendarRow::for_week(day + Duration::weeks(row.into())),
|
CalendarViewMode::Month => CalendarRow::for_week(day + Duration::weeks(row.into())),
|
||||||
CalendarViewMode::Year => CalendarRow::for_month(day + Months::new(row)),
|
CalendarViewMode::Year => CalendarRow::for_month(day + Months::new(row)),
|
||||||
}
|
}
|
||||||
@ -329,6 +334,7 @@ impl<'a> CalendarView<'a> {
|
|||||||
|
|
||||||
fn get_row_label(&self, cal_row: CalendarRow) -> String {
|
fn get_row_label(&self, cal_row: CalendarRow) -> String {
|
||||||
match self.mode {
|
match self.mode {
|
||||||
|
CalendarViewMode::Week => (cal_row.begin.iso_week().week()).to_string(),
|
||||||
CalendarViewMode::Month => (cal_row.begin.iso_week().week()).to_string(),
|
CalendarViewMode::Month => (cal_row.begin.iso_week().week()).to_string(),
|
||||||
CalendarViewMode::Year => MONTH_NAMES[cal_row.begin.month0() as usize].to_string(),
|
CalendarViewMode::Year => MONTH_NAMES[cal_row.begin.month0() as usize].to_string(),
|
||||||
}
|
}
|
||||||
@ -336,6 +342,7 @@ impl<'a> CalendarView<'a> {
|
|||||||
|
|
||||||
fn get_sidebar_width(&self, renderer: &mut impl text::Renderer, bounds: Size) -> f32 {
|
fn get_sidebar_width(&self, renderer: &mut impl text::Renderer, bounds: Size) -> f32 {
|
||||||
let sidebar_width = match self.mode {
|
let sidebar_width = match self.mode {
|
||||||
|
CalendarViewMode::Week => compute_week_num_width(renderer, bounds, self.margin, self.row_name_font_size.into()),
|
||||||
CalendarViewMode::Month => compute_week_num_width(renderer, bounds, self.margin, self.row_name_font_size.into()),
|
CalendarViewMode::Month => compute_week_num_width(renderer, bounds, self.margin, self.row_name_font_size.into()),
|
||||||
CalendarViewMode::Year => compute_month_name_width(renderer, bounds, self.margin, self.row_name_font_size.into()),
|
CalendarViewMode::Year => compute_month_name_width(renderer, bounds, self.margin, self.row_name_font_size.into()),
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user