refactor: clippy + rustfmt

pull/71/head
Florian Dehau 6 years ago
parent ad602a54bf
commit d6016788ef

@ -46,7 +46,7 @@ RUSTFMT_WRITEMODE ?= 'diff'
lint: fmt clippy ## Lint project files
fmt: ## Check the format of the source code
cargo fmt -- --write-mode=$(RUSTFMT_WRITEMODE)
cargo fmt --all -- --check
clippy: RUST_CHANNEL = nightly
clippy: ## Check the style of the source code and catch common errors
@ -88,4 +88,4 @@ beta: RUST_CHANNEL = beta
beta: build test ## Run build and tests for beta
nightly: RUST_CHANNEL = nightly
nightly: install-tools build lint test ## Run build, lint and tests for nightly
nightly: build lint test ## Run build, lint and tests for nightly

@ -130,19 +130,19 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
.direction(Direction::Vertical)
.margin(2)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(&app.size);
.split(app.size);
BarChart::default()
.block(Block::default().title("Data1").borders(Borders::ALL))
.data(&app.data)
.bar_width(9)
.style(Style::default().fg(Color::Yellow))
.value_style(Style::default().fg(Color::Black).bg(Color::Yellow))
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
{
let chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(&chunks[1]);
.split(chunks[1]);
BarChart::default()
.block(Block::default().title("Data2").borders(Borders::ALL))
.data(&app.data)
@ -150,7 +150,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
.bar_gap(3)
.style(Style::default().fg(Color::Green))
.value_style(Style::default().bg(Color::Green).modifier(Modifier::Bold))
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
BarChart::default()
.block(Block::default().title("Data3").borders(Borders::ALL))
.data(&app.data)
@ -159,7 +159,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
.bar_gap(0)
.value_style(Style::default().bg(Color::Red))
.label_style(Style::default().fg(Color::Cyan).modifier(Modifier::Italic))
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
}
}
t.draw().unwrap();

@ -18,14 +18,14 @@ fn main() {
terminal.hide_cursor().unwrap();
let mut term_size = terminal.size().unwrap();
draw(&mut terminal, &term_size);
draw(&mut terminal, term_size);
for c in stdin.keys() {
let size = terminal.size().unwrap();
if term_size != size {
terminal.resize(size).unwrap();
term_size = size;
}
draw(&mut terminal, &term_size);
draw(&mut terminal, term_size);
let evt = c.unwrap();
if evt == event::Key::Char('q') {
break;
@ -34,7 +34,7 @@ fn main() {
terminal.show_cursor().unwrap();
}
fn draw(t: &mut Terminal<MouseBackend>, size: &Rect) {
fn draw(t: &mut Terminal<MouseBackend>, size: Rect) {
{
let mut f = t.get_frame();
// Wrapping block for a group
@ -50,12 +50,12 @@ fn draw(t: &mut Terminal<MouseBackend>, size: &Rect) {
let chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(&chunks[0]);
.split(chunks[0]);
Block::default()
.title("With background")
.title_style(Style::default().fg(Color::Yellow))
.style(Style::default().bg(Color::Green))
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
Block::default()
.title("Styled title")
.title_style(
@ -64,22 +64,22 @@ fn draw(t: &mut Terminal<MouseBackend>, size: &Rect) {
.bg(Color::Red)
.modifier(Modifier::Bold),
)
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
}
{
let chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(&chunks[1]);
.split(chunks[1]);
Block::default()
.title("With borders")
.borders(Borders::ALL)
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
Block::default()
.title("With styled borders")
.border_style(Style::default().fg(Color::Cyan))
.borders(Borders::LEFT | Borders::RIGHT)
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
}
}
t.draw().unwrap();

@ -153,7 +153,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
let chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(&app.size);
.split(app.size);
Canvas::default()
.block(Block::default().borders(Borders::ALL).title("World"))
.paint(|ctx| {
@ -165,7 +165,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
})
.x_bounds([-180.0, 180.0])
.y_bounds([-90.0, 90.0])
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
Canvas::default()
.block(Block::default().borders(Borders::ALL).title("List"))
.paint(|ctx| {
@ -200,7 +200,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
})
.x_bounds([10.0, 110.0])
.y_bounds([10.0, 110.0])
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
}
t.draw().unwrap();

@ -35,10 +35,10 @@ impl App {
let data2 = signal2.by_ref().take(200).collect::<Vec<(f64, f64)>>();
App {
size: Rect::default(),
signal1: signal1,
data1: data1,
signal2: signal2,
data2: data2,
signal1,
data1,
signal2,
data2,
window: [0.0, 20.0],
}
}
@ -127,44 +127,43 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
Chart::default()
.block(
Block::default()
.title("Chart")
.title_style(Style::default().fg(Color::Cyan).modifier(Modifier::Bold))
.borders(Borders::ALL),
)
.title("Chart")
.title_style(Style::default().fg(Color::Cyan).modifier(Modifier::Bold))
.borders(Borders::ALL),
)
.x_axis(
Axis::default()
.title("X Axis")
.style(Style::default().fg(Color::Gray))
.labels_style(Style::default().modifier(Modifier::Italic))
.bounds(app.window)
.labels(&[
.title("X Axis")
.style(Style::default().fg(Color::Gray))
.labels_style(Style::default().modifier(Modifier::Italic))
.bounds(app.window)
.labels(&[
&format!("{}", app.window[0]),
&format!("{}", (app.window[0] + app.window[1]) / 2.0),
&format!("{}", app.window[1]),
]),
)
]),
)
.y_axis(
Axis::default()
.title("Y Axis")
.style(Style::default().fg(Color::Gray))
.labels_style(Style::default().modifier(Modifier::Italic))
.bounds([-20.0, 20.0])
.labels(&["-20", "0", "20"]),
)
.title("Y Axis")
.style(Style::default().fg(Color::Gray))
.labels_style(Style::default().modifier(Modifier::Italic))
.bounds([-20.0, 20.0])
.labels(&["-20", "0", "20"]),
)
.datasets(&[
Dataset::default()
.name("data2")
.marker(Marker::Dot)
.style(Style::default().fg(Color::Cyan))
.data(&app.data1),
Dataset::default()
.name("data3")
.marker(Marker::Braille)
.style(Style::default().fg(Color::Yellow))
.data(&app.data2),
Dataset::default()
.name("data2")
.marker(Marker::Dot)
.style(Style::default().fg(Color::Cyan))
.data(&app.data1),
Dataset::default()
.name("data3")
.marker(Marker::Braille)
.style(Style::default().fg(Color::Yellow))
.data(&app.data2),
])
.render(&mut f, &app.size);
.render(&mut f, app.size);
}
t.draw().unwrap();
}

