Request preparation
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
- Open Settings → SpotHub and connect to any source (Cluster or RBN).
- Allow spots to accumulate in the Spot List tab.
- Note the spot count shown at the bottom.
- Click Clear All Spots on the Display tab.
- Observed: Spot List counter still shows old count (Bug 2).
- Close SpotHub and reopen it.
- Observed: All spots are back (Bug 1).
- Inspect any source console tab (e.g. Cluster, RBN).
- Observed: Console text is back; no Clear button exists (Bug 3).
- 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."
Request preparation
What would you like?
Labels:
bug,GUI,external devicesWhat happened
DxClusterDialog(Settings → SpotHub) has two "Clear" buttons withinconsistent 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 hasWA_DeleteOnCloseset, soSpotTableModelis destroyed on close. On every open,loadLogFiles()callstailFile()and repopulates the table from the last 500 lines of eachon-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_totalSpotsLabelon the Display tab.countLabelon theSpot 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
QPlainTextEditto 2000 blocks viasetMaximumBlockCountbuthave no Clear button. On reopen,
loadLogFiles()repopulates each consolefrom 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 sendsspot cleartothe radio and clears
RadioModel::SpotModel. The different labels suggestdifferent scope but no tooltip explains the distinction to the user.
Bug 5 -- No tooltips on either Clear button
Four
setToolTip()calls exist inDxClusterDialog.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
reopening SpotHub the list is empty.
which Clear button was used.
FreeDV) has a Clear button that clears the displayed text.
behavioral difference explicit.
Steps to reproduce
Environment
previous session are sufficient for reproduction.
Root cause (verified by code inspection)
src/gui/DxClusterDialog.cpploadLogFiles()called unconditionally on every dialog opensrc/gui/DxClusterDialog.cpptailFile()reads last 500 lines from each log filesrc/gui/DxClusterDialog.cppSpotTableModelandcountLabelonlysrc/gui/DxClusterDialog.cppSpotTableModel+ radio model but notcountLabelsrc/gui/DxClusterDialog.cppAdditional finding -- SpotSettingsDialog is dead code
SpotSettingsDialog(src/gui/SpotSettingsDialog.h/.cpp) is a fullyimplemented dialog class that is never instantiated. Its header is not
#included anywhere outside its own.cpp, and there is nonew SpotSettingsDialog(...)call anywhere in the codebase. It is unreachablefrom 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
countLabelon the Spot List tab. Consider connectingcountLabeltomodelResetas well asrowsInsertedso it stays correctregardless 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 thecorresponding 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."