aboutsummaryrefslogtreecommitdiff
path: root/karlgui/src
diff options
context:
space:
mode:
authormetamuffin <yvchraiqi@protonmail.com>2022-08-17 17:49:08 +0200
committermetamuffin <yvchraiqi@protonmail.com>2022-08-17 17:49:08 +0200
commitc10e88e42b26637e3c48ed781ced1382fb20fa26 (patch)
treec5892797fd34d36fa88edcf8eadce4ae29441b07 /karlgui/src
parent9856b281b429fa3ba13b64f6c6cd99b3d05d1a2f (diff)
downloadkarlender-c10e88e42b26637e3c48ed781ced1382fb20fa26.tar
karlender-c10e88e42b26637e3c48ed781ced1382fb20fa26.tar.bz2
karlender-c10e88e42b26637e3c48ed781ced1382fb20fa26.tar.zst
Revert "modularize interfaces"
This reverts commit 9856b281b429fa3ba13b64f6c6cd99b3d05d1a2f.
Diffstat (limited to 'karlgui/src')
-rw-r--r--karlgui/src/views/calendar.rs168
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);
+ // }
+ // });
+ // }
+ // });
+ // }
+ // })
+ // }
+ // })
}
}