@ -18,7 +18,7 @@ impl<'a> Default for Label<'a> {
}
impl<'a> Widget for Label<'a> {
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
buf.set_string(area.left(), area.top(), self.text, &Style::default());
}
}
@ -34,6 +34,8 @@ fn main() {
let mut terminal = Terminal::new(MouseBackend::new().unwrap()).unwrap();
let size = terminal.size().unwrap();
terminal.clear().unwrap();
Label::default().text("Test").render(&mut terminal.get_frame(), &size);
Label::default()
.text("Test")
.render(&mut terminal.get_frame(), size);
terminal.draw().unwrap();
}

@ -20,7 +20,7 @@ use tui::style::{Color, Modifier, Style};
use tui::widgets::canvas::{Canvas, Line, Map, MapResolution};
use tui::widgets::{
Axis, BarChart, Block, Borders, Chart, Dataset, Gauge, Item, List, Marker, Paragraph, Row,
SelectableList, Sparkline, Table, Tabs, Widget, Text,
SelectableList, Sparkline, Table, Tabs, Text, Widget,
};
use tui::{Frame, Terminal};
@ -272,20 +272,20 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) -> Result<(), io::Error> {
let mut f = t.get_frame();
let chunks = Layout::default()
.constraints([Constraint::Length(3), Constraint::Min(0)].as_ref())
.split(&app.size);
.split(app.size);
Tabs::default()
.block(Block::default().borders(Borders::ALL).title("Tabs"))
.titles(&app.tabs.titles)
.style(Style::default().fg(Color::Green))
.highlight_style(Style::default().fg(Color::Yellow))
.select(app.tabs.selection)
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
match app.tabs.selection {
0 => {
draw_first_tab(&mut f, app, &chunks[1]);
draw_first_tab(&mut f, app, chunks[1]);
}
1 => {
draw_second_tab(&mut f, app, &chunks[1]);
draw_second_tab(&mut f, app, chunks[1]);
}
_ => {}
};
@ -293,7 +293,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) -> Result<(), io::Error> {
t.draw()
}
fn draw_first_tab(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
fn draw_first_tab(f: &mut Frame<MouseBackend>, app: &App, area: Rect) {
let chunks = Layout::default()
.constraints(
[
@ -303,16 +303,16 @@ fn draw_first_tab(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
].as_ref(),
)
.split(area);
draw_gauges(f, app, &chunks[0]);
draw_charts(f, app, &chunks[1]);
draw_text(f, &chunks[2]);
draw_gauges(f, app, chunks[0]);
draw_charts(f, app, chunks[1]);
draw_text(f, chunks[2]);
}
fn draw_gauges(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
fn draw_gauges(f: &mut Frame<MouseBackend>, app: &App, area: Rect) {
let chunks = Layout::default()
.constraints([Constraint::Length(2), Constraint::Length(3)].as_ref())
.margin(1)
.split(&area);
.split(area);
Block::default()
.borders(Borders::ALL)
.title("Graphs")
@ -327,15 +327,15 @@ fn draw_gauges(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
)
.label(&format!("{} / 100", app.progress))
.percent(app.progress)
.render(f, &chunks[0]);
.render(f, chunks[0]);
Sparkline::default()
.block(Block::default().title("Sparkline:"))
.style(Style::default().fg(Color::Green))
.data(&app.data)
.render(f, &chunks[1]);
.render(f, chunks[1]);
}
fn draw_charts(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
fn draw_charts(f: &mut Frame<MouseBackend>, app: &App, area: Rect) {
let constraints = if app.show_chart {
vec![Constraint::Percentage(50), Constraint::Percentage(50)]
} else {
@ -344,23 +344,23 @@ fn draw_charts(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
let chunks = Layout::default()
.constraints(constraints)
.direction(Direction::Horizontal)
.split(&area);
.split(area);
{
let chunks = Layout::default()
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(&chunks[0]);
.split(chunks[0]);
{
let chunks = Layout::default()
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.direction(Direction::Horizontal)
.split(&chunks[0]);
.split(chunks[0]);
SelectableList::default()
.block(Block::default().borders(Borders::ALL).title("List"))
.items(&app.items)
.select(app.selected)
.highlight_style(Style::default().fg(Color::Yellow).modifier(Modifier::Bold))
.highlight_symbol(">")
.render(f, &chunks[0]);
.render(f, chunks[0]);
let info_style = Style::default().fg(Color::White);
let warning_style = Style::default().fg(Color::Yellow);
let error_style = Style::default().fg(Color::Magenta);
@ -378,7 +378,7 @@ fn draw_charts(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
});
List::new(events)
.block(Block::default().borders(Borders::ALL).title("List"))
.render(f, &chunks[1]);
.render(f, chunks[1]);
}
BarChart::default()
.block(Block::default().borders(Borders::ALL).title("Bar chart"))
@ -393,7 +393,7 @@ fn draw_charts(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
)
.label_style(Style::default().fg(Color::Yellow))
.style(Style::default().fg(Color::Green))
.render(f, &chunks[1]);
.render(f, chunks[1]);
}
if app.show_chart {
Chart::default()
@ -435,11 +435,11 @@ fn draw_charts(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
.style(Style::default().fg(Color::Yellow))
.data(&app.data3),
])
.render(f, &chunks[1]);
.render(f, chunks[1]);
}
}
fn draw_text(f: &mut Frame<MouseBackend>, area: &Rect) {
fn draw_text(f: &mut Frame<MouseBackend>, area: Rect) {
let text = [
Text::Data("This is a paragraph with several lines. You can change style your text the way you want.\n\nFox example: "),
Text::StyledData("under", Style::default().fg(Color::Red)),
@ -468,7 +468,7 @@ fn draw_text(f: &mut Frame<MouseBackend>, area: &Rect) {
.render(f, area);
}
fn draw_second_tab(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
fn draw_second_tab(f: &mut Frame<MouseBackend>, app: &App, area: Rect) {
let chunks = Layout::default()
.constraints([Constraint::Percentage(30), Constraint::Percentage(70)].as_ref())
.direction(Direction::Horizontal)
@ -488,7 +488,7 @@ fn draw_second_tab(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
).block(Block::default().title("Servers").borders(Borders::ALL))
.header_style(Style::default().fg(Color::Yellow))
.widths(&[15, 15, 10])
.render(f, &chunks[0]);
.render(f, chunks[0]);
Canvas::default()
.block(Block::default().title("World").borders(Borders::ALL))
@ -520,5 +520,5 @@ fn draw_second_tab(f: &mut Frame<MouseBackend>, app: &App, area: &Rect) {
})
.x_bounds([-180.0, 180.0])
.y_bounds([-90.0, 90.0])
.render(f, &chunks[1]);
.render(f, chunks[1]);
}

@ -132,29 +132,29 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
Constraint::Percentage(25),
].as_ref(),
)
.split(&app.size);
.split(app.size);
Gauge::default()
.block(Block::default().title("Gauge1").borders(Borders::ALL))
.style(Style::default().fg(Color::Yellow))
.percent(app.progress1)
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
Gauge::default()
.block(Block::default().title("Gauge2").borders(Borders::ALL))
.style(Style::default().fg(Color::Magenta).bg(Color::Green))
.percent(app.progress2)
.label(&format!("{}/100", app.progress2))
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
Gauge::default()
.block(Block::default().title("Gauge2").borders(Borders::ALL))
.style(Style::default().fg(Color::Yellow))
.percent(app.progress3)
.render(&mut f, &chunks[2]);
.render(&mut f, chunks[2]);
Gauge::default()
.block(Block::default().title("Gauge3").borders(Borders::ALL))
.style(Style::default().fg(Color::Cyan).modifier(Modifier::Italic))
.percent(app.progress4)
.label(&format!("{}/100", app.progress2))
.render(&mut f, &chunks[3]);
.render(&mut f, chunks[3]);
}
t.draw().unwrap();

@ -72,11 +72,8 @@ fn main() {
let evt = rx.recv().unwrap();
match evt {
Event::Input(input) => match input {
event::Key::Char('q') => {
break;
}
_ => {}
Event::Input(input) => if let event::Key::Char('q') = input {
break;
},
}
draw(&mut terminal, &app);
@ -97,16 +94,16 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
Constraint::Percentage(10),
].as_ref(),
)
.split(&app.size);
.split(app.size);
Block::default()
.title("Block")
.borders(Borders::ALL)
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
Block::default()
.title("Block 2")
.borders(Borders::ALL)
.render(&mut f, &chunks[2]);
.render(&mut f, chunks[2]);
}
t.draw().unwrap();

@ -10,7 +10,7 @@ use termion::event;
use termion::input::TermRead;
use tui::backend::MouseBackend;
use tui::layout::{Constraint, Corner, Direction, Rect, Layout};
use tui::layout::{Constraint, Corner, Direction, Layout, Rect};
use tui::style::{Color, Modifier, Style};
use tui::widgets::{Block, Borders, Item, List, SelectableList, Widget};
use tui::Terminal;
@ -161,7 +161,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
let chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(&app.size);
.split(app.size);
let style = Style::default().fg(Color::Black).bg(Color::White);
SelectableList::default()
@ -169,9 +169,9 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
.items(&app.items)
.select(app.selected)
.style(style)
.highlight_style(style.clone().fg(Color::LightGreen).modifier(Modifier::Bold))
.highlight_style(style.fg(Color::LightGreen).modifier(Modifier::Bold))
.highlight_symbol(">")
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
{
let events = app.events.iter().map(|&(evt, level)| {
Item::StyledData(
@ -182,12 +182,12 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
"WARNING" => &app.warning_style,
_ => &app.info_style,
},
)
)
});
List::new(events)
.block(Block::default().borders(Borders::ALL).title("List"))
.start_corner(Corner::BottomLeft)
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
}
}
t.draw().unwrap();

