diff options
author | metamuffin <yvchraiqi@protonmail.com> | 2022-08-17 17:49:08 +0200 |
---|---|---|
committer | metamuffin <yvchraiqi@protonmail.com> | 2022-08-17 17:49:08 +0200 |
commit | c10e88e42b26637e3c48ed781ced1382fb20fa26 (patch) | |
tree | c5892797fd34d36fa88edcf8eadce4ae29441b07 /karlgui | |
parent | 9856b281b429fa3ba13b64f6c6cd99b3d05d1a2f (diff) | |
download | karlender-c10e88e42b26637e3c48ed781ced1382fb20fa26.tar karlender-c10e88e42b26637e3c48ed781ced1382fb20fa26.tar.bz2 karlender-c10e88e42b26637e3c48ed781ced1382fb20fa26.tar.zst |
Revert "modularize interfaces"
This reverts commit 9856b281b429fa3ba13b64f6c6cd99b3d05d1a2f.
Diffstat (limited to 'karlgui')
-rw-r--r-- | karlgui/src/views/calendar.rs | 168 |
1 files changed, 104 insertions, 64 deletions
diff --git a/karlgui/src/views/calendar.rs b/karlgui/src/views/calendar.rs index 1e869af..a145f4a 100644 --- a/karlgui/src/views/calendar.rs +++ b/karlgui/src/views/calendar.rs @@ -1,7 +1,7 @@ use crate::{helper::weekday_to_str, Globals}; use chrono::{Datelike, Duration, NaiveDateTime, Timelike}; -use egui::{Color32, Rect, Sense, Stroke, Ui, Vec2}; -use egui_extras::{Size, TableBuilder}; +use egui::{Color32, Label, Layout, Rect, ScrollArea, Sense, Stroke, Ui, Vec2}; +use egui_extras::{Size, StripBuilder}; use std::{collections::BTreeMap, ops::Range}; #[derive(Default)] @@ -24,40 +24,21 @@ impl Calendar { let height = 1500.0; - TableBuilder::new(ui) - .column(Size::exact(50.0)) - .columns(Size::remainder(), 7) - .header(50.0, |mut tr| { - for d in 0..7 { - tr.col(|_| {}); - tr.col(|ui| { - ui.heading(weekday_to_str( - (start_dt + Duration::days(d as i64)) - .date() - .weekday() - .num_days_from_monday() - .into(), - )); - }); - } - }) - .body(|mut tb| { - tb.row(height, |mut tr| { - tr.col(|ui| { + ScrollArea::vertical().show(ui, |ui| { + StripBuilder::new(ui) + .size(Size::exact(50.0)) + .sizes(Size::remainder(), 7) + .horizontal(|mut ui| { + ui.cell(|ui| { for h in 0..24 { - let (response, p) = - ui.allocate_painter(Vec2::new(50.0, height), Sense::hover()); - p.text( - response.rect.min + Vec2::new(0.0, h as f32 / 24.0 * height), - egui::Align2::LEFT_TOP, - format!("{h:02}:00"), - egui::FontId::monospace(15.0), - Color32::from_gray(150), + ui.add_sized( + Vec2::new(50.0, height / 24.0), + Label::new(&format!("{h:02}:00")), ); } }); for d in 0..7 { - tr.col(|ui| { + ui.cell(|ui| { let time = start_dt + Duration::days(d as i64); let time_end = time + Duration::days(1) - Duration::seconds(1); let instances_here = instances @@ -71,48 +52,107 @@ impl Calendar { ) }) .filter(|(_, l)| l.len() != 0); - ui.horizontal(|ui| { - for (id, rs) in instances_here { - let task = g.tasks.get(id).unwrap(); - let (rect, response) = ui.allocate_exact_size( - Vec2::new(10.0, height), - Sense::hover(), - ); + ui.vertical(|ui| { + ui.heading(weekday_to_str( + time.date().weekday().num_days_from_monday().into(), + )); + ui.horizontal(|ui| { + for (id, rs) in instances_here { + let task = g.tasks.get(id).unwrap(); - for r in &rs { - let r = r.start.unwrap_or(time)..r.end.unwrap_or(time_end); - let rect_start = (r.start.hour() as f32 - + (r.start.minute() as f32 / 60.0)) - / 24.0 - * height; - let rect_end = (r.end.hour() as f32 - + (r.end.minute() as f32 / 60.0)) - / 24.0 - * height; - ui.painter().rect( - Rect::from_two_pos( - rect.min + Vec2::new(0.0, rect_start), - rect.min + Vec2::new(10.0, rect_end), - ), - 0.0, - Color32::KHAKI, - Stroke::new(0.0, Color32::WHITE), + let (rect, response) = ui.allocate_exact_size( + Vec2::new(10.0, height), + Sense::hover(), ); - } - response.on_hover_ui_at_pointer(|ui| { - ui.heading(&task.name); - if let Some(d) = &task.description { - ui.label(d); + for r in &rs { + let r = + r.start.unwrap_or(time)..r.end.unwrap_or(time_end); + let rect_start = (r.start.hour() as f32 + + (r.start.minute() as f32 / 60.0)) + / 24.0 + * height; + let rect_end = (r.end.hour() as f32 + + (r.end.minute() as f32 / 60.0)) + / 24.0 + * height; + ui.painter().rect( + Rect::from_two_pos( + rect.min + Vec2::new(0.0, rect_start), + rect.min + Vec2::new(10.0, rect_end), + ), + 0.0, + Color32::KHAKI, + Stroke::new(0.0, Color32::WHITE), + ); } - }); - } + + response.on_hover_ui_at_pointer(|ui| { + ui.heading(&task.name); + if let Some(d) = &task.description { + ui.label(d); + } + }); + } + }) }); + // }); + // }); }); } }); - }); + }); + + // TableBuilder::new(ui) + // .column(egui_extras::Size::exact(50.0)) + // .columns(egui_extras::Size::remainder(), 7) + // .header(25.0, |mut ui| { + // ui.col(|_| {}); + // for d in 0..7 { + // ui.col(|ui| { + // ui.heading(weekday_to_str(d)); + // }); + // } + // }) + // .body(|mut ui| { + // let mut cols: [Vec<u64>; 7] = + // [vec![], vec![], vec![], vec![], vec![], vec![], vec![]]; + // for h in 0..24 { + // ui.row(height, |mut ui| { + // ui.col(|ui| { + // 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 time_end = time + Duration::hours(1) - Duration::seconds(1); + // let instances_here = + // instances.iter().filter(|(_, r)| r.overlaps(time..time_end)); + + // ui.col(|ui| { + // for (id, _) in instances_here { + // let task = g.tasks.get(id).unwrap(); + // let (rect, response) = + // ui.allocate_at_least(Vec2::new(10.0, 50.0), Sense::hover()); + // ui.painter().rect( + // rect, + // 0.0, + // Color32::KHAKI, + // Stroke::new(0.0, Color32::WHITE), + // ); + // response.on_hover_ui_at_pointer(|ui| { + // ui.heading(&task.name); + // if let Some(d) = &task.description { + // ui.label(d); + // } + // }); + // } + // }); + // } + // }) + // } + // }) } } |