diff --git a/src/main.rs b/src/main.rs index bdec494..1b71692 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,8 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release mod new_roll; -mod roll_view; mod roll; +mod roll_view; use eframe::egui; use new_roll::NewRollWindow; @@ -63,9 +63,8 @@ impl eframe::App for MyApp { if ui.button("Add").clicked() && self.new_roll_window.is_none() { self.new_roll_window = Some(NewRollWindow::default()); } - self.roll_views.retain_mut(|win| { - !win.draw(ctx, &mut self.state) - }); + self.roll_views + .retain_mut(|win| !win.draw(ctx, &mut self.state)); if let Some(new_roll_window) = self.new_roll_window.as_mut() { if new_roll_window.draw(ctx, &mut self.state) { self.new_roll_window = None; diff --git a/src/roll.rs b/src/roll.rs index 89135e3..2eebca3 100644 --- a/src/roll.rs +++ b/src/roll.rs @@ -1,5 +1,5 @@ use chrono::NaiveDate; -use serde::{Serialize, Deserialize}; +use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize, Clone)] pub struct Exposure { diff --git a/src/roll_view.rs b/src/roll_view.rs index 4a9bca0..a32e655 100644 --- a/src/roll_view.rs +++ b/src/roll_view.rs @@ -1,7 +1,9 @@ +use chrono::NaiveDate; use eframe::{ egui::{self, RichText, Window}, epaint::Color32, }; +use egui_datepicker::DatePicker; use itertools::Itertools; use crate::AppState; @@ -10,6 +12,14 @@ pub struct RollViewWindow { roll: usize, confirm_delete: bool, exp: u8, + editing_id: bool, + edit_id: String, + editing_name: bool, + edit_name: String, + editing_desc: bool, + edit_desc: String, + editing_date: bool, + edit_date: NaiveDate, } impl RollViewWindow { @@ -18,6 +28,14 @@ impl RollViewWindow { roll, confirm_delete: false, exp: 0, + editing_id: false, + edit_id: String::new(), + editing_name: false, + edit_name: String::new(), + editing_desc: false, + edit_desc: String::new(), + editing_date: false, + edit_date: NaiveDate::default(), } } @@ -28,9 +46,96 @@ impl RollViewWindow { .open(&mut close_unclicked); window.show(ctx, |ui| { let roll = &mut app_state.rolls[self.roll]; - ui.label(format!("Name: {}", roll.name)); - ui.label(format!("Description: {}", roll.desc)); - ui.label(format!("Date: {}", roll.date.format("%Y-%m-%d"))); + ui.horizontal(|ui| { + if self.editing_id { + let label = ui.label("ID: "); + ui.text_edit_singleline(&mut self.edit_id) + .labelled_by(label.id); + if ui.button("Done").clicked() { + roll.id = self.edit_id.clone(); + self.editing_id = false; + } + if ui.button("Cancel").clicked() { + self.editing_id = false; + } + } else { + ui.label(format!("ID: {}", roll.id)); + if ui.button("Edit").clicked() { + self.editing_id = true; + self.edit_id = roll.id.clone(); + } + } + }); + ui.horizontal(|ui| { + if self.editing_name { + let label = ui.label("Name: "); + ui.text_edit_singleline(&mut self.edit_name) + .labelled_by(label.id); + if ui.button("Done").clicked() { + roll.name = self.edit_name.clone(); + self.editing_name = false; + } + if ui.button("Cancel").clicked() { + self.editing_name = false; + } + } else { + ui.label(format!("Name: {}", roll.name)); + if ui.button("Edit").clicked() { + self.editing_name = true; + self.edit_name = roll.name.clone(); + } + } + }); + if self.editing_desc { + let label = ui.horizontal(|ui| { + let label = ui.label("Description: "); + if ui.button("Done").clicked() { + roll.desc = self.edit_desc.clone(); + self.editing_desc = false; + } + if ui.button("Cancel").clicked() { + self.editing_desc = false; + } + label + }).inner; + ui.text_edit_multiline(&mut self.edit_desc) + .labelled_by(label.id); + } else { + ui.horizontal(|ui| { + ui.label(format!("Description: {}", roll.desc)); + if ui.button("Edit").clicked() { + self.editing_desc = true; + self.edit_desc = roll.desc.clone(); + } + }); + } + ui.horizontal(|ui| { + if self.editing_date { + let label = ui.label("Date: "); + ui.add( + DatePicker::new( + format!("roll_{}_view_date", self.roll), + &mut self.edit_date, + ) + .sunday_first(true) + .highlight_weekend(false), + ) + .labelled_by(label.id); + if ui.button("Done").clicked() { + roll.date = self.edit_date; + self.editing_date = false; + } + if ui.button("Cancel").clicked() { + self.editing_date = false; + } + } else { + ui.label(format!("Date: {}", roll.date.format("%Y-%m-%d"))); + if ui.button("Edit").clicked() { + self.editing_date = true; + self.edit_date = roll.date; + } + } + }); ui.label("Exposures:"); ui.horizontal_top(|ui| { ui.vertical(|ui| {