From f795173886c3bd209b8d7657d6926ec3411d21d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20B=C3=BCsch?= Date: Sat, 8 Sep 2018 16:03:30 +1000 Subject: [PATCH] Unify Item and Text --- examples/demo.rs | 4 +-- examples/list.rs | 4 +-- examples/user_input.rs | 4 +-- src/widgets/list.rs | 61 +++++++++++++++++------------------------- src/widgets/mod.rs | 2 +- 5 files changed, 31 insertions(+), 44 deletions(-) diff --git a/examples/demo.rs b/examples/demo.rs index fcdf1df..e164601 100644 --- a/examples/demo.rs +++ b/examples/demo.rs @@ -19,7 +19,7 @@ use tui::layout::{Constraint, Direction, Layout, Rect}; 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, + Axis, BarChart, Block, Borders, Chart, Dataset, Gauge, List, Marker, Paragraph, Row, SelectableList, Sparkline, Table, Tabs, Text, Widget, }; use tui::{Frame, Terminal}; @@ -364,7 +364,7 @@ fn draw_charts(f: &mut Frame, app: &App, area: Rect) { let error_style = Style::default().fg(Color::Magenta); let critical_style = Style::default().fg(Color::Red); let events = app.events.iter().map(|&(evt, level)| { - Item::StyledData( + Text::styled( format!("{}: {}", level, evt), match level { "ERROR" => error_style, diff --git a/examples/list.rs b/examples/list.rs index f26e8e7..7abdba6 100644 --- a/examples/list.rs +++ b/examples/list.rs @@ -12,7 +12,7 @@ use termion::input::TermRead; use tui::backend::MouseBackend; 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::widgets::{Block, Borders, List, SelectableList, Text, Widget}; use tui::Terminal; struct App<'a> { @@ -188,7 +188,7 @@ fn draw(t: &mut Terminal, app: &App) -> Result<(), io::Error> { .render(&mut f, chunks[0]); { let events = app.events.iter().map(|&(evt, level)| { - Item::StyledData( + Text::styled( format!("{}: {}", level, evt), match level { "ERROR" => app.error_style, diff --git a/examples/user_input.rs b/examples/user_input.rs index d37b9e6..a7233fd 100644 --- a/examples/user_input.rs +++ b/examples/user_input.rs @@ -22,7 +22,7 @@ use termion::input::TermRead; use tui::backend::AlternateScreenBackend; use tui::layout::{Constraint, Direction, Layout, Rect}; use tui::style::{Color, Style}; -use tui::widgets::{Block, Borders, Item, List, Paragraph, Text, Widget}; +use tui::widgets::{Block, Borders, List, Paragraph, Text, Widget}; use tui::Terminal; struct App { @@ -122,7 +122,7 @@ fn draw(t: &mut Terminal, app: &App) -> Result<(), io::E app.messages .iter() .enumerate() - .map(|(i, m)| Item::Data(format!("{}: {}", i, m))), + .map(|(i, m)| Text::raw(format!("{}: {}", i, m))), ).block(Block::default().borders(Borders::ALL).title("Messages")) .render(&mut f, chunks[1]); }) diff --git a/src/widgets/list.rs b/src/widgets/list.rs index f79ffde..d9c3955 100644 --- a/src/widgets/list.rs +++ b/src/widgets/list.rs @@ -1,4 +1,3 @@ -use std::fmt::Display; use std::iter; use std::iter::Iterator; @@ -7,16 +6,11 @@ use unicode_width::UnicodeWidthStr; use buffer::Buffer; use layout::{Corner, Rect}; use style::Style; -use widgets::{Block, Widget}; +use widgets::{Block, Text, Widget}; -pub enum Item { - Data(D), - StyledData(D, Style), -} - -pub struct List<'b, L, D> +pub struct List<'b, L> where - L: Iterator>, + L: Iterator>, { block: Option>, items: L, @@ -24,11 +18,11 @@ where start_corner: Corner, } -impl<'b, L, D> Default for List<'b, L, D> +impl<'b, L> Default for List<'b, L> where - L: Iterator> + Default, + L: Iterator> + Default, { - fn default() -> List<'b, L, D> { + fn default() -> List<'b, L> { List { block: None, items: L::default(), @@ -38,11 +32,11 @@ where } } -impl<'b, L, D> List<'b, L, D> +impl<'b, L> List<'b, L> where - L: Iterator>, + L: Iterator>, { - pub fn new(items: L) -> List<'b, L, D> { + pub fn new(items: L) -> List<'b, L> { List { block: None, items, @@ -51,34 +45,33 @@ where } } - pub fn block(mut self, block: Block<'b>) -> List<'b, L, D> { + pub fn block(mut self, block: Block<'b>) -> List<'b, L> { self.block = Some(block); self } - pub fn items(mut self, items: I) -> List<'b, L, D> + pub fn items(mut self, items: I) -> List<'b, L> where - I: IntoIterator, IntoIter = L>, + I: IntoIterator, IntoIter = L>, { self.items = items.into_iter(); self } - pub fn style(mut self, style: Style) -> List<'b, L, D> { + pub fn style(mut self, style: Style) -> List<'b, L> { self.style = style; self } - pub fn start_corner(mut self, corner: Corner) -> List<'b, L, D> { + pub fn start_corner(mut self, corner: Corner) -> List<'b, L> { self.start_corner = corner; self } } -impl<'b, L, D> Widget for List<'b, L, D> +impl<'b, L> Widget for List<'b, L> where - L: Iterator>, - D: Display, + L: Iterator>, { fn draw(&mut self, area: Rect, buf: &mut Buffer) { let list_area = match self.block { @@ -108,17 +101,11 @@ where _ => (list_area.left(), list_area.top() + i as u16), }; match item { - Item::Data(ref v) => { - buf.set_stringn( - x, - y, - format!("{}", v), - list_area.width as usize, - Style::default(), - ); + Text::Raw(ref v) => { + buf.set_stringn(x, y, v, list_area.width as usize, Style::default()); } - Item::StyledData(ref v, s) => { - buf.set_stringn(x, y, format!("{}", v), list_area.width as usize, s); + Text::Styled(ref v, s) => { + buf.set_stringn(x, y, v, list_area.width as usize, s); } }; } @@ -239,15 +226,15 @@ impl<'b> Widget for SelectableList<'b> { .items .iter() .enumerate() - .map(|(i, item)| { + .map(|(i, &item)| { if let Some(s) = selected { if i == s { - Item::StyledData(format!("{} {}", highlight_symbol, item), highlight_style) + Text::styled(format!("{} {}", highlight_symbol, item), highlight_style) } else { - Item::StyledData(format!("{} {}", blank_symbol, item), self.style) + Text::styled(format!("{} {}", blank_symbol, item), self.style) } } else { - Item::StyledData(item.to_string(), self.style) + Text::styled(item, self.style) } }) .skip(offset as usize); diff --git a/src/widgets/mod.rs b/src/widgets/mod.rs index b4d42eb..63358ac 100644 --- a/src/widgets/mod.rs +++ b/src/widgets/mod.rs @@ -15,7 +15,7 @@ pub use self::barchart::BarChart; pub use self::block::Block; pub use self::chart::{Axis, Chart, Dataset, Marker}; pub use self::gauge::Gauge; -pub use self::list::{Item, List, SelectableList}; +pub use self::list::{List, SelectableList}; pub use self::paragraph::Paragraph; pub use self::sparkline::Sparkline; pub use self::table::{Row, Table};