Skip to content

SpotHub: Spots and console text return after close/reopen; consoles lack Clear buttons; Clear buttons lack tooltips #2022

Description

@TnxQSO-Admin

Request preparation

  • I used an AI assistant to help structure this request
  • I checked for existing issues covering the same feature

What would you like?

Labels: bug, GUI, external devices


What happened

DxClusterDialog (Settings → SpotHub) has two "Clear" buttons with
inconsistent behavior, and no way to clear any of the six source console tabs.

Bug 1 -- Spots return after close/reopen

Spots displayed in the Spot List tab come from SpotTableModel
(QVector<DxSpot>, dialog-local). The dialog has WA_DeleteOnClose set, so
SpotTableModel is destroyed on close. On every open, loadLogFiles() calls
tailFile() and repopulates the table from the last 500 lines of each
on-disk log file written by DxClusterClient, RbnClient, etc.

Neither Clear button truncates or deletes these log files. Clicking either
Clear button wipes the in-memory table, but on next open all spots are
restored from disk.

Bug 2 -- "Clear All Spots" (Display tab) does not update the Spot List counter

The Spot List tab has its own counter label (countLabel). Its "Clear"
button lambda manually resets it to "0 spots" after clearing.

The Display tab's "Clear All Spots" button also calls m_spotModel->clear()
but only updates m_totalSpotsLabel on the Display tab. countLabel on the
Spot List tab is not touched, leaving it stuck at the pre-clear value after
"Clear All Spots" is used.

Bug 3 -- No Clear button on any source console tab

All six console tabs (Cluster, RBN, WSJT-X, SpotCollector, POTA, FreeDV)
limit their QPlainTextEdit to 2000 blocks via setMaximumBlockCount but
have no Clear button. On reopen, loadLogFiles() repopulates each console
from the same log files. There is no way to clear a console from the UI.

Bug 4 -- Inconsistent button labels

There are two buttons operating on the same spot list: "Clear" (Spot List
tab, line 1708) and "Clear All Spots" (Display tab, line 2135). Both
clear SpotTableModel. The Display button additionally sends spot clear to
the radio and clears RadioModel::SpotModel. The different labels suggest
different scope but no tooltip explains the distinction to the user.

Bug 5 -- No tooltips on either Clear button

Four setToolTip() calls exist in DxClusterDialog.cpp (lines 1782, 1799,
1817), all on toggle buttons in the Spot List tab. Neither Clear button has a
tooltip. Given that the two buttons have different side effects (one clears
display only; the other also clears the radio-side spot model and sends a
command to the radio), a tooltip explaining the difference would be
particularly useful here.


What I expected

  • Clicking any Clear button removes spots permanently. After closing and
    reopening SpotHub the list is empty.
  • The spot counter on the Spot List tab resets to "0 spots" regardless of
    which Clear button was used.
  • Each source console tab (Cluster, RBN, WSJT-X, SpotCollector, POTA,
    FreeDV) has a Clear button that clears the displayed text.
  • Both Clear buttons have a tooltip explaining what they clear.
  • Ideally: consistent button labels, or at minimum tooltips that make the
    behavioral difference explicit.

Steps to reproduce

  1. Open Settings → SpotHub and connect to any source (Cluster or RBN).
  2. Allow spots to accumulate in the Spot List tab.
  3. Note the spot count shown at the bottom.
  4. Click Clear All Spots on the Display tab.
    • Observed: Spot List counter still shows old count (Bug 2).
  5. Close SpotHub and reopen it.
    • Observed: All spots are back (Bug 1).
  6. Inspect any source console tab (e.g. Cluster, RBN).
    • Observed: Console text is back; no Clear button exists (Bug 3).
  7. Hover over either Clear button.
    • Observed: No tooltip appears (Bug 5).

Environment

  • AetherSDR v0.5.2
  • Linux
  • Radio not required to reproduce Bug 1, 2, 3, 5 -- log files from a
    previous session are sufficient for reproduction.

Root cause (verified by code inspection)

File Lines Issue
src/gui/DxClusterDialog.cpp 567-636 loadLogFiles() called unconditionally on every dialog open
src/gui/DxClusterDialog.cpp 34-72 tailFile() reads last 500 lines from each log file
src/gui/DxClusterDialog.cpp 1708 "Clear" clears SpotTableModel and countLabel only
src/gui/DxClusterDialog.cpp 2135 "Clear All Spots" clears SpotTableModel + radio model but not countLabel
src/gui/DxClusterDialog.cpp 768, 957, 1225, 1326, 1467, 1584 Six consoles, no Clear button on any

Additional finding -- SpotSettingsDialog is dead code

SpotSettingsDialog (src/gui/SpotSettingsDialog.h/.cpp) is a fully
implemented dialog class that is never instantiated. Its header is not
#included anywhere outside its own .cpp, and there is no new SpotSettingsDialog(...) call anywhere in the codebase. It is unreachable
from any menu, button, or keyboard shortcut. It should either be wired up
to a call site or removed.


Suggested fix

Bug 1 (spots return): When any Clear button is clicked, truncate the
relevant log files in addition to clearing the in-memory model. Both Clear
button handlers need to agree on this.

Bug 2 (counter not updated): The Display tab's "Clear All Spots" handler
must also reset countLabel on the Spot List tab. Consider connecting
countLabel to modelReset as well as rowsInserted so it stays correct
regardless of how the model is cleared.

Bug 3 (no console Clear): Add a Clear button to each source tab,
wired to console->clear(). If log-file loading is kept, also truncate the
corresponding log file so text does not reload on next open.

Bug 4 (inconsistent labels): Standardize to one label. If the behavioral
difference between the two buttons is intentional, keep distinct labels and
add tooltips explaining each (see Bug 5).

Bug 5 (missing tooltips): Add setToolTip() to both Clear buttons.
Example for the Display tab button:
"Clears all spots from the display and sends a clear command to the radio."
Example for the Spot List tab button:
"Clears the spot display. Does not send a command to the radio."

Metadata

Metadata

Assignees

No one assigned

    Labels

    GUIUser interfacebugSomething isn't workingexternal devicesFlexControl, MIDI, serial port, USB peripheralsmaintainer-reviewRequires maintainer review before any action is takenpriority: lowLow priority

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions