Tabellen A — Slide-tabel en Gantt: het document-rekenblad in de tabeleditor #2052

Closed
opened 2026-09-11 06:13:36 +00:00 by brenno · 2 comments
Owner

Onderdeel van #2051.

Wat je wilt bereiken

Bij het bouwen van een tabel (presentatiedia én Gantt) werkt het raster hetzelfde als in de visuele documentmodus: je typt in de gerenderde tabel, zoals in een spreadsheet. Geen rij losse TextFields van gelijke breedte meer.

Dit is A in de serie (#2051). Volgende: B #2053 en C #2054 (dialogen); D #2055 en E #2056 zijn onafhankelijk. Presenteren blijft ongemoeid (presenter_table.dart, _TableEditHost in slide_preview.dart).

Wat er nu is

Twee werelden:

Document visueel (de maatstaf) Slide-tabeleditor
Widget TableEditController + TableEditScaffold + TableEditableCell in DocumentMarkdownView TableEditor (lib/widgets/editors/table_editor.dart)
Uiterlijk Huisstijl van de gelezen tabel: zebra, randen, kolombreedte volgt inhoud, inactieve cel toont gerenderde Markdown Material-velden, gelijke Expanded-breedte, koprij slate100, ⋮-menu per rij/kolom
Enter rij lager; onderaan groeit de tabel; Shift+Enter = regeleinde in de cel regeleinde in de cel (maxLines: null)
Tab op laatste cel nieuwe rij, focus eerste cel idem (al gedeeld via table_cell_navigation.dart)
Plakken Cmd/Ctrl+V vult/groeit het raster idem, plus Shift+Insert
Structuur werkbalk bij de actieve cel (rij/kolom in/uit, verplaatsen, uitlijnen, sorteren) ⋮-menu’s + knoppen Rij toevoegen / Kolom toevoegen onderaan
Getalnotatie ontbreekt (hoort bij de dia, niet bij GFM) in het kolommenu

TableEditor wordt ook gebruikt voor Gantt (slide_editor_registry.dart) en voor document-invoeg/dubbelklik-dialogen (document_editor_inserts.dart). Die dialogen worden in #2053 en #2054 aangepakt; ná deze issue zien ze er in ieder geval al uit als het rekenblad.

De toetsenlogica in TableEditor._onCellKey is een tweede kopie van TableEditController.handleCellKey, minus Enter-als-rij en minus Shift+Insert in de controller.

Wat je bouwt

  1. Vervang het raster in TableEditor door dezelfde opbouw als het document: TableEditController + TableEditScaffold + dezelfde tabeltekening als DocumentMarkdownView (GFM via encodeMarkdownTable / decodeMarkdownTableWithAlignment, één tekenpad — geen derde tabelrenderer).
  2. Behoud wat van de dia is, niet van het raster: titelveld (verborgen bij documentContext: true), collaboratiebanner, getalnotatie als extra op de scaffold-werkbalk of als slide-optie (blijft Slide.tableNumberColumns, geen nieuw formaattoken).
  3. Breng Shift+Insert (plakken als tabel) in TableEditController.handleCellKey, naast Cmd/Ctrl+V. Dan heeft elk oppervlak dat de controller gebruikt dezelfde plaktoets.
  4. Enter volgt het rekenblad (rij lager / groeien). Shift+Enter blijft regeleinde (<br> in GFM). Dit wijzigt het gedrag dat USER_GUIDE nu voor slides beschrijft ("Enter = nieuwe regel in de cel") — die zin moet mee.

Wat je niet doet

  • lib/widgets/presentation/parts/presenter_table.dart en _TableEditHost / _TableEditCell in table_preview.dart (alleen presenteren).
  • Formulier-editors over tabelopslag: checklist, scorecard, discoveries, assets, finding, scope matrix, control status. Dat zijn geen rasters voor de gebruiker.
  • Bestandsformaat: geen nieuw token, geen extra front-matter. Bestaande GFM-tabellen en tableNumberColumns blijven.

Klaar als

  • Een nieuwe tabel-dia toont in het zijpaneel een huisstijl-tabel waarin je in een cel klikt en typt; kolommen bewegen mee met de inhoud.
  • Tab op de laatste cel maakt een rij; Enter op de laatste rij ook; Shift+Enter blijft een regeleinde in de cel.
  • Pijltjes: eerst door de celtekst, aan de rand naar de buurcel (tableArrowTarget).
  • Cmd/Ctrl+V én Shift+Insert plakken een spreadsheet/CSV/GFM-tabel en laten het raster groeien.
  • Gantt gebruikt hetzelfde raster zonder extra code.
  • Tests: test/table_editor_test.dart plus Enter/Shift+Enter/Shift+Insert op de gedeelde controller (test/document_visual_table_navigation_test.dart of test/table_cell_navigation_test.dart).
  • Minimaal twee rijen (kop + één body), zoals TableEditController.removeRowAtTableEditor mag nu tot één rij krimpen; dat is geen geldige GFM-tabel.
  • docs/USER_GUIDE.md + .nl.md (§ Tabellen): Enter/Shift+Enter gelijkgetrokken met het document. De voorzet-knop (Actie / Eigenaar / Deadline / Status) staat nog in de handleiding maar is uit de code gehaald — die alinea schrappen, niet terugbouwen. docs/SHORTCUTS.md + .nl.md: Tab-groeit-rij, Enter-rij-lager, Cmd+C-zonder-selectie, en (document) Alt+Shift+↑/↓ / Alt+Shift+S. docs/SOURCE_MAP.md: table_editor.dart beschrijft de hergebruikte controller, geen eigen raster meer.
  • docs/design/DOCUMENT_MODE.md §4: dagelijks bewerken is TableEditController in Visueel; TableEditor is niet meer het document-mechanisme (invoegpad: #2053).

Kosten

Geen nieuwe l10n als je de bestaande scaffold-labels hergebruikt (Rij eronder, Kolom rechts, …). Rij toevoegen / Kolom toevoegen onderaan mogen weg. Geen nieuwe dependency. Geen slidetype-keten.

Onderdeel van #2051. ## Wat je wilt bereiken Bij het **bouwen** van een tabel (presentatiedia én Gantt) werkt het raster hetzelfde als in de visuele documentmodus: je typt in de gerenderde tabel, zoals in een spreadsheet. Geen rij losse `TextField`s van gelijke breedte meer. Dit is **A** in de serie (#2051). Volgende: B #2053 en C #2054 (dialogen); D #2055 en E #2056 zijn onafhankelijk. Presenteren blijft ongemoeid (`presenter_table.dart`, `_TableEditHost` in `slide_preview.dart`). ## Wat er nu is Twee werelden: | | Document visueel (de maatstaf) | Slide-tabeleditor | |---|---|---| | Widget | `TableEditController` + `TableEditScaffold` + `TableEditableCell` in `DocumentMarkdownView` | `TableEditor` (`lib/widgets/editors/table_editor.dart`) | | Uiterlijk | Huisstijl van de gelezen tabel: zebra, randen, kolombreedte volgt inhoud, inactieve cel toont gerenderde Markdown | Material-velden, gelijke `Expanded`-breedte, koprij `slate100`, ⋮-menu per rij/kolom | | Enter | rij lager; onderaan groeit de tabel; `Shift+Enter` = regeleinde in de cel | regeleinde in de cel (`maxLines: null`) | | Tab op laatste cel | nieuwe rij, focus eerste cel | idem (al gedeeld via `table_cell_navigation.dart`) | | Plakken | `Cmd/Ctrl+V` vult/groeit het raster | idem, plus `Shift+Insert` | | Structuur | werkbalk bij de actieve cel (rij/kolom in/uit, verplaatsen, uitlijnen, sorteren) | ⋮-menu’s + knoppen *Rij toevoegen* / *Kolom toevoegen* onderaan | | Getalnotatie | ontbreekt (hoort bij de dia, niet bij GFM) | in het kolommenu | `TableEditor` wordt ook gebruikt voor **Gantt** (`slide_editor_registry.dart`) en voor document-invoeg/dubbelklik-dialogen (`document_editor_inserts.dart`). Die dialogen worden in #2053 en #2054 aangepakt; ná deze issue zien ze er in ieder geval al uit als het rekenblad. De toetsenlogica in `TableEditor._onCellKey` is een **tweede kopie** van `TableEditController.handleCellKey`, minus Enter-als-rij en minus `Shift+Insert` in de controller. ## Wat je bouwt 1. Vervang het raster in `TableEditor` door dezelfde opbouw als het document: `TableEditController` + `TableEditScaffold` + dezelfde tabeltekening als `DocumentMarkdownView` (GFM via `encodeMarkdownTable` / `decodeMarkdownTableWithAlignment`, één tekenpad — geen derde tabelrenderer). 2. Behoud wat van de dia is, niet van het raster: titelveld (verborgen bij `documentContext: true`), collaboratiebanner, **getalnotatie** als extra op de scaffold-werkbalk of als slide-optie (blijft `Slide.tableNumberColumns`, geen nieuw formaattoken). 3. Breng `Shift+Insert` (plakken als tabel) in `TableEditController.handleCellKey`, naast `Cmd/Ctrl+V`. Dan heeft elk oppervlak dat de controller gebruikt dezelfde plaktoets. 4. Enter volgt het rekenblad (rij lager / groeien). `Shift+Enter` blijft regeleinde (`<br>` in GFM). Dit **wijzigt** het gedrag dat `USER_GUIDE` nu voor slides beschrijft ("Enter = nieuwe regel in de cel") — die zin moet mee. ## Wat je niet doet - `lib/widgets/presentation/parts/presenter_table.dart` en `_TableEditHost` / `_TableEditCell` in `table_preview.dart` (alleen presenteren). - Formulier-editors over tabelopslag: checklist, scorecard, discoveries, assets, finding, scope matrix, control status. Dat zijn geen rasters voor de gebruiker. - Bestandsformaat: geen nieuw token, geen extra front-matter. Bestaande GFM-tabellen en `tableNumberColumns` blijven. ## Klaar als - [ ] Een nieuwe tabel-dia toont in het zijpaneel een huisstijl-tabel waarin je in een cel klikt en typt; kolommen bewegen mee met de inhoud. - [ ] Tab op de laatste cel maakt een rij; Enter op de laatste rij ook; Shift+Enter blijft een regeleinde in de cel. - [ ] Pijltjes: eerst door de celtekst, aan de rand naar de buurcel (`tableArrowTarget`). - [ ] Cmd/Ctrl+V én Shift+Insert plakken een spreadsheet/CSV/GFM-tabel en laten het raster groeien. - [ ] Gantt gebruikt hetzelfde raster zonder extra code. - [ ] Tests: `test/table_editor_test.dart` plus Enter/Shift+Enter/Shift+Insert op de gedeelde controller (`test/document_visual_table_navigation_test.dart` of `test/table_cell_navigation_test.dart`). - [ ] Minimaal twee rijen (kop + één body), zoals `TableEditController.removeRowAt` — `TableEditor` mag nu tot één rij krimpen; dat is geen geldige GFM-tabel. - [ ] `docs/USER_GUIDE.md` + `.nl.md` (§ Tabellen): Enter/Shift+Enter gelijkgetrokken met het document. De **voorzet-knop** (Actie / Eigenaar / Deadline / Status) staat nog in de handleiding maar is uit de code gehaald — die alinea schrappen, niet terugbouwen. `docs/SHORTCUTS.md` + `.nl.md`: Tab-groeit-rij, Enter-rij-lager, Cmd+C-zonder-selectie, en (document) Alt+Shift+↑/↓ / Alt+Shift+S. `docs/SOURCE_MAP.md`: `table_editor.dart` beschrijft de hergebruikte controller, geen eigen raster meer. - [ ] `docs/design/DOCUMENT_MODE.md` §4: dagelijks bewerken is `TableEditController` in Visueel; `TableEditor` is niet meer het document-mechanisme (invoegpad: #2053). ## Kosten Geen nieuwe l10n als je de bestaande scaffold-labels hergebruikt (`Rij eronder`, `Kolom rechts`, …). `Rij toevoegen` / `Kolom toevoegen` onderaan mogen weg. Geen nieuwe dependency. Geen slidetype-keten.
Author
Owner

Opgepakt. Tak: feature/table-spreadsheet-ux. Hele serie A–E op één tak. Reikwijdte: table_editor, table_edit_controller, document_editor_inserts, document_editor_layouts, chart_editor_grid, matrix_editor, USER_GUIDE, SHORTCUTS.

Opgepakt. Tak: feature/table-spreadsheet-ux. Hele serie A–E op één tak. Reikwijdte: table_editor, table_edit_controller, document_editor_inserts, document_editor_layouts, chart_editor_grid, matrix_editor, USER_GUIDE, SHORTCUTS.
Author
Owner

Op main: 773532d20 (TableEditor op TableEditController/DocumentMarkdownView) + c25c8d046 (lockHeader/lockColumns, Shift+Insert in de controller). Voorzet-alinea uit USER_GUIDE geschrapt. Niet in: presenteren (presenter_table / _TableEditHost), formulier-slides, nieuw formaattoken.

Op main: 773532d20 (TableEditor op TableEditController/DocumentMarkdownView) + c25c8d046 (lockHeader/lockColumns, Shift+Insert in de controller). Voorzet-alinea uit USER_GUIDE geschrapt. Niet in: presenteren (presenter_table / _TableEditHost), formulier-slides, nieuw formaattoken.
brenno 2026-09-11 07:40:45 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#2052
No description provided.