Update prototype

pull/3/head
Florian Dehau 8 years ago
parent 7bdb11c681
commit 659a1e05dc

@ -22,7 +22,7 @@ use log4rs::config::{Appender, Config, Root};
use tui::Terminal;
use tui::widgets::{Widget, Block, List, Gauge, Sparkline, Text, border, Chart, Axis, Dataset,
BarChart, Marker};
BarChart, Marker, Tabs};
use tui::layout::{Group, Direction, Size, Rect};
use tui::style::Color;
@ -75,11 +75,29 @@ impl Iterator for SinSignal {
}
}
struct MyTabs {
titles: [&'static str; 2],
selection: usize,
}
impl MyTabs {
fn next(&mut self) {
self.selection = (self.selection + 1) % self.titles.len();
}
fn previous(&mut self) {
if self.selection > 0 {
self.selection -= 1;
}
}
}
struct App<'a> {
size: Rect,
items: Vec<&'a str>,
items2: Vec<&'a str>,
selected: usize,
tabs: MyTabs,
show_chart: bool,
progress: u16,
data: Vec<u64>,
@ -123,6 +141,10 @@ fn main() {
"Event8", "Event9", "Event10", "Event11", "Event12", "Event13", "Event14",
"Event15", "Event16", "Event17", "Event18", "Event19"],
selected: 0,
tabs: MyTabs {
titles: ["Main", "Map"],
selection: 0,
},
show_chart: true,
progress: 0,
data: rand_signal.clone().take(200).collect(),
@ -204,6 +226,12 @@ fn main() {
app.selected += 1;
}
}
event::Key::Left => {
app.tabs.previous();
}
event::Key::Right => {
app.tabs.next();
}
event::Key::Char('t') => {
app.show_chart = !app.show_chart;
}
@ -243,12 +271,36 @@ fn main() {
fn draw(t: &mut Terminal, app: &App) {
Group::default()
.direction(Direction::Vertical)
.sizes(&[Size::Fixed(3), Size::Min(0)])
.render(t, &app.size, |t, chunks| {
Tabs::default()
.block(Block::default().borders(border::ALL).title("Tabs"))
.titles(&app.tabs.titles)
.highlight_color(Color::Yellow)
.select(app.tabs.selection)
.render(&chunks[0], t);
match app.tabs.selection {
0 => {
draw_main(t, app, &chunks[1]);
}
1 => {}
_ => {}
};
});
t.finish();
}
fn draw_main(t: &mut Terminal, app: &App, area: &Rect) {
Group::default()
.direction(Direction::Vertical)
.sizes(&[Size::Fixed(7), Size::Min(7), Size::Fixed(7)])
.render(t, &app.size, |t, chunks| {
Block::default().borders(border::ALL).title("Graphs").render(&chunks[0], t);
.render(t, area, |t, chunks| {
Block::default()
.borders(border::ALL)
.title("Graphs")
.render(&chunks[0], t);
Group::default()
.direction(Direction::Vertical)
.margin(1)
@ -283,19 +335,25 @@ fn draw(t: &mut Terminal, app: &App) {
.sizes(&[Size::Percent(50), Size::Percent(50)])
.render(t, &chunks[0], |t, chunks| {
List::default()
.block(Block::default().borders(border::ALL).title("List"))
.block(Block::default()
.borders(border::ALL)
.title("List"))
.items(&app.items)
.select(app.selected)
.selection_color(Color::Yellow)
.selection_symbol(">")
.render(&chunks[0], t);
List::default()
.block(Block::default().borders(border::ALL).title("List"))
.block(Block::default()
.borders(border::ALL)
.title("List"))
.items(&app.items2)
.render(&chunks[1], t);
});
BarChart::default()
.block(Block::default().borders(border::ALL).title("Bar chart"))
.block(Block::default()
.borders(border::ALL)
.title("Bar chart"))
.data(&app.data4)
.bar_width(3)
.bar_gap(2)
@ -334,13 +392,12 @@ fn draw(t: &mut Terminal, app: &App) {
.block(Block::default().borders(border::ALL).title("Footer"))
.wrap(true)
.fg(app.colors[app.color_index])
.text("This a paragraph with several lines.\nYou can change the color.\nUse \
\\{[color] [text]} to highlight the text with the color. For example, \
{red u}{green n}{yellow d}{magenta e}{cyan r} {gray t}{light_gray \
h}{light_red e} {light_green r}{light_yellow a}{light_magenta \
i}{light_cyan n}{white b}{red o}{green w}.\nOh, and if you didn't notice \
you can automatically wrap your text =).")
.text("This a paragraph with several lines.\nYou can change the \
color.\nUse \\{[color] [text]} to highlight the text with the \
color. For example, {red u}{green n}{yellow d}{magenta e}{cyan r} \
{gray t}{light_gray h}{light_red e} {light_green r}{light_yellow \
a}{light_magenta i}{light_cyan n}{white b}{red o}{green w}.\nOh, \
and if you didn't notice you can automatically wrap your text =).")
.render(&chunks[2], t);
});
t.finish();
}

Loading…
Cancel
Save