@ -7,8 +7,8 @@ use termion::input::TermRead;
use tui::backend::MouseBackend;
use tui::layout::{Alignment, Constraint, Direction, Layout, Rect};
use tui::style::{Color, Style, Modifier};
use tui::widgets::{Block, Paragraph, Widget, Text};
use tui::style::{Color, Modifier, Style};
use tui::widgets::{Block, Paragraph, Text, Widget};
use tui::Terminal;
fn main() {
@ -18,7 +18,7 @@ fn main() {
terminal.hide_cursor().unwrap();
let mut term_size = terminal.size().unwrap();
draw(&mut terminal, &term_size);
draw(&mut terminal, term_size);
for c in stdin.keys() {
let size = terminal.size().unwrap();
@ -27,7 +27,7 @@ fn main() {
term_size = size;
}
draw(&mut terminal, &term_size);
draw(&mut terminal, term_size);
let evt = c.unwrap();
if evt == event::Key::Char('q') {
break;
@ -36,7 +36,7 @@ fn main() {
terminal.show_cursor().unwrap();
}
fn draw(t: &mut Terminal<MouseBackend>, size: &Rect) {
fn draw(t: &mut Terminal<MouseBackend>, size: Rect) {
{
let mut f = t.get_frame();
Block::default()
@ -59,21 +59,27 @@ fn draw(t: &mut Terminal<MouseBackend>, size: &Rect) {
Text::Data("This a line\n"),
Text::StyledData("This a line\n", Style::default().fg(Color::Red)),
Text::StyledData("This a line\n", Style::default().bg(Color::Blue)),
Text::StyledData("This a longer line\n", Style::default().modifier(Modifier::CrossedOut)),
Text::StyledData("This a line\n", Style::default().fg(Color::Green).modifier(Modifier::Italic)),
Text::StyledData(
"This a longer line\n",
Style::default().modifier(Modifier::CrossedOut),
),
Text::StyledData(
"This a line\n",
Style::default().fg(Color::Green).modifier(Modifier::Italic),
),
];
Paragraph::new(text.iter())
.alignment(Alignment::Left)
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
Paragraph::new(text.iter())
.alignment(Alignment::Center)
.wrap(true)
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
Paragraph::new(text.iter())
.alignment(Alignment::Right)
.wrap(true)
.render(&mut f, &chunks[2]);
.render(&mut f, chunks[2]);
}
t.draw().unwrap();
}

@ -35,11 +35,11 @@ fn draw(t: &mut Terminal<RustboxBackend>) {
Paragraph::default()
.block(
Block::default()
.title("Rustbox backend")
.title_style(Style::default().fg(Color::Yellow).modifier(Modifier::Bold))
.borders(Borders::ALL)
.border_style(Style::default().fg(Color::Magenta)),
)
.title("Rustbox backend")
.title_style(Style::default().fg(Color::Yellow).modifier(Modifier::Bold))
.borders(Borders::ALL)
.border_style(Style::default().fg(Color::Magenta)),
)
.text("It {yellow works}!")
.render(&mut f, &size);
}

@ -34,10 +34,10 @@ impl App {
let data3 = signal.by_ref().take(200).collect::<Vec<u64>>();
App {
size: Rect::default(),
signal: signal,
data1: data1,
data2: data2,
data3: data3,
signal,
data1,
data2,
data3,
}
}
@ -132,7 +132,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
Constraint::Min(0),
].as_ref(),
)
.split(&app.size);
.split(app.size);
Sparkline::default()
.block(
Block::default()
@ -141,7 +141,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
)
.data(&app.data1)
.style(Style::default().fg(Color::Yellow))
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
Sparkline::default()
.block(
Block::default()
@ -150,7 +150,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
)
.data(&app.data2)
.style(Style::default().bg(Color::Green))
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
// Multiline
Sparkline::default()
.block(
@ -160,7 +160,7 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
)
.data(&app.data3)
.style(Style::default().fg(Color::Red))
.render(&mut f, &chunks[2]);
.render(&mut f, chunks[2]);
}
t.draw().unwrap();
}

