Can press 'Esc' key to close windows
This commit is contained in:
		@@ -69,7 +69,7 @@ impl GameRulesConfigurationScreen {
 | 
				
			|||||||
                if let Event::Key(key) = event::read()? {
 | 
					                if let Event::Key(key) = event::read()? {
 | 
				
			||||||
                    match key.code {
 | 
					                    match key.code {
 | 
				
			||||||
                        // Quit app
 | 
					                        // Quit app
 | 
				
			||||||
                        KeyCode::Char('q') => return Ok(ScreenResult::Canceled),
 | 
					                        KeyCode::Char('q') | KeyCode::Esc => return Ok(ScreenResult::Canceled),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        // Navigate between fields
 | 
					                        // Navigate between fields
 | 
				
			||||||
                        KeyCode::Up | KeyCode::Left => cursor_pos -= 1,
 | 
					                        KeyCode::Up | KeyCode::Left => cursor_pos -= 1,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@ use crate::ui_widgets::button_widget::ButtonWidget;
 | 
				
			|||||||
pub fn confirm<B: Backend>(terminal: &mut Terminal<B>, msg: &str) -> bool {
 | 
					pub fn confirm<B: Backend>(terminal: &mut Terminal<B>, msg: &str) -> bool {
 | 
				
			||||||
    matches!(
 | 
					    matches!(
 | 
				
			||||||
        ConfirmDialogScreen::new(msg)
 | 
					        ConfirmDialogScreen::new(msg)
 | 
				
			||||||
 | 
					            .set_can_escape(true)
 | 
				
			||||||
            .show(terminal)
 | 
					            .show(terminal)
 | 
				
			||||||
            .unwrap_or(ScreenResult::Canceled),
 | 
					            .unwrap_or(ScreenResult::Canceled),
 | 
				
			||||||
        ScreenResult::Ok(true)
 | 
					        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<B: Backend>(
 | 
					    pub fn show<B: Backend>(
 | 
				
			||||||
        mut self,
 | 
					        mut self,
 | 
				
			||||||
        terminal: &mut Terminal<B>,
 | 
					        terminal: &mut Terminal<B>,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -147,7 +147,7 @@ impl GameScreen {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    match key.code {
 | 
					                    match key.code {
 | 
				
			||||||
                        // Leave game
 | 
					                        // Leave game
 | 
				
			||||||
                        KeyCode::Char('q')
 | 
					                        KeyCode::Char('q') | KeyCode::Esc
 | 
				
			||||||
                            if confirm(terminal, "Do you really want to leave game?") =>
 | 
					                            if confirm(terminal, "Do you really want to leave game?") =>
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            self.client.close_connection().await;
 | 
					                            self.client.close_connection().await;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,7 +52,7 @@ impl<'a> PopupScreen<'a> {
 | 
				
			|||||||
            if event::poll(timeout)? {
 | 
					            if event::poll(timeout)? {
 | 
				
			||||||
                if let Event::Key(key) = event::read()? {
 | 
					                if let Event::Key(key) = event::read()? {
 | 
				
			||||||
                    match key.code {
 | 
					                    match key.code {
 | 
				
			||||||
                        KeyCode::Char('q') => return Ok(ScreenResult::Canceled),
 | 
					                        KeyCode::Char('q') | KeyCode::Esc => return Ok(ScreenResult::Canceled),
 | 
				
			||||||
                        KeyCode::Enter => {
 | 
					                        KeyCode::Enter => {
 | 
				
			||||||
                            return Ok(ScreenResult::Ok(()));
 | 
					                            return Ok(ScreenResult::Ok(()));
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,7 +49,7 @@ impl SelectBotTypeScreen {
 | 
				
			|||||||
            if event::poll(timeout)? {
 | 
					            if event::poll(timeout)? {
 | 
				
			||||||
                if let Event::Key(key) = event::read()? {
 | 
					                if let Event::Key(key) = event::read()? {
 | 
				
			||||||
                    match key.code {
 | 
					                    match key.code {
 | 
				
			||||||
                        KeyCode::Char('q') => return Ok(ScreenResult::Canceled),
 | 
					                        KeyCode::Char('q') | KeyCode::Esc => return Ok(ScreenResult::Canceled),
 | 
				
			||||||
                        KeyCode::Enter => {
 | 
					                        KeyCode::Enter => {
 | 
				
			||||||
                            return Ok(ScreenResult::Ok(self.types[self.curr_selection].r#type));
 | 
					                            return Ok(ScreenResult::Ok(self.types[self.curr_selection].r#type));
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,7 +92,7 @@ impl SelectPlayModeScreen {
 | 
				
			|||||||
            if crossterm::event::poll(timeout)? {
 | 
					            if crossterm::event::poll(timeout)? {
 | 
				
			||||||
                if let Event::Key(key) = event::read()? {
 | 
					                if let Event::Key(key) = event::read()? {
 | 
				
			||||||
                    match key.code {
 | 
					                    match key.code {
 | 
				
			||||||
                        KeyCode::Char('q') => return Ok(ScreenResult::Canceled),
 | 
					                        KeyCode::Char('q') | KeyCode::Esc => return Ok(ScreenResult::Canceled),
 | 
				
			||||||
                        KeyCode::Enter => {
 | 
					                        KeyCode::Enter => {
 | 
				
			||||||
                            return Ok(ScreenResult::Ok(
 | 
					                            return Ok(ScreenResult::Ok(
 | 
				
			||||||
                                AVAILABLE_PLAY_MODES[self.curr_selection].value,
 | 
					                                AVAILABLE_PLAY_MODES[self.curr_selection].value,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,7 +66,7 @@ impl<'a> SetBoatsLayoutScreen<'a> {
 | 
				
			|||||||
                let event = event::read()?;
 | 
					                let event = event::read()?;
 | 
				
			||||||
                if let Event::Key(key) = &event {
 | 
					                if let Event::Key(key) = &event {
 | 
				
			||||||
                    match key.code {
 | 
					                    match key.code {
 | 
				
			||||||
                        KeyCode::Char('q') => {
 | 
					                        KeyCode::Char('q') | KeyCode::Esc => {
 | 
				
			||||||
                            if !self.confirm_on_cancel
 | 
					                            if !self.confirm_on_cancel
 | 
				
			||||||
                                || confirm(terminal, "Do you really want to quit?")
 | 
					                                || confirm(terminal, "Do you really want to quit?")
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user