aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--karlgui/src/main.rs2
-rw-r--r--karlgui/src/views/edit.rs120
2 files changed, 87 insertions, 35 deletions
diff --git a/karlgui/src/main.rs b/karlgui/src/main.rs
index b3a6f62..e520306 100644
--- a/karlgui/src/main.rs
+++ b/karlgui/src/main.rs
@@ -52,7 +52,7 @@ impl App {
client.send(ServerboundPacket::ListTasks);
App {
- current_tab: Tab::ShowAndEdit,
+ current_tab: Tab::CalendarWeek,
g: Globals::new(client),
show_and_edit: Default::default(),
calendar: Default::default(),
diff --git a/karlgui/src/views/edit.rs b/karlgui/src/views/edit.rs
index 0a8058c..160bea3 100644
--- a/karlgui/src/views/edit.rs
+++ b/karlgui/src/views/edit.rs
@@ -1,10 +1,11 @@
use std::ops::Range;
-use egui::{Color32, DragValue, TextEdit, Ui};
+use chrono::{Datelike, NaiveDateTime, Timelike};
+use egui::{collapsing_header::CollapsingState, Color32, DragValue, TextEdit, Ui};
use karlcommon::{Condition, Property, Schedule, ServerboundPacket, Task};
use crate::{
- helper::{edit_value, format_value},
+ helper::{edit_value, format_value, from_timestamp},
Globals,
};
@@ -53,41 +54,44 @@ pub trait EditableWidget {
impl EditableWidget for Task {
fn ui(&mut self, ui: &mut Ui, edit: bool) {
- ui.heading(&self.name);
- ui.indent((), |ui| {
- if let Some(d) = &mut self.description {
- if edit {
- ui.text_edit_singleline(d);
- } else {
- ui.label(&*d);
+ CollapsingState::load_with_default_open(ui.ctx(), egui::Id::new(self.id), false)
+ .show_header(ui, |ui| {
+ ui.heading(&self.name);
+ })
+ .body(|ui| {
+ if let Some(d) = &mut self.description {
+ if edit {
+ ui.text_edit_singleline(d);
+ } else {
+ ui.label(&*d);
+ }
}
- }
- if self.tags.len() != 0 || edit {
- ui.horizontal(|ui| {
- ui.label("Tags:");
- let mut remove = None;
- for (i, t) in self.tags.iter_mut().enumerate() {
+ if self.tags.len() != 0 || edit {
+ ui.horizontal(|ui| {
+ ui.label("Tags:");
+ let mut remove = None;
+ for (i, t) in self.tags.iter_mut().enumerate() {
+ if edit {
+ TextEdit::singleline(t).desired_width(50.0).show(ui);
+ if ui.button("🗑").clicked() {
+ remove = Some(i);
+ }
+ } else {
+ ui.colored_label(Color32::LIGHT_GREEN, t);
+ }
+ }
if edit {
- TextEdit::singleline(t).desired_width(50.0).show(ui);
- if ui.button("🗑").clicked() {
- remove = Some(i);
+ if ui.button("âž•").clicked() {
+ self.tags.push(String::from("blub"))
}
- } else {
- ui.colored_label(Color32::LIGHT_GREEN, t);
}
- }
- if edit {
- if ui.button("âž•").clicked() {
- self.tags.push(String::from("blub"))
+ if let Some(remove) = remove {
+ self.tags.remove(remove);
}
- }
- if let Some(remove) = remove {
- self.tags.remove(remove);
- }
- });
- }
- self.schedule.ui(ui, edit);
- });
+ });
+ }
+ self.schedule.ui(ui, edit);
+ });
}
}
@@ -232,8 +236,56 @@ impl EditableWidget for Condition {
}
impl EditableWidget for Range<i64> {
- fn ui(&mut self, ui: &mut Ui, _edit: bool) {
- ui.label("todo");
+ fn ui(&mut self, ui: &mut Ui, edit: bool) {
+ let mut td = from_timestamp(self.start)..from_timestamp(self.end);
+ td.ui(ui, edit);
+ *self = td.start.timestamp()..td.end.timestamp();
+ }
+}
+
+impl EditableWidget for Range<NaiveDateTime> {
+ fn ui(&mut self, ui: &mut Ui, edit: bool) {
+ ui.horizontal(|ui| {
+ ui.label("from");
+ self.start.ui(ui, edit);
+ ui.label("to");
+ self.end.ui(ui, edit);
+ });
+ }
+}
+impl EditableWidget for NaiveDateTime {
+ fn ui(&mut self, ui: &mut Ui, edit: bool) {
+ ui.label(&format!("{}", self));
+ if edit {
+ let (mut y, mut m, mut d) = (self.year(), self.month(), self.day());
+ let (mut h, mut min, mut s) = (self.hour(), self.minute(), self.second());
+ ui.horizontal(|ui| {
+ ui.add(DragValue::new(&mut y));
+ ui.label("-");
+ ui.add(DragValue::new(&mut m).clamp_range(1..=12));
+ ui.label("-");
+ ui.add(DragValue::new(&mut d).clamp_range(1..=31)); // TODO maybe 30, 28 or even 29
+ ui.label(" | ");
+ ui.add(DragValue::new(&mut h).clamp_range(0..=23));
+ ui.label(":");
+ ui.add(DragValue::new(&mut min).clamp_range(0..=59));
+ ui.label(":");
+ ui.add(DragValue::new(&mut s).clamp_range(0..=59));
+ });
+ *self = self
+ .with_year(y)
+ .unwrap_or_default()
+ .with_month(m)
+ .unwrap_or_default()
+ .with_day(d)
+ .unwrap_or_default()
+ .with_hour(h)
+ .unwrap_or_default()
+ .with_minute(min)
+ .unwrap_or_default()
+ .with_second(s)
+ .unwrap_or_default();
+ }
}
}