aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-08-18 23:45:33 -0400
committerJesse Luehrs <doy@tozt.net>2019-08-18 23:45:33 -0400
commit3539ceb20f5383a332a8ad1fcab816cf083f277e (patch)
tree5cea964a052c7c0bd967ede1d4283b75eba58ea5 /src/app.rs
parentca8b49db6c369bc9b5c71a43ca7eb31140223cf1 (diff)
downloadynab-api-3539ceb20f5383a332a8ad1fcab816cf083f277e.tar.gz
ynab-api-3539ceb20f5383a332a8ad1fcab816cf083f277e.zip
better error handling
Diffstat (limited to 'src/app.rs')
-rw-r--r--src/app.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/app.rs b/src/app.rs
new file mode 100644
index 0000000..22bf543
--- /dev/null
+++ b/src/app.rs
@@ -0,0 +1,46 @@
+pub struct App {
+ cursive: cursive::Cursive,
+}
+
+impl App {
+ pub fn new(budget: crate::ynab::Budget) -> Self {
+ let mut app = cursive::Cursive::default();
+ let term_width = app.screen_size().x;
+ app.set_theme(Self::theme());
+ app.add_global_callback('q', |s| s.quit());
+
+ let mut layout = cursive::views::LinearLayout::vertical();
+ layout.add_child(cursive::views::TextView::new(format!(
+ "Budget: {} ({})\n{}",
+ budget.name(),
+ budget.id(),
+ "=".repeat(term_width),
+ )));
+
+ layout.add_child(crate::views::TxnTables::new("txn_tables", &budget));
+
+ app.set_user_data(budget);
+ app.add_fullscreen_layer(layout);
+
+ Self { cursive: app }
+ }
+
+ pub fn run(&mut self) {
+ self.cursive.run();
+ }
+
+ fn theme() -> cursive::theme::Theme {
+ let mut palette = cursive::theme::Palette::default();
+ palette[cursive::theme::PaletteColor::Background] =
+ cursive::theme::Color::TerminalDefault;
+ palette[cursive::theme::PaletteColor::View] =
+ cursive::theme::Color::TerminalDefault;
+ palette[cursive::theme::PaletteColor::Primary] =
+ cursive::theme::Color::TerminalDefault;
+ cursive::theme::Theme {
+ shadow: false,
+ borders: cursive::theme::BorderStyle::Simple,
+ palette,
+ }
+ }
+}