diff options
author | metamuffin <yvchraiqi@protonmail.com> | 2022-08-17 13:13:48 +0200 |
---|---|---|
committer | metamuffin <yvchraiqi@protonmail.com> | 2022-08-17 13:13:48 +0200 |
commit | 7ae40fbc2a87db2734c09cf57e156e97b1133706 (patch) | |
tree | 6137f3d7d8694b6a5691c6f535503273d8602cfb | |
parent | 4a7b6f929359c9da7f38d5dcb134d15af5d197a4 (diff) | |
download | karlender-7ae40fbc2a87db2734c09cf57e156e97b1133706.tar karlender-7ae40fbc2a87db2734c09cf57e156e97b1133706.tar.bz2 karlender-7ae40fbc2a87db2734c09cf57e156e97b1133706.tar.zst |
bad code
-rw-r--r-- | karlgui/src/main.rs | 2 | ||||
-rw-r--r-- | karlgui/src/views/edit.rs | 120 |
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(); + } } } |