diff --git a/src/keys.rs b/src/keys.rs index 4d0349b..bcc6172 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -31,8 +31,8 @@ impl Handle for Taggart { let event = &*input.event(); match &self.mode { Some(Mode::Edit { .. }) => self.mode_edit(event), - Some(Mode::Save { .. }) => self.mode_save(event), - Some(Mode::Quit { .. }) => self.mode_quit(event), + Some(Mode::Save { value }) => self.mode_save(event, *value), + Some(Mode::Quit { value }) => self.mode_quit(event, *value), None => match event { press!(Char('q')) => { self.quit_begin(&input) }, press!(Char('w')) => { self.save_begin() }, diff --git a/src/keys/quit.rs b/src/keys/quit.rs index 9ee5206..3d9b7b6 100644 --- a/src/keys/quit.rs +++ b/src/keys/quit.rs @@ -8,10 +8,17 @@ impl Taggart { self.mode = Some(Mode::Quit { value: 1 }) } } - pub fn mode_quit (&mut self, event: &Event) { + pub fn mode_quit (&mut self, event: &Event, value: u8) { match event { press!(Esc) => { self.mode = None }, - _ => todo!() + press!(Left) => { self.mode = Some(Mode::Quit { + value: value.overflowing_sub(1).0.min(2) + }) }, + press!(Right) => { self.mode = Some(Mode::Quit { + value: (value + 1) % 3 + }) }, + press!(Enter) => todo!(), + _ => {} } } } diff --git a/src/keys/save.rs b/src/keys/save.rs index 5e522a5..678d56b 100644 --- a/src/keys/save.rs +++ b/src/keys/save.rs @@ -6,10 +6,17 @@ impl Taggart { self.mode = Some(Mode::Save { value: 1 }) } } - pub fn mode_save (&mut self, event: &Event) { + pub fn mode_save (&mut self, event: &Event, value: u8) { match event { - press!(Esc) => { self.mode = None }, - _ => todo!() + press!(Esc) => { self.mode = None } + press!(Left) => { self.mode = Some(Mode::Save { + value: value.overflowing_sub(1).0.min(2) + }) }, + press!(Right) => { self.mode = Some(Mode::Save { + value: (value + 1) % 3 + }) }, + press!(Enter) => todo!(), + _ => {} } } } diff --git a/src/view.rs b/src/view.rs index a2d5cb5..ecf0719 100644 --- a/src/view.rs +++ b/src/view.rs @@ -24,10 +24,14 @@ impl Content for Taggart { Color::Rgb(48,48,48), Modifier::DIM ); - let message = Bsp::s(format!("Save {} change(s)?", self.tasks.len()), - Bsp::s("", - Bsp::e(" Clear changes ", Bsp::e(" Continue editing ", " Save ")))); - let modal = Self::modal(message); + let options = [ + if value == 0 { "[ Clear changes ]" } else { " Clear changes " }, + if value == 1 { "[ Continue editing ]" } else { " Continue editing " }, + if value == 2 { "[ Write and continue ]" } else { " Write and continue " }, + ]; + let modal = Self::modal(Bsp::s( + format!("Save {} change(s)?", self.tasks.len()), + Bsp::s("", Bsp::e(options[0], Bsp::e(options[1], options[2]))))); Content::render(&modal, to) }, Some(Mode::Quit { value }) => { @@ -36,10 +40,14 @@ impl Content for Taggart { Color::Rgb(48,48,48), Modifier::DIM ); - let message = Bsp::s(format!("Save {} change(s) before exiting?", self.tasks.len()), - Bsp::s("", - Bsp::e(" Exit without saving ", Bsp::e(" Cancel ", " Save and exit ")))); - let modal = Self::modal(message); + let options = [ + if value == 0 { "[ Exit without saving ]" } else { " Exit without saving " }, + if value == 1 { "[ Cancel ]" } else { " Cancel " }, + if value == 2 { "[ Write and exit ]" } else { " Write and exit " }, + ]; + let modal = Self::modal(Bsp::s( + format!("Save {} change(s) before exiting?", self.tasks.len()), + Bsp::s("", Bsp::e(options[0], Bsp::e(options[1], options[2]))))); Content::render(&modal, to) }, _ => {},