From 553a2dd5a141a528670d6602722342c95207c9bb Mon Sep 17 00:00:00 2001 From: drowe67 Date: Sat, 24 Nov 2012 22:03:07 +0000 Subject: [PATCH] added filter dialog, it displays OK but doesn't do anything yet. test OK under Linux git-svn-id: https://svn.code.sf.net/p/freetel/code@1059 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/src/Makefile.linux | 5 +- fdmdv2/src/Makefile.win32 | 5 +- fdmdv2/src/dlg_filter.cpp | 185 ++++++++++++++++++++++++++++++++++++ fdmdv2/src/dlg_filter.h | 62 ++++++++++++ fdmdv2/src/fdmdv2_defines.h | 5 + fdmdv2/src/fdmdv2_main.cpp | 25 ++++- fdmdv2/src/fdmdv2_main.h | 8 ++ fdmdv2/src/topFrame.cpp | 8 ++ fdmdv2/src/topFrame.h | 2 + 9 files changed, 299 insertions(+), 6 deletions(-) create mode 100644 fdmdv2/src/dlg_filter.cpp create mode 100644 fdmdv2/src/dlg_filter.h diff --git a/fdmdv2/src/Makefile.linux b/fdmdv2/src/Makefile.linux index 058d8072..9b7028e6 100644 --- a/fdmdv2/src/Makefile.linux +++ b/fdmdv2/src/Makefile.linux @@ -27,9 +27,10 @@ fdmdv2_plot_spectrum.o \ fdmdv2_plot_waterfall_linux.o \ fdmdv2_pa_wrapper.o \ dlg_audiooptions.o \ -dlg_comports.o +dlg_comports.o \ +dlg_filter.o -HDRS = dlg_audiooptions.h dlg_comports.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h +HDRS = dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h all: freedv diff --git a/fdmdv2/src/Makefile.win32 b/fdmdv2/src/Makefile.win32 index 496eb1dc..442b4242 100644 --- a/fdmdv2/src/Makefile.win32 +++ b/fdmdv2/src/Makefile.win32 @@ -27,9 +27,10 @@ fdmdv2_plot_spectrum.o \ fdmdv2_plot_waterfall_linux.o \ fdmdv2_pa_wrapper.o \ dlg_audiooptions.o \ -dlg_comports.o +dlg_comports.o \ +dlg_filter.o -HDRS = dlg_audiooptions.h dlg_comports.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h dlg_audiooptions.h +HDRS = dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h dlg_audiooptions.h all: freedv diff --git a/fdmdv2/src/dlg_filter.cpp b/fdmdv2/src/dlg_filter.cpp new file mode 100644 index 00000000..78faa8e2 --- /dev/null +++ b/fdmdv2/src/dlg_filter.cpp @@ -0,0 +1,185 @@ +//========================================================================== +// Name: dlg_filter.cpp +// Purpose: Dialog for controlling Codec audio filtering +// Date: Nov 25 2012 +// Authors: David Rowe, David Witten +// +// License: +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2.1, +// as published by the Free Software Foundation. This program is +// distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, see . +// +//========================================================================== +#include "dlg_filter.h" + +#define SLIDER_MAX 20 + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// Class FilterDlg +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +FilterDlg::FilterDlg(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style) +{ + this->SetSizeHints(wxDefaultSize, wxDefaultSize); + this->SetSizeHints(wxDefaultSize, wxDefaultSize); + + wxBoxSizer* bSizer30; + bSizer30 = new wxBoxSizer(wxVERTICAL); + + wxGridSizer* gSizer3; + gSizer3 = new wxGridSizer(6, 2, 0, 0); + + m_staticText8 = new wxStaticText(this, wxID_ANY, _("Enable LPC Post Filter:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); + m_staticText8->Wrap(-1); + gSizer3->Add(m_staticText8, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 2); + + m_codec2LPCPostFilterEnable = new wxCheckBox(this, wxID_ANY, _(""), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE); + gSizer3->Add(m_codec2LPCPostFilterEnable, 2, wxALL|wxEXPAND, 2); + + m_staticText9 = new wxStaticText(this, wxID_ANY, _("0-1 kHz 3dB Boost"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); + m_staticText9->Wrap(-1); + gSizer3->Add(m_staticText9, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 2); + + m_codec2LPCPostFilterBassBoost = new wxCheckBox(this, wxID_ANY, _(""), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE); + gSizer3->Add(m_codec2LPCPostFilterBassBoost, 1, wxALIGN_CENTER_VERTICAL|wxALL, 2); + + m_staticText91 = new wxStaticText(this, wxID_ANY, _("Beta:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); + m_staticText91->Wrap(-1); + gSizer3->Add(m_staticText91, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 2); + + m_codec2LPCPostFilterBeta = new wxSlider(this, wxID_ANY, 0, 0, SLIDER_MAX); + gSizer3->Add(m_codec2LPCPostFilterBeta, 1, wxALIGN_CENTER_VERTICAL|wxALL, 2); + + m_staticText911 = new wxStaticText(this, wxID_ANY, _("Gamma:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); + m_staticText911->Wrap(-1); + gSizer3->Add(m_staticText911, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 2); + + m_codec2LPCPostFilterGamma = new wxSlider(this, wxID_ANY, 0, 0, SLIDER_MAX); + gSizer3->Add(m_codec2LPCPostFilterGamma, 1, wxALIGN_CENTER_VERTICAL|wxALL, 2); + + bSizer30->Add(gSizer3, 1, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 5); + + m_sdbSizer5 = new wxStdDialogButtonSizer(); + m_sdbSizer5OK = new wxButton(this, wxID_OK); + m_sdbSizer5->AddButton(m_sdbSizer5OK); + m_sdbSizer5Apply = new wxButton(this, wxID_APPLY); + m_sdbSizer5->AddButton(m_sdbSizer5Apply); + m_sdbSizer5Cancel = new wxButton(this, wxID_CANCEL); + m_sdbSizer5->AddButton(m_sdbSizer5Cancel); + m_sdbSizer5->Realize(); + + bSizer30->Add(m_sdbSizer5, 0, wxEXPAND, 5); + + + this->SetSizer(bSizer30); + this->Layout(); + + this->Centre(wxBOTH); + this->Centre(wxBOTH); + + // Connect Events + this->Connect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(FilterDlg::OnInitDialog)); + //m_sdbSizer5Apply->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnApply), NULL, this); + m_sdbSizer5Cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnCancel), NULL, this); + m_sdbSizer5OK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnOK), NULL, this); + //m_listCtrlPortSelect->Connect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(FilterDlg::OnListItemSelected), NULL, this); +} + +//------------------------------------------------------------------------- +// ~FilterDlg() +//------------------------------------------------------------------------- +FilterDlg::~FilterDlg() +{ + // Disconnect Events + this->Disconnect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(FilterDlg::OnInitDialog)); + //m_listCtrlPortSelect->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(FilterDlg::OnListItemSelected), NULL, this); + //m_sdbSizer5Apply->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnApply), NULL, this); + m_sdbSizer5Cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnCancel), NULL, this); + m_sdbSizer5OK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnOK), NULL, this); +} + +//------------------------------------------------------------------------- +// OnListItemSelected() +//------------------------------------------------------------------------- +void FilterDlg::OnListItemSelected(wxListEvent& event) +{ + // TODO: Implement OnListItemSelected +} + +//------------------------------------------------------------------------- +// ExchangeData() +//------------------------------------------------------------------------- +void FilterDlg::ExchangeData(int inout) +{ + wxConfigBase *pConfig = wxConfigBase::Get(); + if(inout == EXCHANGE_DATA_IN) + { + m_codec2LPCPostFilterEnable->SetValue(wxGetApp().m_codec2LPCPostFilterEnable); + m_codec2LPCPostFilterBassBoost->SetValue(wxGetApp().m_codec2LPCPostFilterBassBoost); + //m_codec2LPCPostFilterBeta->SetValue(wxGetApp().m_codec2LPCPostFilterBeta); + //m_codec2LPCPostFilterGamma->SetValue(wxGetApp().m_codec2LPCPostFilterGamma); + } + if(inout == EXCHANGE_DATA_OUT) + { + wxGetApp().m_codec2LPCPostFilterEnable = m_codec2LPCPostFilterEnable->GetValue(); + wxGetApp().m_codec2LPCPostFilterBassBoost = m_codec2LPCPostFilterBassBoost->GetValue(); + //wxGetApp().m_codec2LPCPostFilterBeta = m_codec2LPCPostFilterBeta->GetValue(); + //wxGetApp().m_codec2LPCPostFilterGamma = m_codec2LPCPostFilterGamma->GetValue(); + + pConfig->Write(wxT("/Filter/codec2LPCPostFilterEnable"), wxGetApp().m_codec2LPCPostFilterEnable); + pConfig->Write(wxT("/Filter/codec2LPCPostFilterBassBoost"), wxGetApp().m_codec2LPCPostFilterBassBoost); + //pConfig->Write(wxT("/Filter/codec2LPCPostFilterBeta"), wxGetApp().m_codec2LPCPostFilterBeta); + //pConfig->Write(wxT("/Filter/codec2LPCPostFilterGamma"), wxGetApp().m_codec2LPCPostFilterGamma); + + pConfig->Flush(); + } + delete wxConfigBase::Set((wxConfigBase *) NULL); +} + +//------------------------------------------------------------------------- +// OnCancel() +//------------------------------------------------------------------------- +void FilterDlg::OnCancel(wxCommandEvent& event) +{ + this->EndModal(wxID_CANCEL); +} + +//------------------------------------------------------------------------- +// OnOK() +//------------------------------------------------------------------------- +void FilterDlg::OnOK(wxCommandEvent& event) +{ + this->EndModal(wxID_OK); +} + +//------------------------------------------------------------------------- +// OnApply() +//------------------------------------------------------------------------- +void FilterDlg::OnApply(wxCommandEvent& event) +{ + ExchangeData(EXCHANGE_DATA_OUT); +} + +//------------------------------------------------------------------------- +// OnClose() +//------------------------------------------------------------------------- +void FilterDlg::OnClose(wxCloseEvent& event) +{ + this->EndModal(wxID_OK); +} + +//------------------------------------------------------------------------- +// OnInitDialog() +//------------------------------------------------------------------------- +void FilterDlg::OnInitDialog(wxInitDialogEvent& event) +{ + ExchangeData(EXCHANGE_DATA_IN); +} + diff --git a/fdmdv2/src/dlg_filter.h b/fdmdv2/src/dlg_filter.h new file mode 100644 index 00000000..2b56bcbf --- /dev/null +++ b/fdmdv2/src/dlg_filter.h @@ -0,0 +1,62 @@ +//========================================================================== +// Name: dlg_filter.h +// Purpose: Dialog for controlling Codec audio filtering +// Created: Nov 25 2012 +// Authors: David Rowe, David Witten +// +// License: +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2.1, +// as published by the Free Software Foundation. This program is +// distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, see . +// +//========================================================================== + +#ifndef __FILTER_DIALOG__ +#define __FILTER_DIALOG__ + +#include "fdmdv2_main.h" + +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +// Class FilterDlg +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +class FilterDlg : public wxDialog +{ + public: + FilterDlg( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Filter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 399,354 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~FilterDlg(); + + void ExchangeData(int inout); + + protected: + // Handlers for events. + void OnListItemSelected(wxListEvent& event); + void OnCancel(wxCommandEvent& event); + void OnOK(wxCommandEvent& event); + void OnClose(wxCloseEvent& event); + void OnInitDialog(wxInitDialogEvent& event); + void OnApply(wxCommandEvent& event); + + wxStaticText* m_staticText8; + wxCheckBox* m_codec2LPCPostFilterEnable; + wxStaticText* m_staticText9; + wxCheckBox* m_codec2LPCPostFilterBassBoost; + wxStaticText* m_staticText91; + wxSlider* m_codec2LPCPostFilterBeta; + wxStaticText* m_staticText911; + wxSlider* m_codec2LPCPostFilterGamma; + + wxStdDialogButtonSizer* m_sdbSizer5; + wxButton* m_sdbSizer5OK; + wxButton* m_sdbSizer5Apply; + wxButton* m_sdbSizer5Cancel; +}; + +#endif // __FILTER_DIALOG__ diff --git a/fdmdv2/src/fdmdv2_defines.h b/fdmdv2/src/fdmdv2_defines.h index 6883f7d7..992af4ce 100644 --- a/fdmdv2/src/fdmdv2_defines.h +++ b/fdmdv2/src/fdmdv2_defines.h @@ -77,4 +77,9 @@ enum ID_PAINT_BG }; +// Codec 2 LPC Post Filter defaults, from codec-dev/src/quantise.c + +#define CODEC2_LPC_PF_GAMMA 0.5 +#define CODEC2_LPC_PF_BETA 0.2 + #endif //__FDMDV2_DEFINES__ diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index 5b6c7975..29464566 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -300,10 +300,15 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) wxGetApp().m_recFileFromRadioPath = pConfig->Read("/File/recFileFromRadioPath", wxT("")); wxGetApp().m_recFileFromRadioSecs = pConfig->Read("/File/recFileFromRadioSecs", 30); - bool slow = false; + bool slow = false; // prevents compile error when using default bool wxGetApp().m_snrSlow = pConfig->Read("/Audio/snrSlow", slow); - //printf("wxGetApp().m_snrSlow %d\n", (int)wxGetApp().m_snrSlow); + bool t = true; // prevents compile error when using default bool + wxGetApp().m_codec2LPCPostFilterEnable = pConfig->Read(wxT("/Filter/codec2LPCPostFilterEnable"), t); + wxGetApp().m_codec2LPCPostFilterBassBoost = pConfig->Read(wxT("/Filter/codec2LPCPostFilterBassBoost"), t); + wxGetApp().m_codec2LPCPostFilterGamma = pConfig->Read(wxT("/Filter/codec2LPCPostFilterGamma"), CODEC2_LPC_PF_GAMMA); + wxGetApp().m_codec2LPCPostFilterBeta = pConfig->Read(wxT("/Filter/codec2LPCPostFilterBeta"), CODEC2_LPC_PF_BETA); + pConfig->SetPath(wxT("/")); // this->Connect(m_menuItemHelpUpdates->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TopFrame::OnHelpCheckUpdatesUI)); @@ -1019,6 +1024,22 @@ void MainFrame::OnToolsAudio(wxCommandEvent& event) delete dlg; } +//------------------------------------------------------------------------- +// OnToolsFilter() +//------------------------------------------------------------------------- +void MainFrame::OnToolsFilter(wxCommandEvent& event) +{ + wxUnusedVar(event); + int rv = 0; + FilterDlg *dlg = new FilterDlg(NULL); + rv = dlg->ShowModal(); + if(rv == wxID_OK) + { + dlg->ExchangeData(EXCHANGE_DATA_OUT); + } + delete dlg; +} + //------------------------------------------------------------------------- // OnToolsAudioUI() //------------------------------------------------------------------------- diff --git a/fdmdv2/src/fdmdv2_main.h b/fdmdv2/src/fdmdv2_main.h index 5f436a36..bdbe0af0 100644 --- a/fdmdv2/src/fdmdv2_main.h +++ b/fdmdv2/src/fdmdv2_main.h @@ -60,6 +60,7 @@ #include "sndfile.h" #include "portaudio.h" #include "dlg_audiooptions.h" +#include "dlg_filter.h" #define _USE_TIMER 1 #define _USE_ONIDLE 1 @@ -127,6 +128,12 @@ class MainApp : public wxApp bool m_snrSlow; + // Codec 2 Post Filter + bool m_codec2LPCPostFilterEnable; + bool m_codec2LPCPostFilterBassBoost; + float m_codec2LPCPostFilterGamma; + float m_codec2LPCPostFilterBeta; + int m_show_wf; int m_show_spect; int m_show_scatter; @@ -288,6 +295,7 @@ class MainFrame : public TopFrame void OnToolsAudioUI( wxUpdateUIEvent& event ); void OnToolsComCfg( wxCommandEvent& event ); void OnToolsComCfgUI( wxUpdateUIEvent& event ); + void OnToolsFilter( wxCommandEvent& event ); void OnPlayFileToMicIn( wxCommandEvent& event ); void OnRecFileFromRadio( wxCommandEvent& event ); diff --git a/fdmdv2/src/topFrame.cpp b/fdmdv2/src/topFrame.cpp index 08c2ffa3..fad2342d 100644 --- a/fdmdv2/src/topFrame.cpp +++ b/fdmdv2/src/topFrame.cpp @@ -51,6 +51,10 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const m_menuItemAudio = new wxMenuItem(tools, wxID_ANY, wxString(_("&Audio Config")) , wxEmptyString, wxITEM_NORMAL); tools->Append(m_menuItemAudio); + wxMenuItem* m_menuItemFilter; + m_menuItemFilter = new wxMenuItem(tools, wxID_ANY, wxString(_("&Filter")) , wxEmptyString, wxITEM_NORMAL); + tools->Append(m_menuItemFilter); + wxMenuItem* m_menuItemRigCtrlCfg; m_menuItemRigCtrlCfg = new wxMenuItem(tools, wxID_ANY, wxString(_("Rig Control Config")) , wxEmptyString, wxITEM_NORMAL); tools->Append(m_menuItemRigCtrlCfg); @@ -343,6 +347,8 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const this->Connect(m_menuItemExit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(TopFrame::OnExit)); this->Connect(m_menuItemAudio->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(TopFrame::OnToolsAudio)); this->Connect(m_menuItemAudio->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TopFrame::OnToolsAudioUI)); + this->Connect(m_menuItemFilter->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(TopFrame::OnToolsFilter)); + this->Connect(m_menuItemFilter->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TopFrame::OnToolsFilterUI)); this->Connect(m_menuItemRigCtrlCfg->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(TopFrame::OnToolsComCfg)); this->Connect(m_menuItemRigCtrlCfg->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TopFrame::OnToolsComCfgUI)); @@ -391,6 +397,8 @@ TopFrame::~TopFrame() this->Disconnect(ID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(TopFrame::OnExit)); this->Disconnect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(TopFrame::OnToolsAudio)); this->Disconnect(wxID_ANY, wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TopFrame::OnToolsAudioUI)); + this->Disconnect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(TopFrame::OnToolsFilter)); + this->Disconnect(wxID_ANY, wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TopFrame::OnToolsFilterUI)); this->Disconnect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(TopFrame::OnToolsComCfg)); this->Disconnect(wxID_ANY, wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TopFrame::OnToolsComCfgUI)); diff --git a/fdmdv2/src/topFrame.h b/fdmdv2/src/topFrame.h index 890e103d..fd4a474f 100644 --- a/fdmdv2/src/topFrame.h +++ b/fdmdv2/src/topFrame.h @@ -105,6 +105,8 @@ class TopFrame : public wxFrame virtual void OnExit( wxCommandEvent& event ) { event.Skip(); } virtual void OnToolsAudio( wxCommandEvent& event ) { event.Skip(); } virtual void OnToolsAudioUI( wxUpdateUIEvent& event ) { event.Skip(); } + virtual void OnToolsFilter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToolsFilterUI( wxUpdateUIEvent& event ) { event.Skip(); } virtual void OnToolsComCfg( wxCommandEvent& event ) { event.Skip(); } virtual void OnToolsComCfgUI( wxUpdateUIEvent& event ) { event.Skip(); } virtual void OnPlayFileToMicIn( wxCommandEvent& event ) { event.Skip(); } -- 2.25.1