gui: Save PDF on every report; short and narrow windows hold up
Reports get a Save PDF button beside Copy for a spreadsheet. It typesets the report as it's set up on screen (range, months/quarters/years, comparison) through ledger-import's Typst statement template, the same one the CPA package uses, in the background, writes it to the Downloads folder (never the books: the viewer stays read-only), and opens it. - ledger-import: Statement.percent_from marks percentage columns (comparison %, % of income), typeset as 12.5% with no dollar sign; wide statements turn the page, and past seven columns set smaller so a year of months fits; statement() is public for other callers. - Compared columns that read the same (Jan 1 - Oct 12 vs a year earlier) now say which year, on screen and on paper. - Short windows: the sidebar's and rail's links scroll above the status box instead of under it. The search palette fits the window. - A test typesets every table-backed report from the demo books, plain, by month, and compared (PDF_DIR keeps the files). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GWVo7x3UHw5kwCUaWxiejX
This commit is contained in:
1 parent
ea996f6e7e
commit
12308fe3e9
9 files changed
+444
-101
No files matched your search
@@ -71,7 +71,9 @@ impl Palette {
|
||||
.inner_margin(Margin::same(10)),
|
||||
)
|
||||
.show(ctx, |ui| {
|
||||
ui.set_width(620.0);
|
||||
// Never wider or taller than the window allows.
|
||||
let screen = ctx.content_rect().size();
|
||||
ui.set_width(620.0_f32.min(screen.x - 48.0).max(200.0));
|
||||
let edit = egui::TextEdit::singleline(&mut self.query)
|
||||
.hint_text("Search entries, accounts, vendors, documents, reports…")
|
||||
.font(theme::regular(16.0))
|
||||
@@ -89,7 +91,7 @@ impl Palette {
|
||||
crate::widgets::rule(ui);
|
||||
ui.add_space(4.0);
|
||||
egui::ScrollArea::vertical()
|
||||
.max_height(420.0)
|
||||
.max_height(420.0_f32.min(screen.y - 160.0).max(120.0))
|
||||
.show(ui, |ui| {
|
||||
if items.is_empty() {
|
||||
ui.label(RichText::new("Nothing matches.").color(p.muted));
|
||||
|
||||
Reference in new issue
Block a user