aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.rs
diff options
context:
space:
mode:
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,
+ }
+ }
+}