aboutsummaryrefslogtreecommitdiff
path: root/karlgui/src/views/calendar.rs
diff options
context:
space:
mode:
authormetamuffin <yvchraiqi@protonmail.com>2022-08-17 17:49:31 +0200
committermetamuffin <yvchraiqi@protonmail.com>2022-08-17 17:49:31 +0200
commitc0f90386900f0f767c7d0569e0f758d305af3d09 (patch)
treedc576c31200c1059d658915688cca1fd03ef9424 /karlgui/src/views/calendar.rs
parentc10e88e42b26637e3c48ed781ced1382fb20fa26 (diff)
downloadkarlender-c0f90386900f0f767c7d0569e0f758d305af3d09.tar
karlender-c0f90386900f0f767c7d0569e0f758d305af3d09.tar.bz2
karlender-c0f90386900f0f767c7d0569e0f758d305af3d09.tar.zst
Revert "Revert "modularize interfaces""
This reverts commit c10e88e42b26637e3c48ed781ced1382fb20fa26.
Diffstat (limited to 'karlgui/src/views/calendar.rs')
-rw-r--r--karlgui/src/views/calendar.rs168
1 files changed, 64 insertions, 104 deletions
diff --git a/karlgui/src/views/calendar.rs b/karlgui/src/views/calendar.rs
index a145f4a..1e869af 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, Label, Layout, Rect, ScrollArea, Sense, Stroke, Ui, Vec2};
-use egui_extras::{Size, StripBuilder};
+use egui::{Color32, Rect, Sense, Stroke, Ui, Vec2};
+use egui_extras::{Size, TableBuilder};
use std::{collections::BTreeMap, ops::Range};
#[derive(Default)]
@@ -24,21 +24,40 @@ impl Calendar {
let height = 1500.0;
- ScrollArea::vertical().show(ui, |ui| {
- StripBuilder::new(ui)
- .size(Size::exact(50.0))
- .sizes(Size::remainder(), 7)
- .horizontal(|mut ui| {
- ui.cell(|ui| {
+ 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| {
for h in 0..24 {
- ui.add_sized(
- Vec2::new(50.0, height / 24.0),
- Label::new(&format!("{h:02}:00")),
+ 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),
);
}
});
for d in 0..7 {
- ui.cell(|ui| {
+ tr.col(|ui| {
let time = start_dt + Duration::days(d as i64);
let time_end = time + Duration::days(1) - Duration::seconds(1);
let instances_here = instances
@@ -52,107 +71,48 @@ impl Calendar {
)
})
.filter(|(_, l)| l.len() != 0);
+ ui.horizontal(|ui| {
+ for (id, rs) in instances_here {
+ let task = g.tasks.get(id).unwrap();
- 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();
+ let (rect, response) = ui.allocate_exact_size(
+ Vec2::new(10.0, height),
+ Sense::hover(),
+ );
- let (rect, response) = ui.allocate_exact_size(
- Vec2::new(10.0, height),
- Sense::hover(),
+ 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),
);
+ }
- 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);
}
-
- 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);
- // }
- // });
- // }
- // });
- // }
- // })
- // }
- // })
+ });
}
}