Add history view with day-grouped transaction list

Month navigation with prev/next buttons, transactions grouped by date
with headers (Today/Yesterday/formatted date), category icons, amounts
color-coded green for income and red for expenses, and daily net totals.
This commit is contained in:
2026-03-02 00:09:21 +02:00
parent 00de036de8
commit 854c3469b9
3 changed files with 255 additions and 3 deletions

View File

@@ -2,6 +2,7 @@ use adw::prelude::*;
use outlay_core::db::Database;
use std::rc::Rc;
use crate::history_view::HistoryView;
use crate::log_view::LogView;
pub struct MainWindow {
@@ -31,16 +32,24 @@ impl MainWindow {
let content_stack = gtk::Stack::new();
content_stack.set_transition_type(gtk::StackTransitionType::Crossfade);
// Log view - real widget
let log_view = LogView::new(db);
// Log view
let log_view = LogView::new(db.clone());
let log_scroll = gtk::ScrolledWindow::builder()
.hscrollbar_policy(gtk::PolicyType::Never)
.child(&log_view.container)
.build();
content_stack.add_named(&log_scroll, Some("log"));
// History view
let history_view = HistoryView::new(db.clone());
let history_scroll = gtk::ScrolledWindow::builder()
.hscrollbar_policy(gtk::PolicyType::Never)
.child(&history_view.container)
.build();
content_stack.add_named(&history_scroll, Some("history"));
// Remaining pages are placeholders for now
for item in &SIDEBAR_ITEMS[1..] {
for item in &SIDEBAR_ITEMS[2..] {
let page = adw::StatusPage::builder()
.title(item.label)
.icon_name(item.icon)