diff --git a/rust/sea_battle_cli_player/src/ui_screens/configure_game_rules.rs b/rust/sea_battle_cli_player/src/ui_screens/configure_game_rules.rs index 683865a..73d6629 100644 --- a/rust/sea_battle_cli_player/src/ui_screens/configure_game_rules.rs +++ b/rust/sea_battle_cli_player/src/ui_screens/configure_game_rules.rs @@ -69,7 +69,7 @@ impl GameRulesConfigurationScreen { if let Event::Key(key) = event::read()? { match key.code { // Quit app - KeyCode::Char('q') => return Ok(ScreenResult::Canceled), + KeyCode::Char('q') | KeyCode::Esc => return Ok(ScreenResult::Canceled), // Navigate between fields KeyCode::Up | KeyCode::Left => cursor_pos -= 1, diff --git a/rust/sea_battle_cli_player/src/ui_screens/confirm_dialog_screen.rs b/rust/sea_battle_cli_player/src/ui_screens/confirm_dialog_screen.rs index 34d8acb..efdc993 100644 --- a/rust/sea_battle_cli_player/src/ui_screens/confirm_dialog_screen.rs +++ b/rust/sea_battle_cli_player/src/ui_screens/confirm_dialog_screen.rs @@ -18,6 +18,7 @@ use crate::ui_widgets::button_widget::ButtonWidget; pub fn confirm(terminal: &mut Terminal, msg: &str) -> bool { matches!( ConfirmDialogScreen::new(msg) + .set_can_escape(true) .show(terminal) .unwrap_or(ScreenResult::Canceled), ScreenResult::Ok(true) @@ -41,6 +42,11 @@ impl<'a> ConfirmDialogScreen<'a> { } } + pub fn set_can_escape(mut self, v: bool) -> Self { + self.can_escape = v; + self + } + pub fn show( mut self, terminal: &mut Terminal, diff --git a/rust/sea_battle_cli_player/src/ui_screens/game_screen.rs b/rust/sea_battle_cli_player/src/ui_screens/game_screen.rs index eda9dd5..e7751da 100644 --- a/rust/sea_battle_cli_player/src/ui_screens/game_screen.rs +++ b/rust/sea_battle_cli_player/src/ui_screens/game_screen.rs @@ -147,7 +147,7 @@ impl GameScreen { match key.code { // Leave game - KeyCode::Char('q') + KeyCode::Char('q') | KeyCode::Esc if confirm(terminal, "Do you really want to leave game?") => { self.client.close_connection().await; diff --git a/rust/sea_battle_cli_player/src/ui_screens/popup_screen.rs b/rust/sea_battle_cli_player/src/ui_screens/popup_screen.rs index 896e1b3..a7dfc52 100644 --- a/rust/sea_battle_cli_player/src/ui_screens/popup_screen.rs +++ b/rust/sea_battle_cli_player/src/ui_screens/popup_screen.rs @@ -52,7 +52,7 @@ impl<'a> PopupScreen<'a> { if event::poll(timeout)? { if let Event::Key(key) = event::read()? { match key.code { - KeyCode::Char('q') => return Ok(ScreenResult::Canceled), + KeyCode::Char('q') | KeyCode::Esc => return Ok(ScreenResult::Canceled), KeyCode::Enter => { return Ok(ScreenResult::Ok(())); } diff --git a/rust/sea_battle_cli_player/src/ui_screens/select_bot_type_screen.rs b/rust/sea_battle_cli_player/src/ui_screens/select_bot_type_screen.rs index 19caebe..d220185 100644 --- a/rust/sea_battle_cli_player/src/ui_screens/select_bot_type_screen.rs +++ b/rust/sea_battle_cli_player/src/ui_screens/select_bot_type_screen.rs @@ -49,7 +49,7 @@ impl SelectBotTypeScreen { if event::poll(timeout)? { if let Event::Key(key) = event::read()? { match key.code { - KeyCode::Char('q') => return Ok(ScreenResult::Canceled), + KeyCode::Char('q') | KeyCode::Esc => return Ok(ScreenResult::Canceled), KeyCode::Enter => { return Ok(ScreenResult::Ok(self.types[self.curr_selection].r#type)); } diff --git a/rust/sea_battle_cli_player/src/ui_screens/select_play_mode_screen.rs b/rust/sea_battle_cli_player/src/ui_screens/select_play_mode_screen.rs index 9b0d8e4..20c56e9 100644 --- a/rust/sea_battle_cli_player/src/ui_screens/select_play_mode_screen.rs +++ b/rust/sea_battle_cli_player/src/ui_screens/select_play_mode_screen.rs @@ -92,7 +92,7 @@ impl SelectPlayModeScreen { if crossterm::event::poll(timeout)? { if let Event::Key(key) = event::read()? { match key.code { - KeyCode::Char('q') => return Ok(ScreenResult::Canceled), + KeyCode::Char('q') | KeyCode::Esc => return Ok(ScreenResult::Canceled), KeyCode::Enter => { return Ok(ScreenResult::Ok( AVAILABLE_PLAY_MODES[self.curr_selection].value, diff --git a/rust/sea_battle_cli_player/src/ui_screens/set_boats_layout_screen.rs b/rust/sea_battle_cli_player/src/ui_screens/set_boats_layout_screen.rs index 7456de6..ac7eabf 100644 --- a/rust/sea_battle_cli_player/src/ui_screens/set_boats_layout_screen.rs +++ b/rust/sea_battle_cli_player/src/ui_screens/set_boats_layout_screen.rs @@ -66,7 +66,7 @@ impl<'a> SetBoatsLayoutScreen<'a> { let event = event::read()?; if let Event::Key(key) = &event { match key.code { - KeyCode::Char('q') => { + KeyCode::Char('q') | KeyCode::Esc => { if !self.confirm_on_cancel || confirm(terminal, "Do you really want to quit?") {