提交 ec0539d3 编写于 作者: B Ben S

Make the cells optional for display Rows.

This will be used to not provide any information for the rows that will have no data (attributes, errors).
上级 5d0bd371
......@@ -113,7 +113,7 @@ impl Details {
struct Row {
/// Vector of cells to display.
cells: Vec<Cell>,
cells: Option<Vec<Cell>>,
/// This file's name, in coloured output. The name is treated separately
/// from the other cells, as it never requires padding.
......@@ -135,6 +135,15 @@ struct Row {
children: bool,
}
impl Row {
fn column_width(&self, index: usize) -> usize {
match self.cells {
Some(ref cells) => cells[index].length,
None => 0,
}
}
}
/// A **Table** object gets built up by the view as it lists files and
/// directories.
......@@ -192,7 +201,7 @@ impl<U> Table<U> where U: Users {
pub fn add_header(&mut self) {
let row = Row {
depth: 0,
cells: self.columns.iter().map(|c| Cell::paint(self.colours.header, c.header())).collect(),
cells: Some(self.columns.iter().map(|c| Cell::paint(self.colours.header, c.header())).collect()),
name: Cell::paint(self.colours.header, "Name"),
last: false,
attrs: Vec::new(),
......@@ -211,7 +220,7 @@ impl<U> Table<U> where U: Users {
pub fn add_file_with_cells(&mut self, cells: Vec<Cell>, file: &File, depth: usize, last: bool, links: bool) {
let row = Row {
depth: depth,
cells: cells,
cells: Some(cells),
name: Cell { text: filename(file, &self.colours, links), length: file.file_name_width() },
last: last,
attrs: file.xattrs.clone(),
......@@ -398,19 +407,24 @@ impl<U> Table<U> where U: Users {
// each column, then formatting each cell in that column to be the
// width of that one.
let column_widths: Vec<usize> = (0 .. self.columns.len())
.map(|n| self.rows.iter().map(|row| row.cells[n].length).max().unwrap_or(0))
.map(|n| self.rows.iter().map(|row| row.column_width(n)).max().unwrap_or(0))
.collect();
for row in self.rows.iter() {
let mut cell = Cell::empty();
for (n, width) in column_widths.iter().enumerate() {
match self.columns[n].alignment() {
Alignment::Left => { cell.append(&row.cells[n]); cell.add_spaces(width - row.cells[n].length); }
Alignment::Right => { cell.add_spaces(width - row.cells[n].length); cell.append(&row.cells[n]); }
}
if let Some(ref cells) = row.cells {
for (n, width) in column_widths.iter().enumerate() {
match self.columns[n].alignment() {
Alignment::Left => { cell.append(&cells[n]); cell.add_spaces(width - cells[n].length); }
Alignment::Right => { cell.add_spaces(width - cells[n].length); cell.append(&cells[n]); }
}
cell.add_spaces(1);
cell.add_spaces(1);
}
}
else {
cell.add_spaces(column_widths.len())
}
let mut filename = String::new();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册