Commit Graph
62 Commits
Author SHA1 Message Date
aiongg 5b2a67c236 Merge PR #1252: Dialogs move by their title bar instead of staying pinned to the centre (fixes #1250)
docs/ui-parity.md: status line combined (newest date, both change notes)
2026-10-22 02:34:55 +00:00
Brandon ThomasandClaude Opus 5.5 f5267cb74e docs: one Last updated line per parity doc after merging
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 12:22:25 -04:00
Brandon Thomas f8e916bcd4 Merge pull request #1902 from Shnrqpdr:fix/1846-autofit-keytips
# Conflicts:
#	docs/ui-parity.md
2026-10-19 12:22:06 -04:00
Vedran DobosandClaude Opus 5.5 6ac8ad9216 fix(edit): Ctrl+Enter gives each cell the number format typing gives it
range.fill parsed the input once at the active cell, then put back the old
style of every target that already held a cell, so 5%, $5, 3/4/2026 or
=DATE(...) lost their automatic format there (0.05, 5, 46085), and empty
targets took the active cell's style. Each target now gets what
input_to_cell gives for it (parsed once per distinct style), as typing does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 12:18:34 +02:00
Shnrqpdr 4ed93c3b2c Keytips: letters typed with Alt held continue the sequence (fixes #1846)
Alt+H, O, A (AutoFit Row Height) and Alt+H, O, I (AutoFit Column Width)
ran nothing when Alt was still held for H, as Excel allows: any key with
Alt down cancelled keytips. KeyTips now tracks the left Alt key, and a
letter typed with it held that continues a known sequence is handled as
a keytip letter. Other Alt combinations still cancel; AltGr (right Alt)
and macOS Option are unchanged (#1864).
2026-10-19 00:14:35 -03:00
Marco Arnulfo 89439636d8 Dialogs move by their title bar instead of staying pinned to the centre (fixes #1250) 2026-10-14 08:08:41 +02:00
Brandon ThomasandClaude Opus 5.5 589b59defc Docs: one Last updated line per doc after the merges
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 02:02:41 -04:00
Brandon Thomas 08cbb69585 Merge main into #463
# Conflicts:
#	docs/ui-parity.md
2026-10-13 01:40:00 -04:00
Brandon Thomas 4536bc7fc8 Merge main into #849
# Conflicts:
#	crates/ui-egui/src/grid.rs
#	crates/ui-egui/src/tabs.rs
#	docs/ui-parity.md
2026-10-13 01:07:17 -04:00
Bryan MarkandClaude Opus 5.5 b112b56424 Merge branch 'main' into recent-modified
Brings the branch up to upstream's main (180 more commits). One conflict,
and one thing the merge needed that was no conflict:

- docs/ui-parity.md: every line of both sides is kept, as upstream's own
  merges keep them (its heading has three lines now); this change's
  heading line and history row come first.
- crates/ui-egui/src/i18n/pt.rs: upstream's Portuguese catalog gained a
  "Yesterday" of its own, with the same word ("Ontem"). The one this change
  added is left out: a second arm for the same text is unreachable.

Gate: all eight steps, 1548 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 13:50:13 +09:00
Brandon Thomas fe26486eb5 Merge main into #690
# Conflicts:
#	crates/ui-egui/src/grid.rs
#	docs/ui-parity.md
2026-10-13 00:48:41 -04:00
Brandon Thomas a67b5d2960 Merge main into #794
# Conflicts:
#	ROADMAP.md
#	docs/gaps.md
#	docs/ui-parity.md
2026-10-13 00:08:22 -04:00
Brandon Thomas 7ebda2525c Merge main into #688
# Conflicts:
#	docs/target-app-parity.md
#	docs/ui-parity.md
2026-10-13 00:07:42 -04:00
Brandon Thomas bea16deba8 Merge main into #659
# Conflicts:
#	docs/ui-parity.md
2026-10-13 00:07:38 -04:00
Bryan MarkandClaude Opus 5.5 ed7681ae0c Merge branch 'main' into recent-modified
Brings the branch up to upstream's main (132 commits). Two conflicts, and
one thing the merge needed that was no conflict:

- crates/ui-egui/src/i18n/fr.rs: upstream rewrote the French catalog's
  lines this change sits among. Upstream's lines are kept, and the ten new
  entries are put back where they were, with the plain apostrophe the
  catalog now uses.
- docs/ui-parity.md: both changes are of the same day. Both rows of the
  history are kept, and the heading line names this change.
- crates/ui-egui/src/i18n/sr.rs: upstream gained a Serbian catalog, and
  every string must be in every catalog. The ten new strings are given
  their Serbian (Latin script, as the catalog is). Weeks, months and years
  are shortened, as in the Russian catalog: their endings change with the
  number.

Gate: all eight steps, 1415 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:56:54 +09:00
neilcawse 4d654c5185 UI: Cmd/Ctrl+V doesn't re-paste a pasted cut's clipboard text either 2026-10-12 20:51:39 -04:00
neilcawse fd1ed6649b UI: Paste doesn't re-paste a pasted cut's clipboard text; Paste keytip (H,V,P) pastes the system clipboard 2026-10-12 20:51:39 -04:00
neilcawse cc65915d16 UI: keytip Copy/Cut publish to the system clipboard; ribbon Paste keeps a newer programmatic copy 2026-10-12 20:51:39 -04:00
neilcawseandClaude Opus 5.5 fa1dcd73e2 UI: Paste button and menus paste the system clipboard; freeze regression test (#273)
In 0.5.0 a click anywhere on the Home ribbon's Paste button (label,
icon or dropdown arrow) froze the app for good. home() called
paste.secondary_clicked() inside ctx.data_mut(); after any click egui
answers that with ctx.input(), which takes the context lock the closure
already holds, so the UI thread waited on itself. Sampling the hung
0.5.0 process on macOS shows the main thread parked in
RawRwLock::lock_exclusive_slow under Context::write <- data_mut <-
ribbon::home. #272 moved the query out of the closure; it landed after
the 0.5.0 release, which is the build both reporters used.

No test ever clicked the Paste button itself, which is how this
shipped. The new test clicks it, then opens its menu with a secondary
click and picks Paste Values, on a worker thread with a timeout so a
regression fails instead of hanging the run. With #272 reverted it
fails (egui's debug lock check panics after 10 s); with it, it passes.
The Paste button gets an accessible "Paste" name so the test (and
screen readers) can find it, the same way Pictures and Border presets
are named.

With the freeze gone, the button still did not do what it says: it
pasted GridCraft's own copy only (GridState::system_clipboard was never
assigned), so text copied in another app gave "Nothing to paste." The
ribbon button, its options menu's Paste, the cell and header context
menus and the macOS Edit menu now read the system clipboard through a
new paste_text host service and paste it like Cmd/Ctrl+V does, falling
back to GridCraft's own copy when there is no text (or no service, as
on the web). Asking egui for the clipboard instead (RequestPaste) was
tried and stalled the macOS event loop until the next input event.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:51:39 -04:00
Marco Arnulfo a7e22d299f Grid: horizontal scrollbar in the sheet tab bar (fixes #840) 2026-10-13 00:14:40 +02:00
vangel76andClaude Sonnet 5.5 c4ad8e3a9b Page Layout view: header/footer margins on the ruler, live re-pagination, right-to-left rulers (#792)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 21:01:09 +02:00
vangel76andClaude Sonnet 5.5 339f8ed35b Page Layout view: drag the margins on the rulers (#792)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 20:57:02 +02:00
Vedran DobosandClaude Opus 5.5 3830cee850 View: Ctrl+wheel zoom steps along a ladder that never skips 100% (#689)
Each frame multiplied the whole-number zoom by egui's eased wheel
factor and rounded, so a notch out never undid a notch in:
100 -> 122 -> 101 -> 123 -> 102.

A notch now moves to the next step on WHEEL_ZOOM_LADDER (10 ... 85, 100,
120 ... 400; four per doubling, about 20% apart). A step less than 5%
away is skipped, but 100% and the limits never are, so 121% out goes
to 100% and 99% in goes to 100%. The wheel's turning is counted in
notches: parts of a notch add up, and a notch steps once 60% of it has
turned. With animations on the zoom glides to the step, and a notch
turned during a glide steps on from where it's going.

The status bar's Zoom In / Zoom Out keep their 10% steps; that, and
whether the glide needs a setting of its own, is noted in
docs/decisions.md for the maintainers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:57:57 +02:00
derechopiano f7f04df4d7 #681: Reveal the selected worksheet tab after navigation 2026-10-12 13:55:18 +01:00
derechopiano 0514e537ac #441: Open AutoFilter header menus with Alt+Down 2026-10-12 09:56:52 +01:00
Bryan MarkandClaude Opus 5.5 481f1c2b8b File view: the recent list tells when each workbook was last changed
The recent workbooks on the File view's Home and Open pages gain a
Modified column: "Just now", "5 min ago", "3 h ago", "Yesterday",
"4 days ago", "3 weeks ago", "5 months ago", "2 years ago", or
"Not available" for a file that can't be reached.

The file system is never asked while drawing. A thread asks for each
file's metadata and the list shows each answer as it comes back, so a
network drive that is asleep or a share that is away doesn't hold up
the view. One thread asks at a time; a view opened anew asks anew. Only
metadata is read: no workbook is opened until the user picks one.

The list tells ages rather than dates because the UI has no time zone
to tell a date by. From two days on a count is never one, so each
language needs one form of "days", "weeks", "months" and "years"; the
ten strings are in the nine catalogs, with the count placed by a {n}
in each, as "Page {page} of {pages}" does.

A long name or folder now stops short of the column instead of running
under it. The web build, which has no files to ask about, and a narrow
window show the list as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 10:38:55 +09:00
Brandon Thomas 3b19cb80e6 Merge pull request #412 from jsymes21-byte/keytips-table-refactor
Keytips: full Excel sequential Alt table — 364 sequences, badges on every control, generated tests (fixes #33, #49)

# Conflicts:
#	contributors/people.toml
2026-10-11 18:06:06 -04:00
derechopiano 1a6c864235 home.autofitColumnWidth: reserve filter dropdown space 2026-10-11 22:09:51 +01:00
James 9e9f9aec84 T9: contributor credit and ui-parity docs for the keytip work 2026-10-11 23:41:24 +03:00
Brandon Thomas b2101947ca Merge branch 'land' into fix-388
# Conflicts:
#	docs/ui-parity.md
2026-10-11 16:01:53 -04:00
vangel76andClaude Sonnet 5.5 6290bf123a Keyboard: Shift+Space and Ctrl+Space select without starting an edit (#338)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-11 21:32:57 +02:00
Fabio LussiandClaude Opus 5.5 535c502fe7 Draw the outline band for grouped rows and columns
Grouped rows and columns now get Excel's outline band beside the headers:
a bracket per group, a -/+ button on the summary line and level buttons
in the corner. The buttons run data.hideDetail / data.showDetail and the
new data.showLevels, so they undo. Hide Detail marks the summary line
collapsed, Show Detail keeps inner groups that were collapsed on their
own, and Group / Ungroup take by: rows|cols. Show Detail and Hide Detail
are on the Data tab and in the Data menu, the group shortcuts are listed
as Alt+Shift+Right / Left, and shortcut lookup reads navigation keys by
their logical key so the numpad arrows work.

Fixes #373

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:29:03 +02:00
Brandon ThomasandClaude Opus 5.5 347d2a5bc2 Docs: catalog 274 / 290 after #211 and #193
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 14:59:45 -04:00
Brandon Thomas 506320b548 Merge branch 'land' into fix-211
# Conflicts:
#	crates/engine/src/tests.rs
#	docs/ui-parity.md
2026-10-11 14:39:47 -04:00
Brandon ThomasandClaude Opus 5.5 fb8e8ac8f1 Docs: catalog 272 / 290 after #325
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 14:22:39 -04:00
Brandon Thomas 7a34692a0d Merge pull request #325 from vangel76/feat/forecast-sheet
Data: Forecast Sheet (data.forecastSheet) (#322)

# Conflicts:
#	ROADMAP.md
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/ui-parity.md
2026-10-11 13:52:00 -04:00
Brandon ThomasandClaude Opus 5.5 4a55aa3e34 Merge main into page-layout-view: pages keep the gliding selection (#266), frozen-pane clipping (#217), right-to-left mirroring and freeze handles (#310, #309); es/de/cs strings for headers and footers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 13:39:07 -04:00
Brandon ThomasandClaude Opus 5.5 c8b1b941f7 Merge main into selection-glide: the gliding outline and its fill respect frozen panes (#217) and right-to-left sheets (#310); es/de/cs strings for Animations
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 13:27:27 -04:00
Brandon ThomasandClaude Opus 5.5 a0cb8f2ca2 Docs: catalog 271 / 290 after #286 and #288
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 13:13:01 -04:00
Brandon Thomas 5360a77505 Merge remote-tracking branch 'origin/main' into fix-325
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/cmd/mod.rs
#	crates/ui-egui/src/dialogs.rs
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/ui-parity.md
2026-10-11 13:12:41 -04:00
Brandon Thomas 9cb6cb2384 Merge branch 'land' into fix-288
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/cmd/edit.rs
#	docs/target-app-parity.md
2026-10-11 13:01:23 -04:00
Brandon ThomasandClaude Opus 5.5 cd9662f1d4 Docs: headline counts after wave 3 (513 / 523 functions, 504 working; catalog 266 / 290)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 12:31:17 -04:00
Brandon Thomas 29660e8c4d Merge pull request #331 from vangel76/feat/file-backstage
UI: File tab Backstage view (#174)

# Conflicts:
#	ROADMAP.md
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/control.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/ribbon.rs
#	docs/parity-checklist.md
#	docs/ui-parity.md
2026-10-11 12:08:56 -04:00
Brandon Thomas 1dbad7768d Merge pull request #320 from vangel76/feat/analysis-toolpak
Data: Analysis ToolPak with 13 tools and the Data Analysis dialog (#312)

# Conflicts:
#	crates/ui-egui/src/dialogs.rs
#	docs/gaps.md
#	docs/parity-checklist.md
2026-10-11 12:06:42 -04:00
Brandon Thomas 95660dc132 Merge pull request #319 from vangel76/fix/excel-shortcuts
Keyboard: Excel shortcut audit, add the missing ones (#110)

# Conflicts:
#	docs/ui-parity.md
2026-10-11 12:06:40 -04:00
Brandon Thomas d274eb6dac Merge pull request #318 from vangel76/fix/theme-toggle
UI: title-bar light/dark switch, File › Display theme, system appearance on first run (#194, #239)

# Conflicts:
#	docs/ui-parity.md
2026-10-11 12:04:50 -04:00
Brandon ThomasandClaude Opus 5.5 5f3e60b48a Docs: headline counts after the community merges (509 / 523 functions, 500 working; catalog 260 / 290)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 12:02:26 -04:00
Brandon Thomas ea0e971e27 Merge pull request #228 from webdevtodayjason/fix/200-formula-helpers
Keep formula helpers inside the worksheet when scrolling (#200)

# Conflicts:
#	contributors/people.toml
#	docs/ui-parity.md
2026-10-11 11:44:56 -04:00
Brandon Thomas 0a65ffc31a Merge pull request #219 from Zarvinx/fix-keyboard-chart-delete
Delete selected charts with the keyboard

# Conflicts:
#	ROADMAP.md
2026-10-11 11:44:53 -04:00
vangel76andClaude Opus 5.5 001f025119 View: Page Layout view with rulers and in-place headers and footers (#329)
View › Page Layout (and the status-bar button) now shows the sheet as printed
pages on a desk instead of overlaying page outlines on the grid.

- Model/XLSX: per-sheet view mode (normal / pageLayout / pageBreakPreview),
  saved as <sheetView view="…"> and read back. view.* commands set it per
  sheet ({sheet?}) without an undo step or dirtying a clean workbook.
- Engine: paper::PageGrid paginates the sheet from A1 with the print
  pagination (print::split_bands, shared with PDF export and printing) and
  maps cells to pages and back; header/footer section helpers
  (split/join, &[Page] field names) shared with the PDF header code.
  pageLayout.headerFooter takes {part, section, text} for one section and a
  sheet; header/footer strings are capped at 255 characters.
  view.ruler toggles the rulers.
- UI: Geo carries the page grid, so painting, hit-testing, selection,
  editing, objects and scrolling work through the page transform; frozen
  panes are ignored in this view. Pages with margins and gaps, "Click to add
  data" pages, rulers in inches (English) or centimetres, headers/footers
  drawn on printed pages, click a margin section to edit it in place; a
  click elsewhere commits (one undo step), Escape cancels. Header & Footer
  contextual tab: presets, Page Number, Number of Pages, Current Date/Time,
  File Path, File Name, Sheet Name, Go to Header/Footer. View › Ruler.
- New strings in every catalog; new code-drawn icons; desk colour token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 13:24:06 +02:00