diff options
-rw-r--r-- | Cargo.lock | 1 | ||||
-rw-r--r-- | karlcommon/src/misc.rs | 14 | ||||
-rw-r--r-- | karlgui/Cargo.toml | 1 | ||||
-rw-r--r-- | karlgui/src/views/edit.rs | 40 |
4 files changed, 54 insertions, 2 deletions
@@ -963,6 +963,7 @@ dependencies = [ "env_logger", "karlcommon", "log", + "rand", "serde_json", ] diff --git a/karlcommon/src/misc.rs b/karlcommon/src/misc.rs index 583ed27..4d181ba 100644 --- a/karlcommon/src/misc.rs +++ b/karlcommon/src/misc.rs @@ -1,4 +1,4 @@ -use crate::Property; +use crate::{Property, Task}; impl Property { pub const VALUES: &'static [Property] = &[ @@ -28,3 +28,15 @@ impl Property { } } } + +impl Task { + pub fn default_with_id(id: u64) -> Self { + Self { + id, + name: Default::default(), + description: Default::default(), + tags: Default::default(), + schedule: crate::Schedule::Never, + } + } +} diff --git a/karlgui/Cargo.toml b/karlgui/Cargo.toml index caf0777..824fbdb 100644 --- a/karlgui/Cargo.toml +++ b/karlgui/Cargo.toml @@ -9,6 +9,7 @@ karlcommon = { path = "../karlcommon" } crossbeam-channel = "0.5.6" serde_json = "1.0.83" chrono = "0.4.22" +rand = "0.8.5" env_logger = "0.9.0" log = "0.4.17" diff --git a/karlgui/src/views/edit.rs b/karlgui/src/views/edit.rs index 160bea3..6162df1 100644 --- a/karlgui/src/views/edit.rs +++ b/karlgui/src/views/edit.rs @@ -45,6 +45,11 @@ impl ShowAndEdit { t.ui(ui, edit); ui.separator(); } + if ui.button("➕ Add task").clicked() { + let id = rand::random::<u64>(); + g.tasks.insert(id, Task::default_with_id(id)); + self.edit = Some(id); + } } } @@ -56,7 +61,11 @@ impl EditableWidget for Task { fn ui(&mut self, ui: &mut Ui, edit: bool) { CollapsingState::load_with_default_open(ui.ctx(), egui::Id::new(self.id), false) .show_header(ui, |ui| { - ui.heading(&self.name); + if edit { + ui.text_edit_singleline(&mut self.name); + } else { + ui.heading(&self.name); + } }) .body(|ui| { if let Some(d) = &mut self.description { @@ -65,6 +74,10 @@ impl EditableWidget for Task { } else { ui.label(&*d); } + } else if edit { + if ui.button("Add description").clicked() { + self.description = Some(String::new()) + } } if self.tags.len() != 0 || edit { ui.horizontal(|ui| { @@ -97,6 +110,31 @@ impl EditableWidget for Task { impl EditableWidget for Schedule { fn ui(&mut self, ui: &mut Ui, edit: bool) { + if edit { + ui.menu_button("✏ Change schedule kind", |ui| { + if ui.button("Never").clicked() { + *self = Schedule::Never; + ui.close_menu(); + } + if ui.button("Condition").clicked() { + *self = Schedule::Condition(Condition::Never); + ui.close_menu(); + } + if ui.button("Dynamic").clicked() { + *self = Schedule::Dynamic { + priority: 0.0, + scheduled: None, + duration: 60, + condition: Condition::Never, + }; + ui.close_menu(); + } + if ui.button("Static").clicked() { + *self = Schedule::Static(0..0); + ui.close_menu(); + } + }); + } match self { Schedule::Never => { ui.label("No schedule"); |