Files
HC_APTBS/docs/gap-missing-dialogs.md
LucianoDev c617854c09 feat: implement SavePump/SaveAlarms, fix config round-trip bugs, redesign PDF reports
Config system fixes:
- Implement SavePump() — full XML serialization with insert/update by pump ID
- Add CanBusParameter.ToPumpXml() for legacy P1-P6 pump param format
- Fix LastRotationDirection never loaded in LoadSettings()
- Add SaveAlarms() to ConfigurationService and IConfigurationService
- Remove dead fields AppSettings.Clients and AppSettings.PumpIds

PDF report redesign:
- Professional layout with charts, verdict badges, and tolerance bands
- Add ReportChartRenderer (SVG) and ReportTheme styling constants
- Embed default_logo.png as fallback report logo

Documentation:
- Add gap analysis docs (config validation, ford unlock, missing features)
- Update CLAUDE.md architecture, known gaps, and debt tracking

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 15:21:22 +02:00

5.1 KiB

Gap: Missing Dialogs and UI Components

Priority-Ranked List

CRITICAL — Safety Dialogs (prevent hardware damage)

1. RPM Safety Warning (WCareOnRpmOn)

Old behavior: Shown when operator sets RPM > 0 but oil pump is not running. Three options: turn on oil pump + proceed, proceed without oil, cancel. Trigger: RPM setpoint change in BenchControlViewModel MVVM: Dialog returns enum (ProceedWithOil / ProceedWithout / Cancel) Why critical: Running the pump motor without oil circulation can cause bearing damage.

2. Oil Pump Confirmation (WAcceptOilTurnOn)

Old behavior: Confirmation dialog before activating oil pump. Ensures operator confirms oil level and connections are ready. Trigger: Oil pump relay toggle in BenchControlViewModel MVVM: Simple confirm/cancel dialog

3. 27V Warning (WAlert27v)

Old behavior: Warning when pump requires 27V power supply (some Ford variants). Alerts operator to switch power supply before proceeding. Trigger: Pump selection when pump definition indicates 27V requirement MVVM: Informational dialog with acknowledge button

HIGH — Functional Dialogs

4. Ford Unlock Progress (WUnlocker)

See gap-ford-unlock-ui.md for full spec.

5. COM Port / K-Line Selection (KlineIDSelection)

Old behavior: Dropdown listing available FTDI devices by serial number. User selects which adapter to use for K-Line communication. Current gap: KwpService.DetectKLinePort() auto-detects the first FTDI device. No UI for manual selection when multiple adapters are connected. Trigger: K-Line connection attempt, or settings panel MVVM: ComboBox of detected FTDI serial numbers + Connect button

6. User Management (WUsersManage)

Old behavior: Add/remove users, change passwords. User list displayed in a grid. Current state: UserCheckDialog handles auth only. ConfigurationService.UpdateUsers() exists but no UI invokes it for CRUD. Trigger: Admin menu or settings panel MVVM: DataGrid with add/edit/remove buttons. Hash or encrypt passwords before storage (see gap-missing-features.md).

7. Full Settings Panel (WConfigPanel)

Old behavior: Comprehensive dialog for all settings: PID tuning, refresh rates, safety limits, encoder resolution, motor calibration, company info, log retention, language selection. Current state: BenchParamConfigView covers bench CAN parameter editing only. All other settings require hand-editing config.xml. Trigger: Settings button in toolbar MVVM: Tabbed dialog (General, Safety, PID, Company, Sensors, Language)

MEDIUM — Utility Dialogs

8. Generic Confirmation (WAskQuestion)

Old behavior: Reusable yes/no dialog with custom message. Alternative: WPF's built-in MessageBox.Show with MessageBoxButton.YesNo. Can be used directly in ViewModels via a dialog service abstraction. No custom dialog needed unless the app's visual theme demands it.

9. Generic Alert (WGenericAlert)

Old behavior: Reusable info/warning dialog with custom message + icon. Alternative: Same as above — MessageBox.Show covers this. Implement a custom one only if visual consistency matters.

MEDIUM — Missing Controls

10. Test Timer/Countdown (TimerDisplay)

Old behavior: Visual countdown during conditioning and measurement phases. Shows remaining seconds in large digital font. Current gap: Phase progress is communicated via VerboseMessage text events but no dedicated countdown UI. Implementation: Either a UserControl with large text binding, or integrate into TestDisplayView with a progress ring.

11. Bit-Level Status Display (BitDisplay / SingleBit)

Old behavior: Grid of toggleable bits showing pump status word state. Each bit shows label + green/red indicator based on PumpStatusDefinition. Current state: StatusDisplayView exists but may not render individual bits as toggle indicators. Implementation: ItemsControl with BitDisplay item template (colored circle + label per bit).

12. Searchable ComboBox (FilteredComboBox)

Old behavior: Dropdown with text filtering for pump selection (100+ pumps). Alternative: Extended.Wpf.Toolkit's AutoFilteredComboBox may cover this. Or implement as a standard ComboBox with IsTextSearchEnabled="True" and IsEditable="True".

LOW — Display Controls

13. Temperature Display Widget (TempDisplayer)

Current state: Temperature values are shown inline in the main UI. A dedicated widget is nice-to-have but not functionally missing.

14. Graphical Result Display (GraphicResultDisplay / CustomChart)

Current state: FlowmeterChartView + ReportChartRenderer partially cover this. LiveChartsCore handles real-time visualization. The old custom chart control is superseded.

Implementation Pattern

All dialogs should follow the existing MVVM pattern:

  • Views/Dialogs/XxxDialog.xaml — pure XAML, no code-behind logic
  • ViewModels/Dialogs/XxxViewModel.cs[ObservableProperty], [RelayCommand]
  • Opened from parent ViewModel via a dialog service or Window.ShowDialog()
  • Results returned via ViewModel property, not code-behind event args