mechanical-engineering 0.0.0

Mechanical engineering calculation library and terminal based GUI
Documentation
use crate::app::ui::centered_rect;
use crate::app::App;
use ratatui::prelude::{Alignment, Frame};
use ratatui::style::{Color, Style};
use ratatui::widgets::{Block, BorderType, Borders, Clear, Padding, Paragraph};

pub struct QuitWarningPopup {
    pub quit_button_selected: bool,
}

impl QuitWarningPopup {
    pub fn new() -> Self {
        QuitWarningPopup {
            quit_button_selected: false,
        }
    }

    pub fn show(app: &App, f: &mut Frame) {
        let area = centered_rect(33, 33, f.size());
        let button_area = centered_rect(50, 30, area);
        let popup = Paragraph::new(
            "Are you sure you want to quit?\n\
            Unsaved changes will be lost!",
        )
        .alignment(Alignment::Center)
        .block(
            Block::default()
                .title("Quit Rust Mechanical")
                .borders(Borders::ALL)
                .border_type(BorderType::Rounded)
                .style(Style::default().fg(Color::Red)),
        );

        let quit_button_fg_color;
        let quit_button_border_type;
        match app.quit_warning_popup.quit_button_selected {
            true => {
                quit_button_fg_color = Color::White;
                quit_button_border_type = BorderType::Double;
            }
            false => {
                quit_button_fg_color = Color::Red;
                quit_button_border_type = BorderType::Rounded;
            }
        }

        let quit_button = Paragraph::new("Quit").alignment(Alignment::Center).block(
            Block::default()
                .borders(Borders::ALL)
                .padding(Padding::zero())
                .border_type(quit_button_border_type)
                .style(Style::default().fg(quit_button_fg_color)),
        );

        f.render_widget(Clear, area);
        f.render_widget(popup, area);
        f.render_widget(quit_button, button_area);
    }
}

impl Default for QuitWarningPopup {
    fn default() -> Self {
        QuitWarningPopup::new()
    }
}