Skip to content

feat(tables): promote lambda delay and accel enrichment to top-level tools, add PNG/PDF export, release 2.15.0 - #91

Merged
SomethingNew71 merged 5 commits into
devfrom
feature/table-tools
Sep 18, 2026
Merged

SomethingNew71 merged 5 commits into
devfrom
feature/table-tools

Conversation

@SomethingNew71

Copy link
Copy Markdown
Collaborator

Follows #90. Promotes the two table generators from a floating window to top-level tools, adds PNG/PDF export, and bumps the release to 2.15.0.

Summary

Tools, not a window

  • ActiveTool::LambdaDelay and ActiveTool::AccelEnrich sit beside Log Viewer / Scatter Plots / Histogram: switcher pills, View-menu radios, Cmd+4 / Cmd+5. ActiveTool::ALL fixes the order in one place; generator_kind() is the helper the match sites use.
  • src/ui/table_generator.rs is split the way Histogram is: setup (roles, load axis, axes, parameters, Run / Add current file) in the Tool Properties panel, results (heatmap, coverage, per-log reports, notes, event inspector, toolbar) in the central panel. The egui::Window and its open / show_setup / kind flags are gone.
  • State stays app-level (UltraLogApp::table_generator), not per-tab: the accumulators are multi-log by design, so switching tabs or tools does not lose a table. Documented in CLAUDE.md.
  • UltraLogApp::set_active_tool is the single tool-switch entry point (switcher, menu, shortcuts, IPC show_chart / show_scatter_plot): analytics plus table selection reset.
  • Jump from the inspector lands on Log Viewer at the event's time and reopens the tab if it was closed. Axis editors are full-width so they fit the side panel.

PNG / PDF export (src/ui/table_export.rs)

  • Pure renderers over TableAccumulator, sharing tables::export::cell_value with CSV so all four exports blank the same cells and convert delay units identically.
  • PDF: values, counts with confidence markers, axis labels, Helvetica. PNG: Viridis cells and grid lines only (the crate has no font rasterizer, same as the histogram PNG); the toast says so.
  • Wired into Cmd+E, File → Export, and the Tools panel.

Release 2.15.0

  • bump-version.sh 2.15.0; site What's New cards, JSON-LD, meta description / keywords, sitemap.
  • Wiki: new Tuning-Table-Generators page, User-Guide tools list and shortcut table, sidebar (pushed separately).

Tests

  • tests/core/state_tests.rs: ActiveTool::ALL order (shortcut contract), generator_kind / for_generator round trip.
  • src/ui/table_export.rs: PNG dimensions and row order (pixel probe: highest Y bin at the top, matching the on-screen heatmap), PDF header, exclude_low blanking and engine-cycle conversion through the shared path, out-of-range measure index is an error not a panic.
  • src/ui/table_generator.rs: measure_index clamps to the accumulator, clear_selection.
  • Verified in the running app: run Lambda Delay, switch to Accel Enrichment and run it, switch back, the lambda table is still there; cell click → inspector → Jump lands on Log Viewer.
  • cargo fmt --check, cargo clippy --all-targets --all-features -D warnings, cargo test --all-features, cargo doc --no-deps clean.

A Code Reviewer pass ran before opening; its six findings are in the last fix commit.

…vel tools

- ActiveTool gains LambdaDelay and AccelEnrich, plus ALL (switcher, View
  menu and Cmd+1..5 order) and generator_kind() for the shared match sites
- table_generator.rs splits the floating window into a Tool Properties
  setup panel and a central results view; state stays app-level so the
  multi-log accumulators survive tab and tool switches
- set_active_tool() is the single tool-switch entry point (analytics,
  selection reset); Jump lands on Log Viewer at the event's time
- tools panel section becomes two tool buttons with status lines
- table_export.rs: pure renderers over TableAccumulator sharing
  tables::export::cell_value with CSV, so all exports blank and convert
  identically; PDF carries values, counts and axis labels, PNG is cells
  and grid lines (no font rasterizer in the crate)
- wired into Cmd+E, the File > Export submenu and the Tools panel
- guards a missing measure list instead of panicking
- last_error is per generator so a failed Lambda Delay run no longer
  shows under Accel Enrichment
- Jump reopens a closed tab via switch_to_file_tab instead of no-op
- table PNG/PDF export checks for a table before the save dialog
- IPC show_chart / show_scatter_plot go through set_active_tool
- PDF axis edges reuse the CSV fmt_edge so both agree
- tests: PNG row order pixel probe, exclude_low and unit-conversion
  paths, measure_index clamp, clear_selection
… site

- Cargo.toml, README shield, JSON-LD softwareVersion, hero badge, and
  releaseNotes tag all move to 2.15.0
- What's New: Lambda Delay Tables and Accel Enrichment Tables cards lead
  the grid
- SEO: meta description, keywords, JSON-LD description and featureList
  mention the table generators
- Sitemap lastmod refreshed
@SomethingNew71
SomethingNew71 merged commit c03c953 into dev Sep 18, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant