diff options
author | metamuffin <yvchraiqi@protonmail.com> | 2022-08-17 10:54:02 +0200 |
---|---|---|
committer | metamuffin <yvchraiqi@protonmail.com> | 2022-08-17 10:54:02 +0200 |
commit | cfc5fd51582d694b98ff69a680d0ad727354c8c3 (patch) | |
tree | ded58259b8eb3f8b25cc543a6c28883809a72127 /karlgui/src/views/calendar.rs | |
parent | 5e6509163df53788799bb7aa97d07a90bf416eb7 (diff) | |
download | karlender-cfc5fd51582d694b98ff69a680d0ad727354c8c3.tar karlender-cfc5fd51582d694b98ff69a680d0ad727354c8c3.tar.bz2 karlender-cfc5fd51582d694b98ff69a680d0ad727354c8c3.tar.zst |
idk
Diffstat (limited to 'karlgui/src/views/calendar.rs')
-rw-r--r-- | karlgui/src/views/calendar.rs | 68 |
1 files changed, 57 insertions, 11 deletions
diff --git a/karlgui/src/views/calendar.rs b/karlgui/src/views/calendar.rs index b216504..c332b80 100644 --- a/karlgui/src/views/calendar.rs +++ b/karlgui/src/views/calendar.rs @@ -1,12 +1,32 @@ +use std::ops::Range; + use crate::{helper::weekday_to_str, Globals}; +use chrono::{Duration, NaiveDateTime}; use egui::Ui; use egui_extras::TableBuilder; #[derive(Default)] -pub struct Calendar; +pub struct Calendar { + // offset: NaiveDate, +} impl Calendar { - pub fn ui(&mut self, ui: &mut Ui, _g: &mut Globals) { + pub fn ui(&mut self, ui: &mut Ui, g: &mut Globals) { + let start_date = chrono::Utc::now().date_naive(); //self.offset; + let end_date = start_date + chrono::Duration::days(7); + let start_dt = start_date.and_hms(0, 0, 0); + let end_dt = end_date.and_hms(0, 0, 0); + + let instances = if let Some(instances) = g.get_all_instances_range(start_dt, end_dt) { + instances + } else { + ui.horizontal(|ui| { + ui.spinner(); + ui.label("Loading…"); + }); + return; + }; + TableBuilder::new(ui) .column(egui_extras::Size::exact(50.0)) .columns(egui_extras::Size::remainder(), 7) @@ -18,17 +38,43 @@ impl Calendar { }); } }) - .body(|ui| { - ui.rows(50.0, 24, |h, mut ui| { - ui.col(|ui| { - ui.heading(&format!("{h:02}:00")); - }); - for d in 0..7 { + .body(|mut ui| { + let mut cols: [Vec<u64>; 7] = + [vec![], vec![], vec![], vec![], vec![], vec![], vec![]]; + for h in 0..24 { + ui.row(50.0, |mut ui| { ui.col(|ui| { - ui.label(&format!("day {d} at {h}:00")); + ui.heading(&format!("{h:02}:00")); }); - } - }) + for d in 0..7 { + let _col = &mut cols[d]; + let time = start_dt + Duration::days(d as i64) + Duration::hours(h); + let instances_here = + instances.iter().filter(|(_, r)| r.includes(&time)); + + ui.col(|ui| { + for (id, _) in instances_here { + g.tasks.get(id).unwrap(); + ui.label(&format!("{id}")); + } + }); + } + }) + } }) } } + +trait Includes<T> { + fn includes(&self, p: &T) -> bool; +} +impl Includes<NaiveDateTime> for Range<Option<NaiveDateTime>> { + fn includes(&self, p: &NaiveDateTime) -> bool { + match (&self.start, &self.end) { + (None, None) => false, + (None, Some(e)) => p < e, + (Some(s), None) => s <= p, + (Some(s), Some(e)) => s <= p && p < e, + } + } +} |