Use last selected row (FreeDV Reporter, main window) instead of prioritizing main window (#1196)

* Logging: Track last seelcted for autofill to reduce user confusion.

* Update documentation.

* Add PR #1196 to changelog.

* Make sure equalizer is actually live on startup.

* Record suffix should use last selected source as well.

* Make sure drop-down is deselected when no callsigns are selected.

* Prepare for 2.2.0 release.
ms-hamlib-50-compile-fix
Mooneer Salem 2026-01-28 13:15:43 -08:00 committed by GitHub
parent f63432b935
commit bc8ff4d44c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 106 additions and 54 deletions

View File

@ -1,5 +1,32 @@
# Changes in older releases
## V2.1.0 November 2025
1. Bugfixes:
* Clean up wxWidgets warnings in Audio Config window. (PR #1044)
* Fix CAT control and frequency formatting problems on non-English computers. (PR #1050)
* Clean up ThreadSanitizer warnings in codebase. (PR #1053)
* Clean up UndefinedBehaviorSanitizer warnings in codebase. (PR #1061)
* Divide displayed TX Attenuation level by 10 on startup. (PR #1060)
* Fix issue preventing FreeDV Reporter from properly being restored to the correct display. (PR #1055)
* Fix intermittent FreeDV Reporter related crash on Windows. (PR #1075)
* Update Visual Studio Redistributable to version 17 to resolve RADE startup crashes. (PR #1074)
2. Enhancements:
* Additional cleanup of code that runs in real-time. (PR #1039, #1068, #1077)
* Print error if one attempts to use a stereo WAV file instead of a mono one. (PR #1052)
* Hamlib: Add support for automatically displaying only the valid baud rates. (PR #1057)
* CPU reductions when rendering plots, especially on X11/Xwayland systems. (PR #1064)
* Add implementation of Flex waveform for Flex 6000/8000/Aurora series. (PR #1018, #1088)
* Add ka9q-radio integration for use with web-based SDRs and similar. (PR #1066)
* Support bulk updates from FreeDV Reporter server. (PR #1079)
* Hide Stats box by default. (PR #1081)
* Always allow frequency drop-down to be used, even if CAT and reporting are disabled. (PR #1080, #1093)
3. Build system:
* Add support for Thread/Undefined Behavior Sanitizer instrumentation on macOS and Linux builds. (PR #1075)
* Force all compiler warnings to be errors. (PR #1076)
* Enable clang-tidy scans on codebase. (PR #1086)
* Update CI process to enable automatic code signing of macOS and Linux builds. (PR #1078)
## V2.0.2 October 2025
1. Bugfixes:

View File

@ -58,12 +58,12 @@ endif(NOT DEFINED LINUX)
# Adds a tag to the end of the version string. Leave empty
# for official release builds.
if(NOT DEFINED FREEDV_VERSION_TAG)
set(FREEDV_VERSION_TAG "dev")
set(FREEDV_VERSION_TAG "")
# Uncomment the below definition to cause the build to expire
# six months from the day it was built. This should be commented
# for official releases.
add_definitions(-DUNOFFICIAL_RELEASE)
#add_definitions(-DUNOFFICIAL_RELEASE)
endif(NOT DEFINED FREEDV_VERSION_TAG)
# Prevent in-source builds to protect automake/autoconf config.

View File

@ -408,6 +408,13 @@ click the "Log QSO" button on the left side of the window. You will then see a d
enter any additional information about the contact. Upon clicking the OK button, this information will be
transmitted to your logging tool.
You can also log a contact if they're using FreeDV Reporter. Simply left-click on a row in the FreeDV Reporter
window and then click on the Log QSO button. This will autofill the callsign, grid square/locator and frequency
from the FreeDV Reporter servers in the dialog box.
The last selected logging source (either the FreeDV Reporter window or the drop-down callsign list at the bottom
of the main window) is used for auto-filling of logging data. This is to avoid confusion (for instance, if a row
in the main window is selected but it's intended to log from FreeDV Reporter instead).
# FreeDV Modes
@ -868,7 +875,7 @@ LDPC | Low Density Parity Check Codes - a family of powerful FEC codes
# Release Notes
## V2.2.0 TBD TBD
## V2.2.0 January 2026
1. Bugfixes:
* Radio integrations:
@ -927,7 +934,7 @@ LDPC | Low Density Parity Check Codes - a family of powerful FEC codes
* Reduce CPU usage rendering "scalar" plots (i.e. From Mic). (PR #1133)
* Linux: List /dev/rfcomm* serial devices when configuring. (PR #1106) - thanks @NespaLa!
* Hamlib: Allow selection of baud rates greater than 115200. (PR #1125)
* Add support for loggers that support the WSJT-X networking protocol. (PR #1129, #1153)
* Add support for loggers that support the WSJT-X networking protocol. (PR #1129, #1153, #1184, #1196)
* Add support for recording decoded audio. (PR #1145, #1184)
* Display Hamlib version in Help->About. (PR #1169)
3. Build system:
@ -940,36 +947,9 @@ LDPC | Low Density Parity Check Codes - a family of powerful FEC codes
*Note: Legacy modes (700D, 700E, 1600) are now hidden by default. (PR #1108) You can show them
again by going to Tools->Options->Modem and selecting "Enable Legacy Modes".*
## V2.1.0 November 2025
## Earlier than V2.2.0
1. Bugfixes:
* Clean up wxWidgets warnings in Audio Config window. (PR #1044)
* Fix CAT control and frequency formatting problems on non-English computers. (PR #1050)
* Clean up ThreadSanitizer warnings in codebase. (PR #1053)
* Clean up UndefinedBehaviorSanitizer warnings in codebase. (PR #1061)
* Divide displayed TX Attenuation level by 10 on startup. (PR #1060)
* Fix issue preventing FreeDV Reporter from properly being restored to the correct display. (PR #1055)
* Fix intermittent FreeDV Reporter related crash on Windows. (PR #1075)
* Update Visual Studio Redistributable to version 17 to resolve RADE startup crashes. (PR #1074)
2. Enhancements:
* Additional cleanup of code that runs in real-time. (PR #1039, #1068, #1077)
* Print error if one attempts to use a stereo WAV file instead of a mono one. (PR #1052)
* Hamlib: Add support for automatically displaying only the valid baud rates. (PR #1057)
* CPU reductions when rendering plots, especially on X11/Xwayland systems. (PR #1064)
* Add implementation of Flex waveform for Flex 6000/8000/Aurora series. (PR #1018, #1088)
* Add ka9q-radio integration for use with web-based SDRs and similar. (PR #1066)
* Support bulk updates from FreeDV Reporter server. (PR #1079)
* Hide Stats box by default. (PR #1081)
* Always allow frequency drop-down to be used, even if CAT and reporting are disabled. (PR #1080, #1093)
3. Build system:
* Add support for Thread/Undefined Behavior Sanitizer instrumentation on macOS and Linux builds. (PR #1075)
* Force all compiler warnings to be errors. (PR #1076)
* Enable clang-tidy scans on codebase. (PR #1086)
* Update CI process to enable automatic code signing of macOS and Linux builds. (PR #1078)
## Earlier than V2.1.0
See [this](https://github.com/drowe67/codec2/blob/master/CHANGELOG_OLD.md) for more information about changes in versions prior to v1.9.0.
See [this](https://github.com/drowe67/codec2/blob/master/CHANGELOG_OLD.md) for more information about changes in versions prior to 2.2.0.
# References

View File

@ -927,6 +927,7 @@ void FreeDVReporterDialog::DeselectItem()
wxDataViewItem item = m_listSpots->GetSelection();
if (item.IsOk())
{
wxGetApp().lastSelectedLoggingRow = MainApp::UNSELECTED;
m_listSpots->Unselect(item);
}
}
@ -1096,6 +1097,9 @@ void FreeDVReporterDialog::OnItemSelectionChanged(wxDataViewEvent& event)
// Bring up tooltip for longer reporting messages if the user happened to click on that column.
wxMouseEvent dummyEvent;
AdjustToolTip(dummyEvent);
// For logging: make sure FreeDV Reporter information is used
wxGetApp().lastSelectedLoggingRow = MainApp::FREEDV_REPORTER;
}
else
{

View File

@ -599,6 +599,7 @@ bool MainApp::OnInit()
m_locale.Init();
#endif // wxCHECK_VERSION(3,2,0)
lastSelectedLoggingRow = LastSelectedRow::UNSELECTED;
m_reporters.clear();
m_reportCounter = 0;
@ -3080,24 +3081,19 @@ void MainFrame::startRxStream()
g_rxUserdata->micInEQEnable = wxGetApp().appConfiguration.filterConfiguration.micInChannel.eqEnable;
g_rxUserdata->spkOutEQEnable = wxGetApp().appConfiguration.filterConfiguration.spkOutChannel.eqEnable;
if (
wxGetApp().appConfiguration.filterConfiguration.micInChannel.eqEnable ||
wxGetApp().appConfiguration.filterConfiguration.spkOutChannel.eqEnable)
if (g_nSoundCards == 1)
{
if (g_nSoundCards == 1)
{
designEQFilters(
g_rxUserdata,
wxGetApp().appConfiguration.audioConfiguration.soundCard1Out.sampleRate,
0);
}
else
{
designEQFilters(
g_rxUserdata,
wxGetApp().appConfiguration.audioConfiguration.soundCard2Out.sampleRate,
wxGetApp().appConfiguration.audioConfiguration.soundCard2In.sampleRate);
}
designEQFilters(
g_rxUserdata,
wxGetApp().appConfiguration.audioConfiguration.soundCard1Out.sampleRate,
0);
}
else
{
designEQFilters(
g_rxUserdata,
wxGetApp().appConfiguration.audioConfiguration.soundCard2Out.sampleRate,
wxGetApp().appConfiguration.audioConfiguration.soundCard2In.sampleRate);
}
m_newMicInFilter = m_newSpkOutFilter = false;

View File

@ -163,6 +163,14 @@ class FreeDVReporterDialog;
class MainApp : public wxApp
{
public:
// Indicates which row was last selected (for auto-filling during logging)
enum LastSelectedRow
{
UNSELECTED,
MAIN_WINDOW,
FREEDV_REPORTER,
};
virtual bool OnInit();
virtual void OnInitCmdLine(wxCmdLineParser& parser);
virtual bool OnCmdLineParsed(wxCmdLineParser& parser);
@ -171,6 +179,8 @@ class MainApp : public wxApp
bool CanAccessSerialPort(std::string const& portName);
LastSelectedRow lastSelectedLoggingRow;
FreeDVConfiguration appConfiguration;
wxString customConfigFileName;
@ -431,6 +441,9 @@ class MainFrame : public TopFrame
void OnResetMicSpkrLevel(wxMouseEvent& event) override;
void OnRightClickCallsignList(wxMouseEvent& event) override;
void OnOpenCallsignList( wxCommandEvent& event ) override;
void OnCloseCallsignList( wxCommandEvent& event ) override;
private:
const wxString SNR_FORMAT_STR;

View File

@ -1262,7 +1262,7 @@ void MainFrame::OnLogQSO(wxCommandEvent&)
uint64_t dxFreqHz = 0;
auto selected = m_lastReportedCallsignListView->GetFirstSelected();
if (selected != -1)
if (wxGetApp().lastSelectedLoggingRow == MainApp::MAIN_WINDOW && selected != -1)
{
// Get callsign and RX frequency
dxCall = m_lastReportedCallsignListView->GetItemText(selected, 0);
@ -1293,7 +1293,10 @@ void MainFrame::OnLogQSO(wxCommandEvent&)
log_info("Logging %s/%s at %" PRIu64 " Hz from main window drop-down list", (const char*)dxCall.ToUTF8(), (const char*)dxGrid.ToUTF8(), dxFreqHz);
}
else if (m_reporterDialog != nullptr && m_reporterDialog->getSelectedCallsignInfo(dxCall, dxGrid, dxFreqHz))
else if (
m_reporterDialog != nullptr &&
wxGetApp().lastSelectedLoggingRow == MainApp::FREEDV_REPORTER &&
m_reporterDialog->getSelectedCallsignInfo(dxCall, dxGrid, dxFreqHz))
{
log_info("Logging %s/%s at %" PRIu64 " Hz from FreeDV Reporter", (const char*)dxCall.ToUTF8(), (const char*)dxGrid.ToUTF8(), dxFreqHz);
}
@ -1340,6 +1343,7 @@ void MainFrame::OnRightClickCallsignList(wxMouseEvent&)
auto index = m_lastReportedCallsignListView->GetFirstSelected();
while (index != -1)
{
wxGetApp().lastSelectedLoggingRow = MainApp::UNSELECTED;
m_lastReportedCallsignListView->Select(index, false);
index = m_lastReportedCallsignListView->GetFirstSelected();
}
@ -1347,6 +1351,24 @@ void MainFrame::OnRightClickCallsignList(wxMouseEvent&)
m_BtnCallSignReset->SetFocus();
}
void MainFrame::OnOpenCallsignList( wxCommandEvent& event )
{
wxGetApp().lastSelectedLoggingRow = MainApp::MAIN_WINDOW;
event.Skip();
}
void MainFrame::OnCloseCallsignList( wxCommandEvent& event )
{
auto index = m_lastReportedCallsignListView->GetFirstSelected();
if (index == -1)
{
// Make sure we're not selected if no callsigns selected.
wxGetApp().lastSelectedLoggingRow = MainApp::UNSELECTED;
m_BtnCallSignReset->SetFocus();
}
event.Skip();
}
void MainFrame::resetStats_()
{
if (m_RxRunning) {

View File

@ -230,13 +230,16 @@ void MainFrame::OnTogBtnRecord(wxCommandEvent& event)
{
wxString dxCall;
auto selected = m_lastReportedCallsignListView->GetFirstSelected();
if (selected != -1)
if (wxGetApp().lastSelectedLoggingRow == MainApp::MAIN_WINDOW && selected != -1)
{
// Get callsign and RX frequency
dxCall = m_lastReportedCallsignListView->GetItemText(selected, 0);
log_info("Using %s from main window drop-down list as default recording suffix", (const char*)dxCall.ToUTF8());
}
else if (m_reporterDialog != nullptr && m_reporterDialog->getSelectedCallsignInfo(dxCall))
else if (
m_reporterDialog != nullptr &&
wxGetApp().lastSelectedLoggingRow == MainApp::FREEDV_REPORTER &&
m_reporterDialog->getSelectedCallsignInfo(dxCall))
{
log_info("Using %s from FreeDV Reporter as default recording suffix", (const char*)dxCall.ToUTF8());
}

View File

@ -907,6 +907,8 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const
m_cboReportFrequency->Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(TopFrame::OnReportFrequencySetFocus), NULL, this);
m_cboReportFrequency->Connect(wxEVT_KILL_FOCUS, wxFocusEventHandler(TopFrame::OnReportFrequencyKillFocus), NULL, this);
m_cboLastReportedCallsigns->Connect(wxEVT_COMBOBOX_DROPDOWN, wxCommandEventHandler(TopFrame::OnOpenCallsignList), NULL, this);
m_cboLastReportedCallsigns->Connect(wxEVT_COMBOBOX_CLOSEUP, wxCommandEventHandler(TopFrame::OnCloseCallsignList), NULL, this);
m_cboLastReportedCallsigns->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TopFrame::OnRightClickCallsignList), NULL, this);
m_auiNbookCtrl->Connect(wxEVT_AUINOTEBOOK_PAGE_CHANGING, wxAuiNotebookEventHandler(TopFrame::OnNotebookPageChanging), NULL, this);
@ -1002,6 +1004,8 @@ TopFrame::~TopFrame()
m_cboReportFrequency->Disconnect(wxEVT_KILL_FOCUS, wxFocusEventHandler(TopFrame::OnReportFrequencyKillFocus), NULL, this);
m_cboLastReportedCallsigns->Disconnect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TopFrame::OnRightClickCallsignList), NULL, this);
m_cboLastReportedCallsigns->Disconnect(wxEVT_COMBOBOX_DROPDOWN, wxCommandEventHandler(TopFrame::OnOpenCallsignList), NULL, this);
m_cboLastReportedCallsigns->Disconnect(wxEVT_COMBOBOX_CLOSEUP, wxCommandEventHandler(TopFrame::OnCloseCallsignList), NULL, this);
}
void TopFrame::setVoiceKeyerButtonLabel_(wxString filename)

View File

@ -224,6 +224,9 @@ class TopFrame : public wxFrame
virtual void OnResetMicSpkrLevel(wxMouseEvent& event) { event.Skip(); }
virtual void OnRightClickCallsignList(wxMouseEvent& event) { event.Skip(); }
virtual void OnOpenCallsignList( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCloseCallsignList( wxCommandEvent& event ) { event.Skip(); }
void setVoiceKeyerButtonLabel_(wxString filename);