diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-12-05 16:33:34 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-12-05 16:33:34 -0500 |
commit | f4b04b4e35dc21d2e963abf0d4d3aae3bb61b0a2 (patch) | |
tree | 8d0cb794cf04f8c778650e6f847b2513d642d38e | |
parent | 97cd43606097a23b20b761928fcf65db9d42214a (diff) | |
download | ttyrec-bin-f4b04b4e35dc21d2e963abf0d4d3aae3bb61b0a2.tar.gz ttyrec-bin-f4b04b4e35dc21d2e963abf0d4d3aae3bb61b0a2.zip |
add help
-rw-r--r-- | src/bin/ttyplay/display.rs | 37 | ||||
-rw-r--r-- | src/bin/ttyplay/event.rs | 12 | ||||
-rw-r--r-- | src/bin/ttyplay/input.rs | 1 |
3 files changed, 50 insertions, 0 deletions
diff --git a/src/bin/ttyplay/display.rs b/src/bin/ttyplay/display.rs index f5bcb00..3ae84e9 100644 --- a/src/bin/ttyplay/display.rs +++ b/src/bin/ttyplay/display.rs @@ -6,6 +6,7 @@ pub struct Display { done_loading: bool, paused: bool, show_ui: bool, + show_help: bool, } impl Display { @@ -16,6 +17,7 @@ impl Display { done_loading: false, paused: false, show_ui: true, + show_help: false, } } @@ -39,6 +41,10 @@ impl Display { self.show_ui = !self.show_ui; } + pub fn toggle_help(&mut self) { + self.show_help = !self.show_help; + } + pub async fn render( &self, screen: &vt100::Screen, @@ -71,6 +77,37 @@ impl Display { output.set_bgcolor(textmode::color::RED); output.write_str("\u{23f8}"); + if self.show_help { + output.reset_attributes(); + output.set_fgcolor(textmode::color::BLACK); + output.set_bgcolor(textmode::color::CYAN); + + output.move_to(size.0 - 12, size.1 - 23); + output.write_str(" keys "); + output.move_to(size.0 - 11, size.1 - 23); + output.write_str(" q: quit "); + output.move_to(size.0 - 10, size.1 - 23); + output.write_str(" space: pause/unpause "); + output.move_to(size.0 - 9, size.1 - 23); + output.write_str(" tab: hide/show ui "); + output.move_to(size.0 - 8, size.1 - 23); + output.write_str(" h/p: previous frame "); + output.move_to(size.0 - 7, size.1 - 23); + output.write_str(" l/n: next frame "); + output.move_to(size.0 - 6, size.1 - 23); + output.write_str(" g/0: first frame "); + output.move_to(size.0 - 5, size.1 - 23); + output.write_str(" G/$: last frame "); + output.move_to(size.0 - 4, size.1 - 23); + output.write_str(" +: increase speed "); + output.move_to(size.0 - 3, size.1 - 23); + output.write_str(" -: decrease speed "); + output.move_to(size.0 - 2, size.1 - 23); + output.write_str(" =: normal speed "); + output.move_to(size.0 - 1, size.1 - 23); + output.write_str(" ?: hide/show help "); + } + output.reset_attributes(); output.move_to(pos.0, pos.1); } diff --git a/src/bin/ttyplay/event.rs b/src/bin/ttyplay/event.rs index 3a68965..68900cd 100644 --- a/src/bin/ttyplay/event.rs +++ b/src/bin/ttyplay/event.rs @@ -4,6 +4,7 @@ pub enum Event { Paused(bool), TimerAction(TimerAction), ToggleUi, + ToggleHelp, Quit, } @@ -70,6 +71,7 @@ struct Pending { paused: Option<bool>, timer_actions: std::collections::VecDeque<TimerAction>, toggle_ui: bool, + toggle_help: bool, quit: bool, } @@ -99,6 +101,9 @@ impl Pending { Event::ToggleUi => { self.toggle_ui = !self.toggle_ui; } + Event::ToggleHelp => { + self.toggle_help = !self.toggle_help; + } Event::Quit => { self.quit = true; } @@ -112,6 +117,7 @@ impl Pending { || self.paused.is_some() || !self.timer_actions.is_empty() || self.toggle_ui + || self.toggle_help || self.quit } @@ -124,6 +130,9 @@ impl Pending { } else if self.toggle_ui { self.toggle_ui = false; Some(Event::ToggleUi) + } else if self.toggle_help { + self.toggle_help = false; + Some(Event::ToggleHelp) } else if let Some(paused) = self.paused.take() { Some(Event::Paused(paused)) } else if let Some(frame) = self.frame_loaded.take() { @@ -170,6 +179,9 @@ pub async fn handle_events( Event::ToggleUi => { display.toggle_ui(); } + Event::ToggleHelp => { + display.toggle_help(); + } Event::Quit => { break; } diff --git a/src/bin/ttyplay/input.rs b/src/bin/ttyplay/input.rs index 266c419..d061e24 100644 --- a/src/bin/ttyplay/input.rs +++ b/src/bin/ttyplay/input.rs @@ -30,6 +30,7 @@ pub fn spawn_task( crate::event::TimerAction::Pause, ), textmode::Key::Ctrl(b'i') => crate::event::Event::ToggleUi, + textmode::Key::Char('?') => crate::event::Event::ToggleHelp, textmode::Key::Char('+') => crate::event::Event::TimerAction( crate::event::TimerAction::SpeedUp, ), |