aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-08-19 22:07:47 +0200
committermetamuffin <metamuffin@disroot.org>2022-08-19 22:07:47 +0200
commitac66248bb20d45a66cc0c3b3805498e9d6ba9bb8 (patch)
treefbe83966e9ad8cef4270a4438b7021be9c079fcd
parentfd5294bf2775330a48e8f049395b17498b9264b3 (diff)
downloadkarlender-ac66248bb20d45a66cc0c3b3805498e9d6ba9bb8.tar
karlender-ac66248bb20d45a66cc0c3b3805498e9d6ba9bb8.tar.bz2
karlender-ac66248bb20d45a66cc0c3b3805498e9d6ba9bb8.tar.zst
more task editing ui
-rw-r--r--Cargo.lock1
-rw-r--r--karlcommon/src/misc.rs14
-rw-r--r--karlgui/Cargo.toml1
-rw-r--r--karlgui/src/views/edit.rs40
4 files changed, 54 insertions, 2 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 4f40859..fe089db 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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");