@ -100,11 +100,11 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &App) -> Result<(), io::Error> {
let rects = Layout::default()
.constraints([Constraint::Percentage(100)].as_ref())
.margin(5)
.split(&app.size);
.split(app.size);
Table::new(header.into_iter(), rows)
.block(Block::default().borders(Borders::ALL).title("Table"))
.widths(&[10, 10, 10])
.render(&mut frame, &rects[0]);
.render(&mut frame, rects[0]);
}
t.draw()
}

@ -70,42 +70,42 @@ fn draw(t: &mut Terminal<MouseBackend>, app: &mut App) {
.direction(Direction::Vertical)
.margin(5)
.constraints([Constraint::Length(3), Constraint::Min(0)].as_ref())
.split(&app.size);
.split(app.size);
Block::default()
.style(Style::default().bg(Color::White))
.render(&mut f, &app.size);
.render(&mut f, app.size);
Tabs::default()
.block(Block::default().borders(Borders::ALL).title("Tabs"))
.titles(&app.tabs.titles)
.select(app.tabs.selection)
.style(Style::default().fg(Color::Cyan))
.highlight_style(Style::default().fg(Color::Yellow))
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
match app.tabs.selection {
0 => {
Block::default()
.title("Inner 0")
.borders(Borders::ALL)
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
}
1 => {
Block::default()
.title("Inner 1")
.borders(Borders::ALL)
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
}
2 => {
Block::default()
.title("Inner 2")
.borders(Borders::ALL)
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
}
3 => {
Block::default()
.title("Inner 3")
.borders(Borders::ALL)
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
}
_ => {}
}

@ -19,10 +19,10 @@ use std::thread;
use termion::event;
use termion::input::TermRead;
use tui::backend::MouseBackend;
use tui::backend::AlternateScreenBackend;
use tui::layout::{Constraint, Direction, Layout, Rect};
use tui::style::{Color, Style};
use tui::widgets::{Block, Borders, Item, List, Paragraph, Widget, Text};
use tui::widgets::{Block, Borders, Item, List, Paragraph, Text, Widget};
use tui::Terminal;
struct App {
@ -47,7 +47,7 @@ enum Event {
fn main() {
// Terminal initialization
let backend = MouseBackend::new().unwrap();
let backend = AlternateScreenBackend::new().unwrap();
let mut terminal = Terminal::new(backend).unwrap();
// Channels
@ -107,25 +107,25 @@ fn main() {
terminal.clear().unwrap();
}
fn draw(t: &mut Terminal<MouseBackend>, app: &App) {
fn draw(t: &mut Terminal<AlternateScreenBackend>, app: &App) {
{
let mut f = t.get_frame();
let chunks = Layout::default()
.direction(Direction::Vertical)
.margin(2)
.constraints([Constraint::Length(3), Constraint::Min(1)].as_ref())
.split(&app.size);
.split(app.size);
Paragraph::new([Text::Data(&app.input)].iter())
.style(Style::default().fg(Color::Yellow))
.block(Block::default().borders(Borders::ALL).title("Input"))
.render(&mut f, &chunks[0]);
.render(&mut f, chunks[0]);
List::new(
app.messages
.iter()
.enumerate()
.map(|(i, m)| Item::Data(format!("{}: {}", i, m))),
).block(Block::default().borders(Borders::ALL).title("Messages"))
.render(&mut f, &chunks[1]);
.render(&mut f, chunks[1]);
}
t.draw().unwrap();

@ -38,9 +38,9 @@ impl SinSignal {
pub fn new(interval: f64, period: f64, scale: f64) -> SinSignal {
SinSignal {
x: 0.0,
interval: interval,
period: period,
scale: scale,
interval,
period,
scale,
}
}
}

@ -2,7 +2,7 @@
# Build all examples in examples directory
set -eu -o pipefail
set -u -o pipefail
for file in examples/*.rs; do
name=$(basename ${file//.rs/})

@ -2,7 +2,7 @@
# Run all examples in examples directory
set -eu -o pipefail
set -u -o pipefail
for file in examples/*.rs; do
name=$(basename ${file//.rs/})

@ -187,8 +187,8 @@ macro_rules! termion_modifier {
}
impl Color {
pub fn termion_fg(&self) -> String {
match *self {
pub fn termion_fg(self) -> String {
match self {
Color::Reset => termion_fg!(Reset),
Color::Black => termion_fg!(Black),
Color::Red => termion_fg!(Red),
@ -209,8 +209,8 @@ impl Color {
Color::Rgb(r, g, b) => termion_fg_rgb!(r, g, b),
}
}
pub fn termion_bg(&self) -> String {
match *self {
pub fn termion_bg(self) -> String {
match self {
Color::Reset => termion_bg!(Reset),
Color::Black => termion_bg!(Black),
Color::Red => termion_bg!(Red),
@ -234,8 +234,8 @@ impl Color {
}
impl Modifier {
pub fn termion_modifier(&self) -> String {
match *self {
pub fn termion_modifier(self) -> String {
match self {
Modifier::Blink => termion_modifier!(Blink),
Modifier::Bold => termion_modifier!(Bold),
Modifier::CrossedOut => termion_modifier!(CrossedOut),

@ -125,10 +125,7 @@ impl Buffer {
for _ in 0..size {
content.push(cell.clone());
}
Buffer {
area: area,
content: content,
}
Buffer { area, content }
}
/// Returns the content of the buffer as a slice
@ -275,7 +272,7 @@ impl Buffer {
/// Merge an other buffer into this one
pub fn merge(&mut self, other: &Buffer) {
let area = self.area.union(&other.area);
let area = self.area.union(other.area);
let cell: Cell = Default::default();
self.content.resize(area.area() as usize, cell.clone());

@ -89,25 +89,24 @@ impl Layout {
/// let chunks = Layout::default()
/// .direction(Direction::Vertical)
/// .constraints([Constraint::Length(5), Constraint::Min(0)].as_ref())
/// .split(&Rect{x: 2, y: 2, width: 10, height: 10});
/// .split(Rect{x: 2, y: 2, width: 10, height: 10});
/// assert_eq!(chunks, vec![Rect{x:2, y: 2, width: 10, height: 5},
/// Rect{x: 2, y: 7, width: 10, height: 5}])
/// # }
///
/// ```
pub fn split(self, area: &Rect) -> Vec<Rect> {
pub fn split(self, area: Rect) -> Vec<Rect> {
// TODO: Maybe use a fixed size cache ?
LAYOUT_CACHE.with(|c| {
return c
.borrow_mut()
.entry((*area, self.clone()))
.or_insert_with(|| split(area, self))
.clone();
c.borrow_mut()
.entry((area, self.clone()))
.or_insert_with(|| split(area, &self))
.clone()
})
}
}
fn split(area: &Rect, layout: Layout) -> Vec<Rect> {
fn split(area: Rect, layout: &Layout) -> Vec<Rect> {
let mut solver = Solver::new();
let mut vars: HashMap<Variable, (usize, usize)> = HashMap::new();
let elements = layout
@ -282,34 +281,34 @@ impl Default for Rect {
impl Rect {
pub fn new(x: u16, y: u16, width: u16, height: u16) -> Rect {
Rect {
x: x,
y: y,
width: width,
height: height,
x,
y,
width,
height,
}
}
pub fn area(&self) -> u16 {
pub fn area(self) -> u16 {
self.width * self.height
}
pub fn left(&self) -> u16 {
pub fn left(self) -> u16 {
self.x
}
pub fn right(&self) -> u16 {
pub fn right(self) -> u16 {
self.x + self.width
}
pub fn top(&self) -> u16 {
pub fn top(self) -> u16 {
self.y
}
pub fn bottom(&self) -> u16 {
pub fn bottom(self) -> u16 {
self.y + self.height
}
pub fn inner(&self, margin: u16) -> Rect {
pub fn inner(self, margin: u16) -> Rect {
if self.width < 2 * margin || self.height < 2 * margin {
Rect::default()
} else {
@ -322,7 +321,7 @@ impl Rect {
}
}
pub fn union(&self, other: &Rect) -> Rect {
pub fn union(self, other: Rect) -> Rect {
let x1 = min(self.x, other.x);
let y1 = min(self.y, other.y);
let x2 = max(self.x + self.width, other.x + other.width);
@ -335,7 +334,7 @@ impl Rect {
}
}
pub fn intersection(&self, other: &Rect) -> Rect {
pub fn intersection(self, other: Rect) -> Rect {
let x1 = max(self.x, other.x);
let y1 = max(self.y, other.y);
let x2 = min(self.x + self.width, other.x + other.width);
@ -348,7 +347,7 @@ impl Rect {
}
}
pub fn intersects(&self, other: &Rect) -> bool {
pub fn intersects(self, other: Rect) -> bool {
self.x < other.x + other.width
&& self.x + self.width > other.x
&& self.y < other.y + other.height

@ -90,7 +90,7 @@
//! Block::default()
//! .title("Block")
//! .borders(Borders::ALL)
//! .render(&mut f, &size);
//! .render(&mut f, size);
//! }
//!
//! t.draw()
@ -139,15 +139,15 @@
//! Constraint::Percentage(10)
//! ].as_ref()
//! )
//! .split(&size);
//! .split(size);
//! Block::default()
//! .title("Block")
//! .borders(Borders::ALL)
//! .render(&mut f, &chunks[0]);
//! .render(&mut f, chunks[0]);
//! Block::default()
//! .title("Block 2")
//! .borders(Borders::ALL)
//! .render(&mut f, &chunks[2]);
//! .render(&mut f, chunks[2]);
//! }
//!
//! t.draw()
@ -166,8 +166,8 @@
#[macro_use]
extern crate bitflags;
extern crate cassowary;
extern crate itertools;
extern crate either;
extern crate itertools;
#[macro_use]
extern crate log;
extern crate unicode_segmentation;

@ -31,7 +31,7 @@ where
B: Backend,
{
/// Calls the draw method of a given widget on the current buffer
pub fn render<W>(&mut self, widget: &mut W, area: &Rect)
pub fn render<W>(&mut self, widget: &mut W, area: Rect)
where
W: Widget,
{
@ -48,17 +48,17 @@ where
pub fn new(backend: B) -> Result<Terminal<B>, io::Error> {
let size = backend.size()?;
Ok(Terminal {
backend: backend,
backend,
buffers: [Buffer::empty(size), Buffer::empty(size)],
current: 0,
})
}
pub fn get_frame<'a>(&'a mut self) -> Frame<'a, B> {
pub fn get_frame(&mut self) -> Frame<B> {
Frame { terminal: self }
}
pub fn current_buffer_mut<'a>(&'a mut self) -> &'a mut Buffer {
pub fn current_buffer_mut(&mut self) -> &mut Buffer {
&mut self.buffers[self.current]
}

@ -108,13 +108,13 @@ impl<'a> BarChart<'a> {
}
impl<'a> Widget for BarChart<'a> {
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let chart_area = match self.block {
Some(ref mut b) => {
b.draw(area, buf);
b.inner(area)
}
None => *area,
None => area,
};
if chart_area.height < 2 {

@ -75,11 +75,11 @@ impl<'a> Block<'a> {
}
/// Compute the inner area of a block based on its border visibility rules.
pub fn inner(&self, area: &Rect) -> Rect {
pub fn inner(&self, area: Rect) -> Rect {
if area.width < 2 || area.height < 2 {
return Rect::default();
}
let mut inner = *area;
let mut inner = area;
if self.borders.intersects(Borders::LEFT) {
inner.x += 1;
inner.width -= 1;
@ -99,12 +99,12 @@ impl<'a> Block<'a> {
}
impl<'a> Widget for Block<'a> {
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
if area.width < 2 || area.height < 2 {
return;
}
self.background(area, buf, self.style.bg);
self.background(&area, buf, self.style.bg);
// Sides
if self.borders.intersects(Borders::LEFT) {

@ -49,12 +49,12 @@ impl<'a> IntoIterator for &'a Line {
LineIterator {
x: self.x1,
y: self.y1,
dx: dx,
dy: dy,
dir_x: dir_x,
dir_y: dir_y,
dx,
dy,
dir_x,
dir_y,
current: 0.0,
end: end,
end,
}
}
}

@ -10,8 +10,8 @@ pub enum MapResolution {
}
impl MapResolution {
fn data(&self) -> &'static [(f64, f64)] {
match *self {
fn data(self) -> &'static [(f64, f64)] {
match self {
MapResolution::Low => &WORLD_LOW_RESOLUTION,
MapResolution::High => &WORLD_HIGH_RESOLUTION,
}

@ -116,12 +116,7 @@ impl<'a> Context<'a> {
/// Print a string on the canvas at the given position
pub fn print(&mut self, x: f64, y: f64, text: &'a str, color: Color) {
self.labels.push(Label {
x: x,
y: y,
text: text,
color: color,
});
self.labels.push(Label { x, y, text, color });
}
/// Push the last layer if necessary
@ -228,13 +223,13 @@ impl<'a, F> Widget for Canvas<'a, F>
where
F: Fn(&mut Context),
{
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let canvas_area = match self.block {
Some(ref mut b) => {
b.draw(area, buf);
b.inner(area)
}
None => *area,
None => area,
};
let width = canvas_area.width as usize;

File diff suppressed because it is too large Load Diff

@ -260,7 +260,7 @@ where
/// Compute the internal layout of the chart given the area. If the area is too small some
/// elements may be automatically hidden
fn layout(&self, area: &Rect) -> ChartLayout {
fn layout(&self, area: Rect) -> ChartLayout {
let mut layout = ChartLayout::default();
if area.height == 0 || area.width == 0 {
return layout;
@ -279,7 +279,7 @@ where
.fold(0, |acc, l| max(l.as_ref().width(), acc))
as u16;
if let Some(x_labels) = self.x_axis.labels {
if x_labels.len() > 0 {
if !x_labels.is_empty() {
max_width = max(max_width, x_labels[0].as_ref().width() as u16);
}
}
@ -341,16 +341,16 @@ where
LX: AsRef<str>,
LY: AsRef<str>,
{
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let chart_area = match self.block {
Some(ref mut b) => {
b.draw(area, buf);
b.inner(area)
}
None => *area,
None => area,
};
let layout = self.layout(&chart_area);
let layout = self.layout(chart_area);
let graph_area = layout.graph_area;
if graph_area.width < 1 || graph_area.height < 1 {
return;
@ -456,7 +456,7 @@ where
color: dataset.style.fg,
});
})
.draw(&graph_area, buf);
.draw(graph_area, buf);
}
}
}
@ -464,7 +464,7 @@ where
if let Some(legend_area) = layout.legend_area {
Block::default()
.borders(Borders::ALL)
.draw(&legend_area, buf);
.draw(legend_area, buf);
for (i, dataset) in self.datasets.iter().enumerate() {
buf.set_string(
legend_area.x + 1,

@ -61,13 +61,13 @@ impl<'a> Gauge<'a> {
}
impl<'a> Widget for Gauge<'a> {
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let gauge_area = match self.block {
Some(ref mut b) => {
b.draw(area, buf);
b.inner(area)
}
None => *area,
None => area,
};
if gauge_area.height < 1 {
return;

@ -45,7 +45,7 @@ where
pub fn new(items: L) -> List<'b, 'i, L, D> {
List {
block: None,
items: items,
items,
style: Default::default(),
start_corner: Corner::TopLeft,
}
@ -80,13 +80,13 @@ where
L: Iterator<Item = Item<'i, D>>,
D: Display,
{
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let list_area = match self.block {
Some(ref mut b) => {
b.draw(area, buf);
b.inner(area)
}
None => *area,
None => area,
};
if list_area.width < 1 || list_area.height < 1 {
@ -206,10 +206,10 @@ impl<'b> SelectableList<'b> {
}
impl<'b> Widget for SelectableList<'b> {
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let list_area = match self.block {
Some(ref mut b) => b.inner(area),
None => *area,
None => area,
};
let list_height = list_area.height as usize;

@ -47,7 +47,7 @@ bitflags! {
pub trait Widget {
/// Draws the current state of the widget in the given buffer. That the only method required to
/// implement a custom widget.
fn draw(&mut self, area: &Rect, buf: &mut Buffer);
fn draw(&mut self, area: Rect, buf: &mut Buffer);
/// Helper method to quickly set the background of all cells inside the specified area.
fn background(&self, area: &Rect, buf: &mut Buffer, color: Color) {
for y in area.top()..area.bottom() {
@ -57,7 +57,7 @@ pub trait Widget {
}
}
/// Helper method that can be chained with a widget's builder methods to render it.
fn render<B>(&mut self, f: &mut Frame<B>, area: &Rect)
fn render<B>(&mut self, f: &mut Frame<B>, area: Rect)
where
Self: Sized,
B: Backend,

@ -105,13 +105,13 @@ impl<'a, 't, T> Widget for Paragraph<'a, 't, T>
where
T: Iterator<Item = &'t Text<'t>>,
{
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let text_area = match self.block {
Some(ref mut b) => {
b.draw(area, buf);
b.inner(area)
}
None => *area,
None => area,
};
if text_area.height < 1 {
@ -121,11 +121,11 @@ where
self.background(&text_area, buf, self.style.bg);
let style = self.style;
let styled = self.text.by_ref().flat_map(|t| match t {
&Text::Data(d) => {
let styled = self.text.by_ref().flat_map(|t| match *t {
Text::Data(d) => {
Either::Left(UnicodeSegmentation::graphemes(d, true).map(|g| (g, style)))
}
&Text::StyledData(d, s) => {
Text::StyledData(d, s) => {
Either::Right(UnicodeSegmentation::graphemes(d, true).map(move |g| (g, s)))
}
});
@ -154,58 +154,53 @@ where
let mut y = 0;
let mut remove_leading_whitespaces = false;
loop {
if let Some((string, style)) = styled.next() {
if string == "\n" {
x = match self.alignment {
Alignment::Center => {
(text_area.width / 2).saturating_sub(get_cur_line_len(&mut styled) / 2)
}
Alignment::Right => {
(text_area.width).saturating_sub(get_cur_line_len(&mut styled))
}
Alignment::Left => 0,
};
y += 1;
continue;
}
if x >= text_area.width {
if self.wrapping {
x = match self.alignment {
Alignment::Center => (text_area.width / 2)
.saturating_sub(get_cur_line_len(&mut styled) / 2),
Alignment::Right => {
(text_area.width).saturating_sub(get_cur_line_len(&mut styled) + 1)
}
Alignment::Left => 0,
};
y += 1;
remove_leading_whitespaces = true
while let Some((string, style)) = styled.next() {
if string == "\n" {
x = match self.alignment {
Alignment::Center => {
(text_area.width / 2).saturating_sub(get_cur_line_len(&mut styled) / 2)
}
}
if remove_leading_whitespaces && string == " " {
continue;
}
remove_leading_whitespaces = false;
if y > text_area.height + self.scroll - 1 {
break;
}
if y < self.scroll {
continue;
}
buf.get_mut(text_area.left() + x, text_area.top() + y - self.scroll)
.set_symbol(string)
.set_style(style);
x += string.width() as u16;
} else {
Alignment::Right => {
(text_area.width).saturating_sub(get_cur_line_len(&mut styled))
}
Alignment::Left => 0,
};
y += 1;
continue;
}
if x >= text_area.width && self.wrapping {
x = match self.alignment {
Alignment::Center => {
(text_area.width / 2).saturating_sub(get_cur_line_len(&mut styled) / 2)
}
Alignment::Right => {
(text_area.width).saturating_sub(get_cur_line_len(&mut styled) + 1)
}
Alignment::Left => 0,
};
y += 1;
remove_leading_whitespaces = true
}
if remove_leading_whitespaces && string == " " {
continue;
}
remove_leading_whitespaces = false;
if y > text_area.height + self.scroll - 1 {
break;
}
if y < self.scroll {
continue;
}
buf.get_mut(text_area.left() + x, text_area.top() + y - self.scroll)
.set_symbol(string)
.set_style(style);
x += string.width() as u16;
}
}
}

@ -68,13 +68,13 @@ impl<'a> Sparkline<'a> {
}
impl<'a> Widget for Sparkline<'a> {
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let spark_area = match self.block {
Some(ref mut b) => {
b.draw(area, buf);
b.inner(area)
}
None => *area,
None => area,
};
if spark_area.height < 1 {

@ -99,10 +99,10 @@ where
Table {
block: None,
style: Style::default(),
header: header,
header,
header_style: Style::default(),
widths: &[],
rows: rows,
rows,
column_spacing: 1,
}
}
@ -156,14 +156,14 @@ where
D: Iterator<Item = I>,
R: Iterator<Item = Row<'i, D, I>>,
{
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
// Render block if necessary and get the drawing area
let table_area = match self.block {
Some(ref mut b) => {
b.draw(area, buf);
b.inner(area)
}
None => *area,
None => area,
};
// Set the background

@ -87,13 +87,13 @@ impl<'a, T> Widget for Tabs<'a, T>
where
T: AsRef<str>,
{
fn draw(&mut self, area: &Rect, buf: &mut Buffer) {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let tabs_area = match self.block {
Some(ref mut b) => {
b.draw(area, buf);
b.inner(area)
}
None => *area,
None => area,
};
if tabs_area.height < 1 {

Loading…
Cancel
Save