diff --git a/USER_MANUAL.html b/USER_MANUAL.html index aa4f99a3..bd95dbf6 100644 --- a/USER_MANUAL.html +++ b/USER_MANUAL.html @@ -652,9 +652,10 @@

Enhancements:
  • Build system:
      diff --git a/USER_MANUAL.md b/USER_MANUAL.md index d189bfc2..bd553fcd 100644 --- a/USER_MANUAL.md +++ b/USER_MANUAL.md @@ -895,9 +895,10 @@ LDPC | Low Density Parity Check Codes - a family of powerful FEC codes * Fix bug preventing saving of the previously used path when playing back files. (PR #729) 2. Enhancements: * Show green line indicating RX frequency. (PR #725) - * Update configuration of the Voice Keyer feature based on user feedback. (PR #730) + * Update configuration of the Voice Keyer feature based on user feedback. (PR #730, #746) * Add monitor volume adjustment. (PR #733) * Avoid modifying the audio device configuration without the user explicitly doing so. (PR #735) + * If provided by user, add config file to titlebar. (PR #738) 3. Build system: * Allow overrriding the version tag when building. (PR #727) * Update wxWidgets to 3.2.5. (PR #731) diff --git a/USER_MANUAL.pdf b/USER_MANUAL.pdf index 84b363b9..cc649a41 100644 Binary files a/USER_MANUAL.pdf and b/USER_MANUAL.pdf differ diff --git a/src/config/FreeDVConfiguration.cpp b/src/config/FreeDVConfiguration.cpp index 4d7dc57c..66ab271c 100644 --- a/src/config/FreeDVConfiguration.cpp +++ b/src/config/FreeDVConfiguration.cpp @@ -196,7 +196,14 @@ void FreeDVConfiguration::load(wxConfigBase* config) voiceKeyerWaveFilePath = path; voiceKeyerWaveFile = name; } - + else + { + // Make sure path isn't in the filename + voiceKeyerWaveFile->Replace(voiceKeyerWaveFilePath, ""); + voiceKeyerWaveFile->Replace("/", ""); + voiceKeyerWaveFile->Replace("\\", ""); + } + load_(config, voiceKeyerRxPause); load_(config, voiceKeyerRepeats); diff --git a/src/gui/dialogs/dlg_audiooptions.cpp b/src/gui/dialogs/dlg_audiooptions.cpp index f196f723..0b512748 100644 --- a/src/gui/dialogs/dlg_audiooptions.cpp +++ b/src/gui/dialogs/dlg_audiooptions.cpp @@ -88,6 +88,11 @@ void AudioOptsDialog::buildTestControls(PlotScalar **plotScalar, wxButton **btnT //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= AudioOptsDialog::AudioOptsDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style) { + if (wxGetApp().customConfigFileName != "") + { + SetTitle(wxString::Format("%s (%s)", title, wxGetApp().customConfigFileName)); + } + if (g_verbose) fprintf(stderr, "pos %d %d\n", pos.x, pos.y); audioEngineInit(); diff --git a/src/gui/dialogs/dlg_easy_setup.cpp b/src/gui/dialogs/dlg_easy_setup.cpp index 1a484b19..136f3a40 100644 --- a/src/gui/dialogs/dlg_easy_setup.cpp +++ b/src/gui/dialogs/dlg_easy_setup.cpp @@ -55,6 +55,11 @@ EasySetupDialog::EasySetupDialog(wxWindow* parent, wxWindowID id, const wxString , serialPortTestObject_(nullptr) , hasAppliedChanges_(false) { + if (wxGetApp().customConfigFileName != "") + { + SetTitle(wxString::Format("%s (%s)", title, wxGetApp().customConfigFileName)); + } + // Create top-level of control hierarchy. wxPanel* panel = new wxPanel(this); wxBoxSizer* sectionSizer = new wxBoxSizer(wxVERTICAL); diff --git a/src/gui/dialogs/dlg_filter.cpp b/src/gui/dialogs/dlg_filter.cpp index e6b3f1e4..0bdb9700 100644 --- a/src/gui/dialogs/dlg_filter.cpp +++ b/src/gui/dialogs/dlg_filter.cpp @@ -59,6 +59,11 @@ extern wxMutex g_mutexProtectingCallbackData; FilterDlg::FilterDlg(wxWindow* parent, bool running, bool *newMicInFilter, bool *newSpkOutFilter, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style) { + if (wxGetApp().customConfigFileName != "") + { + SetTitle(wxString::Format("%s (%s)", title, wxGetApp().customConfigFileName)); + } + m_running = running; m_newMicInFilter = newMicInFilter; m_newSpkOutFilter = newSpkOutFilter; diff --git a/src/gui/dialogs/dlg_options.cpp b/src/gui/dialogs/dlg_options.cpp index dc515e23..7f8755da 100644 --- a/src/gui/dialogs/dlg_options.cpp +++ b/src/gui/dialogs/dlg_options.cpp @@ -44,6 +44,11 @@ extern wxConfigBase *pConfig; //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= OptionsDlg::OptionsDlg(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style) { + if (wxGetApp().customConfigFileName != "") + { + SetTitle(wxString::Format("%s (%s)", title, wxGetApp().customConfigFileName)); + } + sessionActive_ = false; wxPanel* panel = new wxPanel(this); diff --git a/src/gui/dialogs/dlg_ptt.cpp b/src/gui/dialogs/dlg_ptt.cpp index 2f598489..fc34bda3 100644 --- a/src/gui/dialogs/dlg_ptt.cpp +++ b/src/gui/dialogs/dlg_ptt.cpp @@ -48,6 +48,11 @@ extern wxConfigBase *pConfig; //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= ComPortsDlg::ComPortsDlg(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style) { + if (wxGetApp().customConfigFileName != "") + { + SetTitle(wxString::Format("%s (%s)", title, wxGetApp().customConfigFileName)); + } + wxPanel* panel = new wxPanel(this); wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL); diff --git a/src/gui/dialogs/freedv_reporter.cpp b/src/gui/dialogs/freedv_reporter.cpp index a0b687e3..4350646f 100644 --- a/src/gui/dialogs/freedv_reporter.cpp +++ b/src/gui/dialogs/freedv_reporter.cpp @@ -90,6 +90,11 @@ FreeDVReporterDialog::FreeDVReporterDialog(wxWindow* parent, wxWindowID id, cons , filterSelfMessageUpdates_(false) , filteredFrequency_(0) { + if (wxGetApp().customConfigFileName != "") + { + SetTitle(wxString::Format("%s (%s)", _("FreeDV Reporter"), wxGetApp().customConfigFileName)); + } + for (int col = 0; col < NUM_COLS; col++) { columnLengths_[col] = DefaultColumnWidths_[col]; diff --git a/src/main.cpp b/src/main.cpp index 7d901330..874775e5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -204,6 +204,10 @@ bool MainApp::OnCmdLineParsed(wxCmdLineParser& parser) fprintf(stderr, "Loading configuration from %s\n", (const char*)configPath.ToUTF8()); pConfig = new wxFileConfig(wxT("FreeDV"), wxT("CODEC2-Project"), configPath, configPath, wxCONFIG_USE_LOCAL_FILE); wxConfigBase::Set(pConfig); + + // On Linux/macOS, this replaces $HOME with "~" to shorten the title a bit. + wxFileName fn(configPath); + customConfigFileName = fn.GetFullName(); } pConfig->SetRecordDefaults(); @@ -240,7 +244,7 @@ bool MainApp::OnInit() // displayed. But it doesn't when built from command line. Why? frame->m_auiNbookCtrl->ChangeSelection(0); - frame->Layout(); + frame->Layout(); frame->Show(); g_parent =frame; @@ -650,6 +654,12 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent, wxID_ANY, _("FreeDV ") pthread_setname_np(pthread_self(), "FreeDV GUI"); #endif // defined(__linux__) + // Add config file name to title bar if provided at the command line. + if (wxGetApp().customConfigFileName != "") + { + SetTitle(wxString::Format("%s (%s)", _("FreeDV ") + _(FREEDV_VERSION), wxGetApp().customConfigFileName)); + } + m_reporterDialog = nullptr; m_filterDialog = nullptr; diff --git a/src/main.h b/src/main.h index f49e43a1..006f65a9 100644 --- a/src/main.h +++ b/src/main.h @@ -168,6 +168,7 @@ class MainApp : public wxApp bool CanAccessSerialPort(std::string portName); FreeDVConfiguration appConfiguration; + wxString customConfigFileName; // PTT ----------------------------------- unsigned int m_intHamlibRig;