|
| 1 | +# Legacy Parity Tracker (Java -> Web) |
| 2 | + |
| 3 | +Last updated: 2026-02-08 |
| 4 | + |
| 5 | +## Purpose |
| 6 | +Track feature parity between legacy Java JBead (`/Users/cyrilcombe/Dev/perso/jbead`) and web app (`/Users/cyrilcombe/Dev/perso/jbead-web`), with an actionable task breakdown. |
| 7 | + |
| 8 | +Status legend: |
| 9 | +- `DONE`: implemented in web app |
| 10 | +- `PARTIAL`: partially implemented |
| 11 | +- `TODO`: not implemented yet |
| 12 | +- `N/A`: intentionally not planned (desktop-only feature) |
| 13 | + |
| 14 | +## Exhaustive Feature Inventory |
| 15 | + |
| 16 | +| ID | Area | Legacy Feature | Java Reference | Web Status | |
| 17 | +|---|---|---|---|---| |
| 18 | +| F-001 | Layout | 4 main panes: Draft / Corrected / Simulation / Report | `src/ch/jbead/JBeadFrame.java` `createMainGUI()` | `TODO` | |
| 19 | +| F-002 | Layout | Per-pane visibility toggles | `ViewDraftAction`, `ViewCorrectedAction`, `ViewSimulationAction`, `ViewReportAction` | `PARTIAL` (flags in document view, no full UI behavior) | |
| 20 | +| F-003 | Layout | Vertical scroll tied to row index | `JBeadFrame.java` + `Model.setScroll()` | `PARTIAL` (basic canvas scroll exists, no shared row scroll control) | |
| 21 | +| F-004 | Views | Draft rendering with row markers | `view/DraftPanel.java` | `PARTIAL` (draft grid exists, markers missing) | |
| 22 | +| F-005 | Views | Corrected rendering (offset rows / corrected index mapping) | `view/CorrectedPanel.java`, `Model.correct()` | `TODO` | |
| 23 | +| F-006 | Views | Simulation rendering (wrapped/shifted woven preview) | `view/SimulationPanel.java` | `TODO` | |
| 24 | +| F-007 | Views | Report rendering (infos + color counts + bead run list) | `view/ReportPanel.java` | `TODO` | |
| 25 | +| F-008 | Tools | Pencil: click toggles point, drag draws snapped line | `ToolPencilAction`, `DraftPanel.handleMouse*` | `PARTIAL` | |
| 26 | +| F-009 | Tools | Select: rectangular selection | `ToolSelectAction`, `Selection.java` | `PARTIAL` | |
| 27 | +| F-010 | Tools | Fill (linear fill along flattened pattern) | `ToolFillAction`, `Model.fillLine()` | `DONE` | |
| 28 | +| F-011 | Tools | Pipette (pick color from bead) | `ToolPipetteAction`, `DraftPanel.selectColorFrom()` | `TODO` | |
| 29 | +| F-012 | Edit | Delete selection content | `EditDeleteAction`, `Model.delete()` | `DONE` | |
| 30 | +| F-013 | Edit | Mirror horizontal | `EditMirrorHorizontalAction`, `Model.mirrorHorizontal()` | `DONE` | |
| 31 | +| F-014 | Edit | Mirror vertical | `EditMirrorVerticalAction`, `Model.mirrorVertical()` | `DONE` | |
| 32 | +| F-015 | Edit | Rotate square selection | `EditRotateAction`, `Model.rotate()` | `DONE` | |
| 33 | +| F-016 | Edit | Arrange selection copies with offset | `EditArrangeAction`, `ArrangeDialog`, `Model.arrangeSelection()` | `TODO` | |
| 34 | +| F-017 | Edit | Insert row | `EditInsertRowAction`, `Model.insertRow()` | `TODO` | |
| 35 | +| F-018 | Edit | Delete row | `EditDeleteRowAction`, `Model.deleteRow()` | `TODO` | |
| 36 | +| F-019 | History | Undo | `EditUndoAction`, `Model.undo()`, `BeadUndo.java` | `TODO` | |
| 37 | +| F-020 | History | Redo | `EditRedoAction`, `Model.redo()`, `BeadUndo.java` | `TODO` | |
| 38 | +| F-021 | View Options | Draw colors toggle | `ViewDrawColorsAction`, `View.drawColors()` | `TODO` | |
| 39 | +| F-022 | View Options | Draw symbols toggle | `ViewDrawSymbolsAction`, `View.drawSymbols()` | `TODO` | |
| 40 | +| F-023 | View Options | Zoom in/normal/out | `ViewZoomInAction`, `ViewZoomNormalAction`, `ViewZoomOutAction` | `PARTIAL` (zoom value exists, no controls) | |
| 41 | +| F-024 | Pattern | Pattern width dialog and resize | `PatternWidthAction`, `PatternWidthDialog`, `Model.setWidth()` | `TODO` | |
| 42 | +| F-025 | Pattern | Pattern height dialog and resize | `PatternHeightAction`, `PatternHeightDialog`, `Model.setHeight()` | `TODO` | |
| 43 | +| F-026 | Pattern | Preferences (author, organization, symbols, update-check setting) | `PatternPreferencesAction`, `PreferencesDialog` | `TODO` | |
| 44 | +| F-027 | Model | Shift left/right (pattern phase shift) | `JBeadFrame.rotateLeft/Right`, `Model.shiftLeft/Right()` | `TODO` | |
| 45 | +| F-028 | Model | Repeat detection (`beads per repeat`, rows per repeat) | `Model.updateRepeat()`, `Model.calcRepeat()` | `TODO` | |
| 46 | +| F-029 | Palette | 32-color palette with selected color indicator | `ui/ColorPalette.java` | `PARTIAL` (palette exists; not full legacy behavior) | |
| 47 | +| F-030 | Palette | Double-click/popup color edit | `ColorPalette.chooseColor()` | `TODO` | |
| 48 | +| F-031 | Palette | Set clicked color as background (swap with color 0) | `ColorPalette.asBackground()` | `TODO` | |
| 49 | +| F-032 | Input | Numeric shortcuts 0-9 for color selection | `JBeadFrame.formKeyUp()` | `TODO` | |
| 50 | +| F-033 | Input | Keyboard shortcuts and accelerators from actions | action classes `putValue(ACCELERATOR_KEY, ...)` | `TODO` | |
| 51 | +| F-034 | Input | Space/Escape/arrow interactions for tools/shift | `JBeadFrame.formKeyDown/formKeyUp()` | `TODO` | |
| 52 | +| F-035 | File IO | Open `.jbb` | `JBeadFileFormat`, `JBeadMemento` | `DONE` | |
| 53 | +| F-036 | File IO | Save/export `.jbb` | `JBeadFileFormat`, `JBeadMemento` | `DONE` | |
| 54 | +| F-037 | File IO | Open/save `.dbb` legacy format | `DbbFileFormat`, `DbbMemento` | `TODO` | |
| 55 | +| F-038 | File IO | New/Open/Save/Save As flows | `FileNewAction`, `FileOpenAction`, `FileSaveAction`, `FileSaveAsAction` | `PARTIAL` | |
| 56 | +| F-039 | File IO | MRU recent files list | `FileMRUAction`, `JBeadFrame.addToMRU()` | `TODO` | |
| 57 | +| F-040 | Metadata | Author / organization / notes persisted in file | `Model.saveTo/loadFrom`, `Memento` | `PARTIAL` | |
| 58 | +| F-041 | Report | Pattern info block (circumference/repeat/rows/beads) | `ReportInfos.java` | `TODO` | |
| 59 | +| F-042 | Report | Color usage counts | `BeadCounts.java` | `TODO` | |
| 60 | +| F-043 | Report | Bead run list (sequence counts) | `BeadList.java`, `BeadRun.java` | `TODO` | |
| 61 | +| F-044 | Print | Print visible sections (draft/corrected/simulation/report) | `print/DesignPrinter.java` | `TODO` | |
| 62 | +| F-045 | Print | Page setup persistence (paper/orientation) | `FilePageSetupAction`, `PrintSettings` | `TODO` | |
| 63 | +| F-046 | Info | Technical info dialog | `InfoTechInfosAction`, `dialog/TechInfosDialog` | `N/A` | |
| 64 | +| F-047 | Info | Update check | `InfoUpdateCheckAction` | `N/A` | |
| 65 | +| F-048 | Info | About dialog | `InfoAboutAction` | `N/A` | |
| 66 | + |
| 67 | +## Task Breakdown (Execution Plan) |
| 68 | + |
| 69 | +### Phase 1 - Multi-view parity foundation |
| 70 | +- [ ] T-001 Add workspace layout with Draft, Corrected, Simulation, Report panes |
| 71 | +- [ ] T-002 Implement shared vertical row scroll model across panes |
| 72 | +- [ ] T-003 Implement Corrected renderer (`Model.correct` equivalent) |
| 73 | +- [ ] T-004 Implement Simulation renderer (shift + weave mapping) |
| 74 | +- [ ] T-005 Add view visibility toggles for all panes |
| 75 | + |
| 76 | +### Phase 2 - Editing parity |
| 77 | +- [ ] T-006 Add pipette tool in Draft pane |
| 78 | +- [ ] T-007 Enable edit interactions from Corrected and Simulation panes |
| 79 | +- [ ] T-008 Add insert row / delete row actions |
| 80 | +- [ ] T-009 Add arrange selection dialog + operation |
| 81 | +- [ ] T-010 Add keyboard shortcuts (0-9 colors, arrows for shift, tool shortcuts) |
| 82 | + |
| 83 | +### Phase 3 - Pattern controls and history |
| 84 | +- [ ] T-011 Add undo/redo history stack equivalent to `BeadUndo` |
| 85 | +- [ ] T-012 Add width/height pattern dialogs and model resizing |
| 86 | +- [ ] T-013 Add shift controls (left/right buttons + key repeat) |
| 87 | +- [ ] T-014 Implement repeat detection and expose in UI |
| 88 | +- [ ] T-015 Add view options: zoom in/normal/out, draw colors/symbols toggles |
| 89 | + |
| 90 | +### Phase 4 - Palette/report completeness |
| 91 | +- [ ] T-016 Add full 32-color palette behavior (edit color + set as background) |
| 92 | +- [ ] T-017 Build report infos panel (pattern, repeat, row/bead totals) |
| 93 | +- [ ] T-018 Build color usage block and bead run list |
| 94 | +- [ ] T-019 Add metadata editors (author, organization, notes) |
| 95 | + |
| 96 | +### Phase 5 - File/compat/print |
| 97 | +- [ ] T-020 Add file flows: New/Open/Save/Save As equivalents |
| 98 | +- [ ] T-021 Add MRU list (local storage based) |
| 99 | +- [ ] T-022 Decide `.dbb` support strategy and implement or explicitly drop |
| 100 | +- [ ] T-023 Add print/export strategy for web (PDF or print stylesheet) |
| 101 | + |
| 102 | +## Next Recommended Slice |
| 103 | + |
| 104 | +Target a thin vertical slice first: |
| 105 | +- [ ] S-001 Implement Corrected and Simulation panes read-only |
| 106 | +- [ ] S-002 Add view toggles for Draft/Corrected/Simulation/Report |
| 107 | +- [ ] S-003 Add report infos block (without color lists yet) |
| 108 | + |
| 109 | +This slice unlocks visual parity early and reduces risk before implementing advanced editing/history. |
0 commit comments