Skip to content

Fix #2679 (recovered after Claude Code exited before committing)#2742

Merged
ten9876 merged 1 commit into
mainfrom
aetherclaude/issue-2679
May 16, 2026
Merged

Fix #2679 (recovered after Claude Code exited before committing)#2742
ten9876 merged 1 commit into
mainfrom
aetherclaude/issue-2679

Conversation

@aethersdr-agent

Copy link
Copy Markdown
Contributor

Summary

Fixes #2679

What was changed

Fix #2679 (recovered after Claude Code exited before committing)

Files modified

  • src/gui/MainWindow.cpp
  • src/gui/ProfileImportExportDialog.cpp
  • src/gui/ProfileImportExportDialog.h
 src/gui/MainWindow.cpp                | 16 +----------
 src/gui/ProfileImportExportDialog.cpp | 53 +++++++----------------------------
 src/gui/ProfileImportExportDialog.h   | 11 ++------
 3 files changed, 13 insertions(+), 67 deletions(-)

Generated by AetherClaude (automated agent for AetherSDR)

@aethersdr-agent aethersdr-agent Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clean application of the PersistentDialog migration recipe from #2672:

  • Base class swap with the geometry key "ProfileImportExportDialogGeometry" — new key, no prior persisted geometry to migrate.
  • Content moved onto bodyWidget(), manual FramelessResizer::install and FramelessWindowTitleBar construction removed (now base-owned).
  • closeEvent correctly chains to PersistentDialog::closeEvent(event) so geometry still flushes on close, and the busy-transfer guard runs first.
  • MainWindow::setFramelessWindow loses its explicit-cast branch — frameless propagation now flows through m_persistentDialogs, exactly as the issue described.
  • showOrRaisePersistent applies the current FramelessWindow setting on construction, replacing the inline AppSettings-driven setFramelessMode that the old constructor did.

One thing worth flagging — scope vs. issue linkage: issue #2679 covers four dialog migrations (ProfileImportExportDialog, RadioSetupDialog, PropDashboardDialog, TxBandDialog) plus a wasFresh comment polish. This PR does only the first. Fixes #2679 in the PR body will auto-close the umbrella when merged, leaving the other three migrations orphaned. Suggest changing to Refs #2679 (or Part of #2679) so the issue stays open until the remaining dialogs land.

Thanks for the migration — looks good otherwise.

@ten9876 ten9876 merged commit f7013f0 into main May 16, 2026
5 checks passed
@ten9876 ten9876 deleted the aetherclaude/issue-2679 branch May 16, 2026 21:58
aethersdr-agent Bot added a commit that referenced this pull request May 16, 2026
…2768). Principle I.

Phase A — extract the 119-line inline construction at MainWindow.cpp:6548
into src/gui/TxBandDialog.{cpp,h} as a real class, parameterized on
RadioModel*. The active TX-profile is snapshotted into the window title
at construction (WA_DeleteOnClose means the dialog is reconstructed on
every open, so the title stays current without a profileChanged signal).

Phase B — inherit from PersistentDialog so the geometry persists across
launches under AppSettings key TxBandDialogGeometry, and the frameless
title-bar / FramelessResizer plumbing comes from the base class. The
lazy-construct site in MainWindow becomes a one-liner showOrRaisePersistent
call, and the m_txBandDialog branch in setFramelessWindow() is removed
because the m_persistentDialogs registry handles propagation.

FlexLib semantics preserved verbatim — every transmit bandset / interlock
bandset command (rfpower, tunepower, inhibit, hwalc_enabled, acc_tx_enabled,
rca_txreq_enable, acc_txreq_enable, tx{1,2,3}_enabled) is sent exactly as
the inline code did. Principle I: FlexLib is the protocol authority, and
these are the canonical setter forms in transmit-bandset / interlock-bandset
parsers — do not paraphrase.

Follow-up to #2742 (ProfileImportExportDialog migration) and second of three
under the #2679 umbrella (PropDashboardDialog #2767 first, RadioSetupDialog
to follow).

Blast radius: risk_score=0.363, 5 high-risk affected (top:
AetherSDR::MainWindow::MainWindow, AetherSDR::AppSettings::instance,
AetherSDR::MainWindow::buildMenuBar). All high-risk hits are structural
bridges (MainWindow ctor, buildMenuBar, AppSettings) reached only through
the existing setFramelessWindow + showOrRaisePersistent pattern that PR
#2742 already validated; no new structural edges introduced.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
aethersdr-agent Bot added a commit that referenced this pull request May 16, 2026
Mechanical migration matching PR #2742's recipe (1/3 of the umbrella
PersistentDialog work tracked in #2679):

- PropDashboardDialog.h now inherits from PersistentDialog; drops the
  manual m_titleBar/m_bodyLayout members and the setFramelessMode decl
  (provided by the base class).
- Constructor delegates to PersistentDialog("HF Propagation Dashboard",
  "PropDashboardDialogGeometry", parent) and installs content into
  bodyWidget() instead of a hand-rolled body widget.
- Drops the standalone setFramelessMode() impl and the inline
  FramelessResizer::install(this) bootstrap.
- MainWindow::showPropDashboard() collapses to a single
  showOrRaisePersistent(m_propDashboardDialog, m_propForecast) call.
- Removed the qobject_cast<PropDashboardDialog*> branch from
  setFramelessWindow(): the m_persistentDialogs registry already
  auto-propagates frameless toggles to every PersistentDialog-derived
  child.
- Retyped m_propDashboardDialog from QPointer<QDialog> to
  QPointer<PropDashboardDialog>.

The user-facing window title is preserved verbatim ("HF Propagation
Dashboard") — Principle III: on-screen labels are inviolable for the
user, so the abbreviation in the recipe was not adopted. closeEvent
recipe step is a no-op for this dialog (no override exists; base class
handles geometry-flush on close).

Geometry persists under AppSettings key PropDashboardDialogGeometry.
No behavior change to refresh logic, charts, panels, or the
NetworkAccessManager fetch path.

Blast radius: risk_score=0.163, 2 high-risk affected (top: MainWindow::MainWindow, MainWindow::buildMenuBar). Both are reached through the usual MainWindow include of PropDashboardDialog.h; all PropDashboardDialog references in src/ are accounted for and updated.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PersistentDialog migrations: four remaining dialogs + wasFresh comment polish

1 participant