From aef8e74b849c7861dce63c0e2c1d0a8bdfa379fe Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 18 Aug 2019 14:07:55 -0400 Subject: split out the full table view into a separate view --- src/views/txn_tables.rs | 80 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/views/txn_tables.rs (limited to 'src/views/txn_tables.rs') diff --git a/src/views/txn_tables.rs b/src/views/txn_tables.rs new file mode 100644 index 0000000..36e535b --- /dev/null +++ b/src/views/txn_tables.rs @@ -0,0 +1,80 @@ +use cursive::view::Identifiable; + +pub struct TxnTables { + view: super::util::FullView, +} + +impl cursive::view::ViewWrapper for TxnTables { + cursive::wrap_impl!( + self.view: super::util::FullView + ); +} + +impl TxnTables { + pub fn new(id: &'static str, budget: &crate::ynab::Budget) -> Self { + let mut layout = cursive::views::LinearLayout::vertical(); + + layout.add_child( + cursive::views::TextView::new("Selected: $0.00 (0 transactions)") + .h_align(cursive::align::HAlign::Right) + .with_id("selected_total"), + ); + + let mut inflows_table = inflows_table(&budget); + layout.add_child(cursive::views::TextView::new(format!( + "Inflows: {} ({} transaction{}", + crate::ynab::format_amount(inflows_table.amount()), + inflows_table.len(), + if inflows_table.len() == 1 { ") " } else { "s)" } + ))); + layout.add_child(cursive::views::CircularFocus::wrap_arrows( + cursive::views::BoxView::with_min_height( + std::cmp::min(std::cmp::max(inflows_table.len(), 1), 5) + 2, + cursive::views::BoxView::with_full_width(inflows_table), + ), + )); + + layout.add_child(cursive::views::TextView::new(" ")); + + let mut outflows_table = outflows_table(&budget); + layout.add_child(cursive::views::TextView::new(format!( + "Outflows: {} ({} transaction{}", + crate::ynab::format_amount(outflows_table.amount()), + outflows_table.len(), + if outflows_table.len() == 1 { + ") " + } else { + "s)" + } + ))); + layout.add_child(cursive::views::CircularFocus::wrap_arrows( + cursive::views::BoxView::with_full_screen(outflows_table), + )); + + TxnTables { + view: cursive::views::OnEventView::new(layout.with_id(id)), + } + } +} + +fn inflows_table(budget: &crate::ynab::Budget) -> super::txn_table::TxnTable { + let inflows = budget + .reimbursables() + .iter() + .filter(|t| !t.reimbursed && t.amount > 0) + .cloned() + .collect(); + super::txn_table::TxnTable::new(inflows, "inflows_table") +} + +fn outflows_table( + budget: &crate::ynab::Budget, +) -> super::txn_table::TxnTable { + let outflows = budget + .reimbursables() + .iter() + .filter(|t| !t.reimbursed && t.amount <= 0) + .cloned() + .collect(); + super::txn_table::TxnTable::new(outflows, "outflows_table") +} -- cgit v1.2.3-54-g00ecf