1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
extern crate tui;
use tui::{Terminal, Frame};
use tui::backend::Backend;
use tui::layout::{Alignment, Rect};
use tui::text::Text;
use tui::widgets::{Block, Borders, Paragraph};

use crate::userinterface::widgets::{BORDERS, EMPTY_SPACES};

const EXTRA_SPACES: u16 = 3;
const LARGER_ROW: u16 = 13;

pub const WIN_WIDTH: u16 = LARGER_ROW + (EMPTY_SPACES + EXTRA_SPACES) * 2
  + BORDERS;

const TEXT_HEIGHT: u16 = 4;

pub const WIN_HEIGHT: u16 = TEXT_HEIGHT + EMPTY_SPACES + BORDERS;

pub fn render<B: Backend>(terminal: &mut Terminal<B>) {
  terminal.draw(|frame| {
    let frame_area = frame.size();

    let frame_left = frame_area.left();
    let frame_top = frame_area.top();
    let frame_width = frame_area.right() - frame_left;
    let frame_height = frame_area.bottom() - frame_top;

    let window_area = Rect::new(frame_left + frame_width/2 - WIN_WIDTH/2,
      frame_top + frame_height/2 - WIN_HEIGHT/2, WIN_WIDTH, WIN_HEIGHT);
    let window_left = window_area.left();
    let window_top = window_area.top();
    let window_width = window_area.right() - window_left;
    let window_height = window_area.bottom() - window_top;

    let text_area =
      Rect::new(window_left + 1, window_top + window_height/2 - BORDERS,
        window_width - BORDERS, window_height - BORDERS);

    render_borders(frame, &window_area);
    render_text(frame, &text_area);

  }).unwrap();
}

fn render_borders<B: Backend>(frame: &mut Frame<B>, area: &Rect) {
  let block = Block::default().borders(Borders::ALL);
  frame.render_widget(block, *area);
}

fn render_text<B: Backend>(frame: &mut Frame<B>, area: &Rect) {

    let exit_text = Paragraph::new(Text::from("Exit ?

< y > for YES
< n > for NO")).alignment(Alignment::Center);

    frame.render_widget(exit_text, *area);
}