Skip to content

[DX Assistant] Show "Most active band" and "Band to be" summary in the widget #1019

Description

@ea4k

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.cppupdateBandSummary() implementation; call it from addOrUpdateSpot(), recalculateAll(), and the TTL timer slot

Closes

Closes #796The band to be
Closes #860Widget showing the most active band

Related

Part of the DX Assistant feature (#1018). Requires the widget redesign (#1012) to be implemented first.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions