Update to tui v0.12

This commit is contained in:
Dheepak Krishnamurthy 2020-10-11 00:18:27 -06:00
parent 54bda8dc94
commit 410e9f4ca9
3 changed files with 23 additions and 20 deletions

4
Cargo.lock generated
View file

@ -792,9 +792,9 @@ dependencies = [
[[package]] [[package]]
name = "tui" name = "tui"
version = "0.10.0" version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a977b0bb2e2033a6fef950f218f13622c3c34e59754b704ce3492dedab1dfe95" checksum = "c2eaeee894a1e9b90f80aa466fe59154fdb471980b5e104d8836fcea309ae17e"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cassowary", "cassowary",

View file

@ -27,7 +27,7 @@ rand = "0.7"
shlex = "0.1" shlex = "0.1"
chrono = "0.4" chrono = "0.4"
unicode-width = "0.1" unicode-width = "0.1"
tui = { version = "0.10", optional = true, default-features = false } tui = { version = "0.12", optional = true, default-features = false }
crossterm = { version = "0.17", optional = true, default-features = false } crossterm = { version = "0.17", optional = true, default-features = false }
rustyline = "6.3.0" rustyline = "6.3.0"
uuid = { version = "0.8.1", features = ["serde", "v4"] } uuid = { version = "0.8.1", features = ["serde", "v4"] }

View file

@ -198,13 +198,13 @@ impl TaskReportTable {
} }
} }
pub fn simplify_table(&mut self) -> (Vec<Vec<String>>, Vec<String>, Vec<i16>) { pub fn simplify_table(&mut self) -> (Vec<Vec<String>>, Vec<String>) {
// find which columns are empty // find which columns are empty
let null_columns_len; let null_columns_len;
if !self.tasks.is_empty() { if !self.tasks.is_empty() {
null_columns_len = self.tasks[0].len(); null_columns_len = self.tasks[0].len();
} else { } else {
return (vec![], vec![], vec![]); return (vec![], vec![]);
} }
let mut null_columns = vec![0; null_columns_len]; let mut null_columns = vec![0; null_columns_len];
@ -236,17 +236,7 @@ impl TaskReportTable {
.map(|(_, e)| e.to_owned()) .map(|(_, e)| e.to_owned())
.collect(); .collect();
// set widths proportional to the content (tasks, headers)
let mut widths: Vec<i16> = vec![0; tasks[0].len()];
for task in &tasks {
for (i, attr) in task.iter().enumerate() {
widths[i] = std::cmp::min(
attr.len() as i64 * 100 / task.iter().map(|s| s.len() as i64).sum::<i64>(),
i16::max_value().into(),
) as i16
}
}
(tasks, headers, widths)
} }
pub fn get_string_attribute(&self, attribute: &str, task: &Task) -> String { pub fn get_string_attribute(&self, attribute: &str, task: &Task) -> String {
@ -770,11 +760,23 @@ impl TTApp {
} }
fn draw_task_report(&mut self, f: &mut Frame<impl Backend>, rect: Rect) { fn draw_task_report(&mut self, f: &mut Frame<impl Backend>, rect: Rect) {
let (tasks, headers, widths) = self.task_report(); let (tasks, headers) = self.task_report();
if tasks.is_empty() { if tasks.is_empty() {
f.render_widget(Block::default().borders(Borders::ALL).title("Task next"), rect); f.render_widget(Block::default().borders(Borders::ALL).title("Task next"), rect);
return; return;
} }
// set widths proportional to the content
let mut widths: Vec<i16> = vec![0; tasks[0].len()];
for task in &tasks {
for (i, attr) in task.iter().enumerate() {
widths[i] = std::cmp::min(
attr.len() as i64 * 100 / task.iter().map(|s| s.len() as i64).sum::<i64>(),
i16::max_value().into(),
) as i16
}
}
let selected = self.state.selected().unwrap_or_default(); let selected = self.state.selected().unwrap_or_default();
let header = headers.iter(); let header = headers.iter();
let mut rows = vec![]; let mut rows = vec![];
@ -786,6 +788,7 @@ impl TTApp {
} }
rows.push(Row::StyledData(task.into_iter(), style)); rows.push(Row::StyledData(task.into_iter(), style));
} }
let constraints: Vec<Constraint> = widths let constraints: Vec<Constraint> = widths
.iter() .iter()
.map(|i| Constraint::Length((*i).try_into().unwrap_or(10))) .map(|i| Constraint::Length((*i).try_into().unwrap_or(10)))
@ -800,14 +803,14 @@ impl TTApp {
f.render_stateful_widget(t, rect, &mut self.state); f.render_stateful_widget(t, rect, &mut self.state);
} }
pub fn task_report(&mut self) -> (Vec<Vec<String>>, Vec<String>, Vec<i16>) { pub fn task_report(&mut self) -> (Vec<Vec<String>>, Vec<String>) {
let alltasks = &*(self.tasks.lock().unwrap()); let alltasks = &*(self.tasks.lock().unwrap());
self.task_report_table.generate_table(alltasks); self.task_report_table.generate_table(alltasks);
let (tasks, headers, widths) = self.task_report_table.simplify_table(); let (tasks, headers) = self.task_report_table.simplify_table();
(tasks, headers, widths) (tasks, headers)
} }
pub fn update(&mut self) { pub fn update(&mut self) {