Context
Part of #2679 (umbrella PersistentDialog migrations). Reference implementation: PR #2742 (migrated ProfileImportExportDialog).
What to do
Migrate `src/gui/PropDashboardDialog.{cpp,h}` from `QDialog` to inherit from `PersistentDialog`, following the exact recipe used in PR #2742.
File sizes (for context):
- `PropDashboardDialog.cpp` — 1164 lines
- `PropDashboardDialog.h` — 82 lines
Why this one first: smallest of the three remaining dialogs and has no inline-construction complications.
Recipe (copy from PR #2742)
- Header — replace `: public QDialog` with `: public PersistentDialog`, drop `m_titleBar`/`m_bodyLayout` members and the `setFramelessMode` declaration.
- Constructor — change initializer list to `: PersistentDialog("Propagation Dashboard", "PropDashboardDialogGeometry", parent)`, drop the manual frameless-chrome setup, build dialog content into `bodyWidget()` instead of a hand-rolled body widget.
- Drop the standalone `setFramelessMode` method — base class provides it.
- `closeEvent` — forward to `PersistentDialog::closeEvent` instead of `QDialog::closeEvent`.
- `MainWindow.cpp` — change the lazy-construct block at line 5517-5527 to a single `showOrRaisePersistent(m_propDashboardDialog, m_propForecast)` call.
- `MainWindow.cpp` — remove the `qobject_cast` branch at line 11628 from `setFramelessWindow()` — base class auto-propagates via `m_persistentDialogs` registry.
- `MainWindow.h` — change `QPointer m_propDashboardDialog;` at line 495 to `QPointer m_propDashboardDialog;`.
AppSettings geometry key
Use `PropDashboardDialogGeometry` (PascalCase, matches existing convention).
Acceptance criteria
Pickup
Mechanical migration matching PR #2742's recipe. AetherClaude-eligible.
73, Jeremy KK7GWY & Claude (AI dev partner)
Context
Part of #2679 (umbrella PersistentDialog migrations). Reference implementation: PR #2742 (migrated ProfileImportExportDialog).
What to do
Migrate `src/gui/PropDashboardDialog.{cpp,h}` from `QDialog` to inherit from `PersistentDialog`, following the exact recipe used in PR #2742.
File sizes (for context):
Why this one first: smallest of the three remaining dialogs and has no inline-construction complications.
Recipe (copy from PR #2742)
AppSettings geometry key
Use `PropDashboardDialogGeometry` (PascalCase, matches existing convention).
Acceptance criteria
Pickup
Mechanical migration matching PR #2742's recipe. AetherClaude-eligible.
73, Jeremy KK7GWY & Claude (AI dev partner)