mirror of
https://github.com/kdheepak/taskwarrior-tui.git
synced 2025-08-25 08:47:18 +02:00
Update to tui v0.12
This commit is contained in:
parent
54bda8dc94
commit
410e9f4ca9
3 changed files with 23 additions and 20 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -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",
|
||||||
|
|
|
@ -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"] }
|
||||||
|
|
37
src/app.rs
37
src/app.rs
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue