Introduce builder methods for Text to make it more ergonomic

This commit is contained in:
Antoine Büsch 2018-09-06 11:54:29 +10:00 committed by Florian Dehau
parent 70561b7c54
commit ff47f9480b
3 changed files with 20 additions and 10 deletions

View File

@ -55,15 +55,15 @@ fn draw(t: &mut Terminal<MouseBackend>, size: Rect) -> Result<(), io::Error> {
.split(size); .split(size);
let text = [ let text = [
Text::Data("This a line\n".into()), Text::data("This a line\n"),
Text::StyledData("This a line\n".into(), Style::default().fg(Color::Red)), Text::styled_data("This a line\n", Style::default().fg(Color::Red)),
Text::StyledData("This a line\n".into(), Style::default().bg(Color::Blue)), Text::styled_data("This a line\n", Style::default().bg(Color::Blue)),
Text::StyledData( Text::styled_data(
"This a longer line\n".into(), "This a longer line\n",
Style::default().modifier(Modifier::CrossedOut), Style::default().modifier(Modifier::CrossedOut),
), ),
Text::StyledData( Text::styled_data(
"This a line\n".into(), "This a line\n",
Style::default().fg(Color::Green).modifier(Modifier::Italic), Style::default().fg(Color::Green).modifier(Modifier::Italic),
), ),
]; ];

View File

@ -114,7 +114,7 @@ fn draw(t: &mut Terminal<AlternateScreenBackend>, app: &App) -> Result<(), io::E
.margin(2) .margin(2)
.constraints([Constraint::Length(3), Constraint::Min(1)].as_ref()) .constraints([Constraint::Length(3), Constraint::Min(1)].as_ref())
.split(app.size); .split(app.size);
Paragraph::new([Text::Data((&app.input).into())].iter()) Paragraph::new([Text::data(&app.input)].iter())
.style(Style::default().fg(Color::Yellow)) .style(Style::default().fg(Color::Yellow))
.block(Block::default().borders(Borders::ALL).title("Input")) .block(Block::default().borders(Borders::ALL).title("Input"))
.render(&mut f, chunks[0]); .render(&mut f, chunks[0]);

View File

@ -21,8 +21,8 @@ use widgets::{Block, Widget};
/// # use tui::layout::{Alignment}; /// # use tui::layout::{Alignment};
/// # fn main() { /// # fn main() {
/// let text = [ /// let text = [
/// Text::Data("First line\n".into()), /// Text::data("First line\n"),
/// Text::StyledData("Second line\n".into(), Style::default().fg(Color::Red)) /// Text::styled_data("Second line\n", Style::default().fg(Color::Red))
/// ]; /// ];
/// Paragraph::new(text.iter()) /// Paragraph::new(text.iter())
/// .block(Block::default().title("Paragraph").borders(Borders::ALL)) /// .block(Block::default().title("Paragraph").borders(Borders::ALL))
@ -56,6 +56,16 @@ pub enum Text<'b> {
StyledData(Cow<'b, str>, Style), StyledData(Cow<'b, str>, Style),
} }
impl<'b> Text<'b> {
pub fn data<D: Into<Cow<'b, str>>>(data: D) -> Text<'b> {
Text::Data(data.into())
}
pub fn styled_data<D: Into<Cow<'b, str>>>(data: D, style: Style) -> Text<'b> {
Text::StyledData(data.into(), style)
}
}
impl<'a, 't, T> Paragraph<'a, 't, T> impl<'a, 't, T> Paragraph<'a, 't, T>
where where
T: Iterator<Item = &'t Text<'t>>, T: Iterator<Item = &'t Text<'t>>,