Summary
Add a compact summary bar at the top of the DXClusterAssistant floating window showing two derived band recommendations, both computed live from the spot list already held by the widget. Implements #796 and #860 without any additional data source.
Two distinct metrics
Most active band (ref. #860)
The band where the most unique DX entities are currently being spotted — raw cluster activity. Computed as the band with the highest count of spots in the current (TTL-filtered, deduplicated) assistant list. Spots from the same continent as the user already carry a score bonus, so workability is implicitly factored in.
"Where is the DX action happening right now?"
Band to be (ref. #796)
The band that offers the most personal value — where the user has the most to gain. Computed as the band with the highest cumulative score across all its spots in the assistant list. A band with several ATNOs and needed entities will rank above a band with many already-worked stations.
"Where should I be operating?"
Calculation
Both values are derived entirely from QList<DXSpot> already stored in the widget — no new network requests, no new data structures.
// Pseudocode — runs inside recalculateAll() and addOrUpdateSpot()
QHash<int, int> countPerBand; // bandId → spot count
QHash<int, int> scorePerBand; // bandId → cumulative score
for (const DXSpot &spot : m_spots) {
if (spot.hidden) continue;
countPerBand[spot.bandId]++;
scorePerBand[spot.bandId] += spot.score;
}
// Most active band → argmax(countPerBand)
// Band to be → argmax(scorePerBand)
Both are recalculated every time addOrUpdateSpot() or recalculateAll() is called (i.e. on every new spot and every new QSO logged).
Display
A thin, non-scrollable header row pinned above the spot table inside the DXClusterAssistant window:
Most active band: 20m | Band to be: 15m
- Band names are resolved from
bandId via DataProxy (e.g. "20m", "40m")
- Shown as
— when the spot list is empty or no data is available for that band
- Updates in real time alongside the spot table
Recalculation triggers
Same as the rest of the widget:
- New spot arrives →
addOrUpdateSpot() → header updates
- New QSO logged →
recalculateAll() → header updates
- Spot expires (TTL) → timer tick → header updates
Files affected
src/dxcluster/dxclusterassistant.h — two QLabel members for the summary bar; private helper updateBandSummary()
src/dxcluster/dxclusterassistant.cpp — updateBandSummary() implementation; call it from addOrUpdateSpot(), recalculateAll(), and the TTL timer slot
Closes
Closes #796 — The band to be
Closes #860 — Widget showing the most active band
Related
Part of the DX Assistant feature (#1018). Requires the widget redesign (#1012) to be implemented first.
Summary
Add a compact summary bar at the top of the
DXClusterAssistantfloating window showing two derived band recommendations, both computed live from the spot list already held by the widget. Implements #796 and #860 without any additional data source.Two distinct metrics
Most active band (ref. #860)
The band where the most unique DX entities are currently being spotted — raw cluster activity. Computed as the band with the highest count of spots in the current (TTL-filtered, deduplicated) assistant list. Spots from the same continent as the user already carry a score bonus, so workability is implicitly factored in.
Band to be (ref. #796)
The band that offers the most personal value — where the user has the most to gain. Computed as the band with the highest cumulative score across all its spots in the assistant list. A band with several ATNOs and needed entities will rank above a band with many already-worked stations.
Calculation
Both values are derived entirely from
QList<DXSpot>already stored in the widget — no new network requests, no new data structures.Both are recalculated every time
addOrUpdateSpot()orrecalculateAll()is called (i.e. on every new spot and every new QSO logged).Display
A thin, non-scrollable header row pinned above the spot table inside the
DXClusterAssistantwindow:bandIdviaDataProxy(e.g."20m","40m")—when the spot list is empty or no data is available for that bandRecalculation triggers
Same as the rest of the widget:
addOrUpdateSpot()→ header updatesrecalculateAll()→ header updatesFiles affected
src/dxcluster/dxclusterassistant.h— twoQLabelmembers for the summary bar; private helperupdateBandSummary()src/dxcluster/dxclusterassistant.cpp—updateBandSummary()implementation; call it fromaddOrUpdateSpot(),recalculateAll(), and the TTL timer slotCloses
Closes #796 — The band to be
Closes #860 — Widget showing the most active band
Related
Part of the DX Assistant feature (#1018). Requires the widget redesign (#1012) to be implemented first.