blob: 22bf543dda01766ea30263f2d07c95c17bf4ea16 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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,
}
}
}
|