From 558712ac6741c28777f69b93ccb6b4a5e0d4ff22 Mon Sep 17 00:00:00 2001 From: lukeflo Date: Sun, 17 Nov 2024 22:21:18 +0100 Subject: implement warning message popup --- src/tui/popup.rs | 11 ++++++++--- src/tui/ui.rs | 25 ++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 4 deletions(-) (limited to 'src/tui') diff --git a/src/tui/popup.rs b/src/tui/popup.rs index 94df9b9..4cde704 100644 --- a/src/tui/popup.rs +++ b/src/tui/popup.rs @@ -26,7 +26,8 @@ use crate::{MAIN_BLUE_COLOR_INDEX, MAIN_PURPLE_COLOR_INDEX}; #[derive(Debug)] pub enum PopupKind { Help, - Message, + MessageConfirm, + MessageError, Selection, } @@ -100,13 +101,17 @@ impl PopupArea { Text::from(helptext) } - pub fn popup_message(&mut self, message: &str, object: &str) { + pub fn popup_message(&mut self, message: &str, object: &str, msg_confirm: bool) { if object.is_empty() { self.popup_message = message.to_owned(); } else { self.popup_message = message.to_owned() + object; //format!("{} \"{}\"", message, object); } - self.popup_kind = Some(PopupKind::Message); + if msg_confirm { + self.popup_kind = Some(PopupKind::MessageConfirm); + } else { + self.popup_kind = Some(PopupKind::MessageError) + } self.is_popup = true; } diff --git a/src/tui/ui.rs b/src/tui/ui.rs index 0534761..af94be4 100644 --- a/src/tui/ui.rs +++ b/src/tui/ui.rs @@ -195,7 +195,7 @@ pub fn render_popup(app: &mut App, frame: &mut Frame) { frame.render_widget(Clear, popup_area); frame.render_widget(par, popup_area) } - Some(PopupKind::Message) => { + Some(PopupKind::MessageConfirm) => { let area = frame.area(); let block = Block::bordered() @@ -218,6 +218,29 @@ pub fn render_popup(app: &mut App, frame: &mut Frame) { frame.render_widget(Clear, popup_area); frame.render_widget(&content, popup_area) } + Some(PopupKind::MessageError) => { + let area = frame.area(); + + let block = Block::bordered() + .title_top(" Warning ".bold().fg(Color::Red)) + .border_style(Style::new().fg(Color::Red)) + .style(POPUP_HELP_BOX); + + let content = Paragraph::new(app.bibiman.popup_area.popup_message.clone()) + .block(block) + .style(Style::new().fg(Color::Red)); + + // Calculate popup size. Width is number of string chars plus 2 for border + let popup_area = popup_area( + area, + (app.bibiman.popup_area.popup_message.chars().count() + 2) as u16, + 3, + ); + + // Clear area and draw popup + frame.render_widget(Clear, popup_area); + frame.render_widget(&content, popup_area) + } Some(PopupKind::Selection) => { let list_items: Vec = app .bibiman -- cgit v1.2.3