From 8836f0681916f72d6e4b6b4eee1b83b7da7b501e Mon Sep 17 00:00:00 2001 From: Dheepak Krishnamurthy Date: Sat, 10 Oct 2020 19:57:17 -0600 Subject: [PATCH] Refactor more code to use task_report_table --- src/app.rs | 102 ++++++++++++++++++++++++++++------------------------- 1 file changed, 53 insertions(+), 49 deletions(-) diff --git a/src/app.rs b/src/app.rs index a78c734..60a2da3 100644 --- a/src/app.rs +++ b/src/app.rs @@ -199,6 +199,58 @@ impl TaskReportTable { } + pub fn simplify_table(&mut self) -> (Vec>, Vec, Vec) { + // find which columns are empty + let null_columns_len; + if !self.tasks.is_empty() { + null_columns_len = self.tasks[0].len(); + } else { + return (vec![], vec![], vec![]); + } + + let mut null_columns = vec![0; null_columns_len]; + for task in &self.tasks { + for (i, s) in task.iter().enumerate() { + null_columns[i] += s.len(); + } + } + + // filter out columns where everything is empty + let mut tasks = vec![]; + for task in &self.tasks { + let t = task.clone(); + let t: Vec = t + .iter() + .enumerate() + .filter(|&(i, _)| null_columns[i] != 0) + .map(|(_, e)| e.to_owned()) + .collect(); + tasks.push(t); + } + + // filter out header where all columns are empty + let headers: Vec = self + .labels + .iter() + .enumerate() + .filter(|&(i, _)| null_columns[i] != 0) + .map(|(_, e)| e.to_owned()) + .collect(); + + // set widths proportional to the content + let mut widths: Vec = 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::(), + i16::max_value().into(), + ) as i16 + } + } + (tasks, headers, widths) + } + + pub fn get_string_attribute(&self, attribute: &str, task: &Task) -> String { let tags = vec![ "PROJECT", @@ -786,55 +838,7 @@ impl TTApp { self.task_report_table.generate_table(alltasks); - // find which columns are empty - let null_columns_len; - if !self.task_report_table.tasks.is_empty() { - null_columns_len = self.task_report_table.tasks[0].len(); - } else { - return (vec![], vec![], vec![]); - } - - let mut null_columns = vec![0; null_columns_len]; - for task in &self.task_report_table.tasks { - for (i, s) in task.iter().enumerate() { - null_columns[i] += s.len(); - } - } - - // filter out columns where everything is empty - let mut tasks = vec![]; - for task in &self.task_report_table.tasks { - let t = task.clone(); - let t: Vec = t - .iter() - .enumerate() - .filter(|&(i, _)| null_columns[i] != 0) - .map(|(_, e)| e.to_owned()) - .collect(); - tasks.push(t); - } - - // filter out header where all columns are empty - let headers: Vec = self - .task_report_table.labels - .iter() - .enumerate() - .filter(|&(i, _)| null_columns[i] != 0) - .map(|(_, e)| e.to_owned()) - .collect(); - - // set widths proportional to the content - let mut widths: Vec = 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::(), - i16::max_value().into(), - ) as i16 - } - } - - (tasks, headers, widths) + return self.task_report_table.simplify_table(); } pub fn update(&mut self) {