1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-02 08:39:46 +02:00

Rewrite uses of wxEventHandler::(Dis)Connect with (Un)Bind

This commit is contained in:
Paul Licameli 2018-02-12 21:16:11 -05:00
commit 89d8f0df63
45 changed files with 214 additions and 554 deletions

View File

@ -240,7 +240,7 @@ It handles initialization and termination by subclassing wxApp.
////////////////////////////////////////////////////////////
DEFINE_EVENT_TYPE(EVT_OPEN_AUDIO_FILE);
DEFINE_EVENT_TYPE(EVT_LANGUAGE_CHANGE);
wxDEFINE_EVENT(EVT_LANGUAGE_CHANGE, wxCommandEvent);
#if 0
#ifdef __WXGTK__

View File

@ -57,11 +57,6 @@ AudacityLogger::AudacityLogger()
mUpdated = false;
}
AudacityLogger::~AudacityLogger()
{
Destroy();
}
void AudacityLogger::Flush()
{
if (mUpdated && mFrame && mFrame->IsShown()) {
@ -95,50 +90,6 @@ void AudacityLogger::DoLogText(const wxString & str)
}
}
void AudacityLogger::Destroy()
{
if (mFrame) {
mFrame->Disconnect(LoggerID_Save,
wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler(AudacityLogger::OnSave),
NULL,
this);
mFrame->Disconnect(LoggerID_Clear,
wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler(AudacityLogger::OnClear),
NULL,
this);
mFrame->Disconnect(LoggerID_Close,
wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler(AudacityLogger::OnClose),
NULL,
this);
mFrame->Disconnect(LoggerID_Save,
wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(AudacityLogger::OnSave),
NULL,
this);
mFrame->Disconnect(LoggerID_Clear,
wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(AudacityLogger::OnClear),
NULL,
this);
mFrame->Disconnect(LoggerID_Close,
wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(AudacityLogger::OnClose),
NULL,
this);
mFrame->Disconnect(wxEVT_CLOSE_WINDOW,
wxCloseEventHandler(AudacityLogger::OnCloseWindow),
NULL,
this);
mFrame.reset();
}
}
void AudacityLogger::Show(bool show)
{
// Hide the frame if created, otherwise do nothing
@ -215,42 +166,28 @@ void AudacityLogger::Show(bool show)
frame->Layout();
// Hook into the frame events
frame->Connect(wxEVT_CLOSE_WINDOW,
frame->Bind(wxEVT_CLOSE_WINDOW,
wxCloseEventHandler(AudacityLogger::OnCloseWindow),
NULL,
this);
frame->Connect(LoggerID_Save,
wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(AudacityLogger::OnSave),
NULL,
this);
frame->Connect(LoggerID_Clear,
wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(AudacityLogger::OnClear),
NULL,
this);
frame->Connect(LoggerID_Close,
wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(AudacityLogger::OnClose),
NULL,
this);
frame->Connect(LoggerID_Save,
wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler(AudacityLogger::OnSave),
NULL,
this);
frame->Connect(LoggerID_Clear,
wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler(AudacityLogger::OnClear),
NULL,
this);
frame->Connect(LoggerID_Close,
wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler(AudacityLogger::OnClose),
NULL,
this);
frame->Bind( wxEVT_COMMAND_MENU_SELECTED,
&AudacityLogger::OnSave,
this, LoggerID_Save);
frame->Bind( wxEVT_COMMAND_MENU_SELECTED,
&AudacityLogger::OnClear,
this, LoggerID_Clear);
frame->Bind( wxEVT_COMMAND_MENU_SELECTED,
&AudacityLogger::OnClose,
this, LoggerID_Close);
frame->Bind( wxEVT_COMMAND_BUTTON_CLICKED,
&AudacityLogger::OnSave,
this, LoggerID_Save);
frame->Bind( wxEVT_COMMAND_BUTTON_CLICKED,
&AudacityLogger::OnClear,
this, LoggerID_Clear);
frame->Bind( wxEVT_COMMAND_BUTTON_CLICKED,
&AudacityLogger::OnClose,
this, LoggerID_Close);
mFrame = std::move( frame );
@ -272,7 +209,7 @@ void AudacityLogger::OnCloseWindow(wxCloseEvent & WXUNUSED(e))
// On the Mac, destroy the window rather than hiding it since the
// log menu will override the root windows menu if there is no
// project window open.
Destroy();
mFrame.reset();
#else
Show(false);
#endif

View File

@ -28,10 +28,8 @@
class AudacityLogger final : public wxEvtHandler, public wxLog {
public:
AudacityLogger();
virtual ~AudacityLogger();
void Show(bool show = true);
void Destroy();
#if defined(EXPERIMENTAL_CRASH_REPORT)
wxString GetLog();

View File

@ -480,9 +480,9 @@ using std::min;
std::unique_ptr<AudioIO> ugAudioIO;
AudioIO *gAudioIO{};
DEFINE_EVENT_TYPE(EVT_AUDIOIO_PLAYBACK);
DEFINE_EVENT_TYPE(EVT_AUDIOIO_CAPTURE);
DEFINE_EVENT_TYPE(EVT_AUDIOIO_MONITOR);
wxDEFINE_EVENT(EVT_AUDIOIO_PLAYBACK, wxCommandEvent);
wxDEFINE_EVENT(EVT_AUDIOIO_CAPTURE, wxCommandEvent);
wxDEFINE_EVENT(EVT_AUDIOIO_MONITOR, wxCommandEvent);
// static
int AudioIO::mNextStreamToken = 0;

View File

@ -91,9 +91,12 @@ class AudioIOListener;
#define AILA_DEF_NUMBER_ANALYSIS 5
#endif
DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_AUDIOIO_PLAYBACK, -1);
DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_AUDIOIO_CAPTURE, -1);
DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_AUDIOIO_MONITOR, -1);
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
EVT_AUDIOIO_PLAYBACK, wxCommandEvent);
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
EVT_AUDIOIO_CAPTURE, wxCommandEvent);
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
EVT_AUDIOIO_MONITOR, wxCommandEvent);
// PRL:
// If we always run a portaudio output stream (even just to produce silence)

View File

@ -95,11 +95,15 @@ HistoryWindow::HistoryWindow(AudacityProject *parent, UndoManager *manager):
{
// FIXME: Textbox labels have inconsistent capitalization
mTotal = S.Id(ID_TOTAL).AddTextBox(_("&Total space used"), wxT("0"), 10);
mTotal->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(HistoryWindow::OnChar));
mTotal->Bind(wxEVT_KEY_DOWN,
// ignore it
[](wxEvent&){});
S.AddVariableText( {} )->Hide();
mAvail = S.Id(ID_AVAIL).AddTextBox(_("&Undo Levels Available"), wxT("0"), 10);
mAvail->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(HistoryWindow::OnChar));
mAvail->Bind(wxEVT_KEY_DOWN,
// ignore it
[](wxEvent&){});
S.AddVariableText( {} )->Hide();
S.AddPrompt(_("&Levels To Discard"));
@ -117,7 +121,9 @@ HistoryWindow::HistoryWindow(AudacityProject *parent, UndoManager *manager):
mDiscard = S.Id(ID_DISCARD).AddButton(_("&Discard"));
mClipboard = S.AddTextBox(_("Clipboard space used"), wxT("0"), 10);
mClipboard->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(HistoryWindow::OnChar));
mClipboard->Bind(wxEVT_KEY_DOWN,
// ignore it
[](wxEvent&){});
S.Id(ID_DISCARD_CLIPBOARD).AddButton(_("Discard"));
}
S.EndMultiColumn();
@ -141,32 +147,15 @@ HistoryWindow::HistoryWindow(AudacityProject *parent, UndoManager *manager):
mList->SetColumnWidth(0, mList->GetClientSize().x - mList->GetColumnWidth(1));
mList->SetTextColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT));
wxTheApp->Connect(EVT_AUDIOIO_PLAYBACK,
wxCommandEventHandler(HistoryWindow::OnAudioIO),
NULL,
wxTheApp->Bind(EVT_AUDIOIO_PLAYBACK,
&HistoryWindow::OnAudioIO,
this);
wxTheApp->Connect(EVT_AUDIOIO_CAPTURE,
wxCommandEventHandler(HistoryWindow::OnAudioIO),
NULL,
wxTheApp->Bind(EVT_AUDIOIO_CAPTURE,
&HistoryWindow::OnAudioIO,
this);
}
HistoryWindow::~HistoryWindow()
{
wxTheApp->Disconnect(EVT_AUDIOIO_PLAYBACK,
wxCommandEventHandler(HistoryWindow::OnAudioIO),
NULL,
this);
wxTheApp->Disconnect(EVT_AUDIOIO_CAPTURE,
wxCommandEventHandler(HistoryWindow::OnAudioIO),
NULL,
this);
mAvail->Disconnect(wxEVT_KEY_DOWN, wxKeyEventHandler(HistoryWindow::OnChar));
}
void HistoryWindow::OnAudioIO(wxCommandEvent& evt)
{
evt.Skip();
@ -309,9 +298,3 @@ void HistoryWindow::OnSize(wxSizeEvent & WXUNUSED(event))
if (mList->GetItemCount() > 0)
mList->EnsureVisible(mSelected);
}
void HistoryWindow::OnChar(wxKeyEvent &event)
{
event.Skip(false);
return;
}

View File

@ -28,7 +28,6 @@ class HistoryWindow final : public wxDialogWrapper {
public:
HistoryWindow(AudacityProject * parent, UndoManager *manager);
~HistoryWindow();
void UpdateDisplay();
@ -39,7 +38,6 @@ class HistoryWindow final : public wxDialogWrapper {
void OnSize(wxSizeEvent & event);
void OnCloseWindow(wxCloseEvent & WXUNUSED(event));
void OnChar(wxKeyEvent & event);
void OnItemSelected(wxListEvent & event);
void OnDiscard(wxCommandEvent & event);
void OnDiscardClipboard(wxCommandEvent & event);

View File

@ -126,21 +126,12 @@ LyricsWindow::LyricsWindow(AudacityProject *parent):
//}
// Events from the project don't propagate directly to this other frame, so...
mProject->Connect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(LyricsWindow::OnTimer),
NULL,
mProject->Bind(EVT_TRACK_PANEL_TIMER,
&LyricsWindow::OnTimer,
this);
Center();
}
LyricsWindow::~LyricsWindow()
{
mProject->Disconnect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(LyricsWindow::OnTimer),
NULL,
this);
}
void LyricsWindow::OnCloseWindow(wxCloseEvent & WXUNUSED(event))
{
this->Hide();

View File

@ -23,7 +23,6 @@ class LyricsWindow final : public wxFrame {
public:
LyricsWindow(AudacityProject* parent);
virtual ~LyricsWindow();
LyricsPanel *GetLyricsPanel() { return mLyricsPanel; };

View File

@ -928,20 +928,8 @@ MixerBoard::MixerBoard(AudacityProject* pProject,
mTracks = mProject->GetTracks();
// Events from the project don't propagate directly to this other frame, so...
mProject->Connect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(MixerBoard::OnTimer),
NULL,
this);
}
MixerBoard::~MixerBoard()
{
// private data members
mMusicalInstruments.clear();
mProject->Disconnect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(MixerBoard::OnTimer),
NULL,
mProject->Bind(EVT_TRACK_PANEL_TIMER,
&MixerBoard::OnTimer,
this);
}

View File

@ -206,7 +206,6 @@ public:
wxFrame* parent,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize);
virtual ~MixerBoard();
void UpdatePrefs();

View File

@ -423,7 +423,6 @@ class PluginRegistrationDialog final : public wxDialogWrapper
public:
// constructors and destructors
PluginRegistrationDialog(wxWindow *parent, EffectType type);
virtual ~PluginRegistrationDialog();
private:
void Populate();
@ -501,14 +500,6 @@ PluginRegistrationDialog::PluginRegistrationDialog(wxWindow *parent, EffectType
Populate();
}
PluginRegistrationDialog::~PluginRegistrationDialog()
{
mEffects->Disconnect(wxEVT_KEY_DOWN,
wxKeyEventHandler(PluginRegistrationDialog::OnListChar),
NULL,
this);
}
void PluginRegistrationDialog::Populate()
{
//------------------------- Main section --------------------
@ -565,9 +556,8 @@ void PluginRegistrationDialog::PopulateOrExchange(ShuttleGui &S)
S.SetStyle(wxSUNKEN_BORDER | wxLC_REPORT | wxLC_HRULES | wxLC_VRULES );
mEffects = S.Id(ID_List).AddListControlReportMode();
mEffects->Connect(wxEVT_KEY_DOWN,
wxKeyEventHandler(PluginRegistrationDialog::OnListChar),
NULL,
mEffects->Bind(wxEVT_KEY_DOWN,
&PluginRegistrationDialog::OnListChar,
this);
#if wxUSE_ACCESSIBILITY
mEffects->SetAccessible(mAx = safenew CheckListAx(mEffects));

View File

@ -1098,9 +1098,8 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
// because it must
// attach its timer event handler later (so that its handler is invoked
// earlier)
this->Connect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(ViewInfo::OnTimer),
NULL,
this->Bind(EVT_TRACK_PANEL_TIMER,
&ViewInfo::OnTimer,
&mViewInfo);
// Add the overlays, in the sequence in which they will be painted
@ -1227,9 +1226,8 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
mTrackPanel->SetDropTarget(safenew DropTarget(this));
#endif
wxTheApp->Connect(EVT_AUDIOIO_CAPTURE,
wxCommandEventHandler(AudacityProject::OnCapture),
NULL,
wxTheApp->Bind(EVT_AUDIOIO_CAPTURE,
&AudacityProject::OnCapture,
this);
//Initialize the last selection adjustment time.
@ -1258,11 +1256,6 @@ AudacityProject::~AudacityProject()
mTrackPanel->RemoveOverlay(mCursorOverlay.get());
mTrackPanel->RemoveOverlay(mIndicatorOverlay.get());
}
wxTheApp->Disconnect(EVT_AUDIOIO_CAPTURE,
wxCommandEventHandler(AudacityProject::OnCapture),
NULL,
this);
}
void AudacityProject::ApplyUpdatedTheme()
@ -2715,11 +2708,6 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event)
#endif
}
this->Disconnect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(ViewInfo::OnTimer),
NULL,
&mViewInfo);
// Destroys this
pSelf.reset();
mRuler = nullptr;
@ -6032,20 +6020,11 @@ double AudacityProject::GetZoomOfPref( const wxString & PresetPrefName, int defa
AudacityProject::PlaybackScroller::PlaybackScroller(AudacityProject *project)
: mProject(project)
{
mProject->Connect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(PlaybackScroller::OnTimer),
NULL,
mProject->Bind(EVT_TRACK_PANEL_TIMER,
&PlaybackScroller::OnTimer,
this);
}
AudacityProject::PlaybackScroller::~PlaybackScroller()
{
mProject->Disconnect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(PlaybackScroller::OnTimer),
NULL,
this);
}
void AudacityProject::PlaybackScroller::OnTimer(wxCommandEvent &event)
{
// Let other listeners get the notification

View File

@ -793,7 +793,6 @@ public:
{
public:
explicit PlaybackScroller(AudacityProject *project);
~PlaybackScroller();
enum class Mode {
Off,

View File

@ -770,11 +770,11 @@ Track *SyncLockedTracksIterator::Last(bool skiplinked)
//
// The TrackList sends events whenever certain updates occur to the list it
// is managing. Any other classes that may be interested in get these updates
// should use TrackList::Connect() and TrackList::Disconnect().
// should use TrackList::Connect() or TrackList::Bind().
//
DEFINE_EVENT_TYPE(EVT_TRACKLIST_PERMUTED);
DEFINE_EVENT_TYPE(EVT_TRACKLIST_RESIZING);
DEFINE_EVENT_TYPE(EVT_TRACKLIST_DELETION);
wxDEFINE_EVENT(EVT_TRACKLIST_PERMUTED, wxCommandEvent);
wxDEFINE_EVENT(EVT_TRACKLIST_RESIZING, wxCommandEvent);
wxDEFINE_EVENT(EVT_TRACKLIST_DELETION, wxCommandEvent);
// same value as in the default constructed TrackId:
long TrackList::sCounter = -1;

View File

@ -596,15 +596,18 @@ struct TrackListEvent : public wxCommandEvent
};
// Posted when tracks are reordered but otherwise unchanged.
DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_TRACKLIST_PERMUTED, -1);
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
EVT_TRACKLIST_PERMUTED, wxCommandEvent);
// Posted when some track was added or changed its height.
// Cast to TrackListEvent and examine mpTrack to retrieve it.
DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_TRACKLIST_RESIZING, -1);
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
EVT_TRACKLIST_RESIZING, wxCommandEvent);
// Posted when a track has been deleted from a tracklist.
// Also posted when one track replaces another
DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_TRACKLIST_DELETION, -1);
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
EVT_TRACKLIST_DELETION, wxCommandEvent);
class TrackList final : public wxEvtHandler, public ListOfTracks
{

View File

@ -186,7 +186,7 @@ is time to refresh some aspect of the screen.
#include "widgets/Ruler.h"
#include <algorithm>
DEFINE_EVENT_TYPE(EVT_TRACK_PANEL_TIMER)
wxDEFINE_EVENT(EVT_TRACK_PANEL_TIMER, wxCommandEvent);
/*
@ -341,17 +341,14 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id,
GetProject()->Bind(wxEVT_IDLE, &TrackPanel::OnIdle, this);
// Register for tracklist updates
mTracks->Connect(EVT_TRACKLIST_RESIZING,
wxCommandEventHandler(TrackPanel::OnTrackListResizing),
NULL,
mTracks->Bind(EVT_TRACKLIST_RESIZING,
&TrackPanel::OnTrackListResizing,
this);
mTracks->Connect(EVT_TRACKLIST_DELETION,
wxCommandEventHandler(TrackPanel::OnTrackListDeletion),
NULL,
mTracks->Bind(EVT_TRACKLIST_DELETION,
&TrackPanel::OnTrackListDeletion,
this);
wxTheApp->Connect(EVT_AUDIOIO_PLAYBACK,
wxCommandEventHandler(TrackPanel::OnPlayback),
NULL,
wxTheApp->Bind(EVT_AUDIOIO_PLAYBACK,
&TrackPanel::OnPlayback,
this);
}
@ -360,20 +357,6 @@ TrackPanel::~TrackPanel()
{
mTimer.Stop();
// Unregister for tracklist updates
mTracks->Disconnect(EVT_TRACKLIST_DELETION,
wxCommandEventHandler(TrackPanel::OnTrackListDeletion),
NULL,
this);
mTracks->Disconnect(EVT_TRACKLIST_RESIZING,
wxCommandEventHandler(TrackPanel::OnTrackListResizing),
NULL,
this);
wxTheApp->Disconnect(EVT_AUDIOIO_PLAYBACK,
wxCommandEventHandler(TrackPanel::OnPlayback),
NULL,
this);
// This can happen if a label is being edited and the user presses
// ALT+F4 or Command+Q
if (HasCapture())

View File

@ -78,7 +78,8 @@ enum class UndoPush : unsigned char;
#pragma warning( disable: 4251 )
#endif
DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_TRACK_PANEL_TIMER, -1);
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
EVT_TRACK_PANEL_TIMER, wxCommandEvent);
enum {
kTimerInterval = 50, // milliseconds

View File

@ -16,7 +16,7 @@ Paul Licameli
class wxArrayString;
DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_LANGUAGE_CHANGE, -1);
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API, EVT_LANGUAGE_CHANGE, wxCommandEvent);
/*
This class can maintain a static table containing user visible strings that updates
@ -37,18 +37,8 @@ public:
TranslatableArray()
{
if (wxTheApp)
wxTheApp->Connect(EVT_LANGUAGE_CHANGE,
wxCommandEventHandler(TranslatableArray::Invalidate),
NULL,
this);
}
~TranslatableArray()
{
if (wxTheApp)
wxTheApp->Disconnect(EVT_LANGUAGE_CHANGE,
wxCommandEventHandler(TranslatableArray::Invalidate),
NULL,
wxTheApp->Bind(EVT_LANGUAGE_CHANGE,
&TranslatableArray::Invalidate,
this);
}

View File

@ -152,6 +152,20 @@ BEGIN_EVENT_TABLE(ContrastDialog,wxDialogWrapper)
EVT_BUTTON(wxID_CANCEL, ContrastDialog::OnClose)
END_EVENT_TABLE()
static void OnChar(wxKeyEvent & event)
{
// Is this still required?
if (event.GetKeyCode() == WXK_TAB) {
// pass to next handler
event.Skip();
return;
}
// ignore any other key
event.Skip(false);
return;
}
/* i18n-hint: WCAG2 is the 'Web Content Accessibility Guidelines (WCAG) 2.0', see http://www.w3.org/TR/WCAG20/ */
ContrastDialog::ContrastDialog(wxWindow * parent, wxWindowID id,
const wxString & title,
@ -235,7 +249,7 @@ ContrastDialog::ContrastDialog(wxWindow * parent, wxWindowID id,
m_pButton_UseCurrentF = S.Id(ID_BUTTON_USECURRENTF).AddButton(_("&Measure selection"));
mForegroundRMSText=S.Id(ID_FOREGROUNDDB_TEXT).AddTextBox( {}, wxT(""), 17);
mForegroundRMSText->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(ContrastDialog::OnChar));
mForegroundRMSText->Bind(wxEVT_KEY_DOWN, OnChar);
//Background
S.AddFixedText(_("&Background:"));
@ -267,7 +281,7 @@ ContrastDialog::ContrastDialog(wxWindow * parent, wxWindowID id,
m_pButton_UseCurrentB = S.Id(ID_BUTTON_USECURRENTB).AddButton(_("Mea&sure selection"));
mBackgroundRMSText = S.Id(ID_BACKGROUNDDB_TEXT).AddTextBox( {}, wxT(""), 17);
mBackgroundRMSText->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(ContrastDialog::OnChar));
mBackgroundRMSText->Bind(wxEVT_KEY_DOWN, OnChar);
}
S.EndMultiColumn();
}
@ -280,11 +294,11 @@ ContrastDialog::ContrastDialog(wxWindow * parent, wxWindowID id,
{
S.AddFixedText(_("Co&ntrast Result:"));
mPassFailText = S.Id(ID_RESULTS_TEXT).AddTextBox( {}, wxT(""), 50);
mPassFailText->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(ContrastDialog::OnChar));
mPassFailText->Bind(wxEVT_KEY_DOWN, OnChar);
m_pButton_Reset = S.Id(ID_BUTTON_RESET).AddButton(_("R&eset"));
S.AddFixedText(_("&Difference:"));
mDiffText = S.Id(ID_RESULTSDB_TEXT).AddTextBox( {}, wxT(""), 50);
mDiffText->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(ContrastDialog::OnChar));
mDiffText->Bind(wxEVT_KEY_DOWN, OnChar);
m_pButton_Export = S.Id(ID_BUTTON_EXPORT).AddButton(_("E&xport..."));
}
S.EndMultiColumn();
@ -307,14 +321,6 @@ ContrastDialog::ContrastDialog(wxWindow * parent, wxWindowID id,
Center();
}
ContrastDialog::~ContrastDialog()
{
mForegroundRMSText->Disconnect(wxEVT_KEY_DOWN, wxKeyEventHandler(ContrastDialog::OnChar));
mBackgroundRMSText->Disconnect(wxEVT_KEY_DOWN, wxKeyEventHandler(ContrastDialog::OnChar));
mPassFailText->Disconnect(wxEVT_KEY_DOWN, wxKeyEventHandler(ContrastDialog::OnChar));
mDiffText->Disconnect(wxEVT_KEY_DOWN, wxKeyEventHandler(ContrastDialog::OnChar));
}
void ContrastDialog::OnGetURL(wxCommandEvent & WXUNUSED(event))
{
// Original help page is back on-line (March 2016), but the manual should be more reliable.
@ -596,15 +602,3 @@ void ContrastDialog::OnReset(wxCommandEvent & /*event*/)
mPassFailText->ChangeValue(wxT(""));
mDiffText->ChangeValue(wxT(""));
}
void ContrastDialog::OnChar(wxKeyEvent & event)
{
// Is this still required?
if (event.GetKeyCode() == WXK_TAB) {
event.Skip();
return;
}
event.Skip(false);
return;
}

View File

@ -32,7 +32,6 @@ public:
// constructors and destructors
ContrastDialog(wxWindow * parent, wxWindowID id,
const wxString & title, const wxPoint & pos);
~ContrastDialog();
wxButton * m_pButton_UseCurrentF;
wxButton * m_pButton_UseCurrentB;
@ -63,7 +62,6 @@ private:
void results();
void OnReset(wxCommandEvent & event);
void OnClose(wxCommandEvent & event);
void OnChar(wxKeyEvent &event);
wxTextCtrl *mForegroundRMSText;
wxTextCtrl *mBackgroundRMSText;

View File

@ -3827,14 +3827,12 @@ void EffectUIHost::InitializeRealtime()
{
EffectManager::Get().RealtimeAddEffect(mEffect);
wxTheApp->Connect(EVT_AUDIOIO_PLAYBACK,
wxCommandEventHandler(EffectUIHost::OnPlayback),
NULL,
wxTheApp->Bind(EVT_AUDIOIO_PLAYBACK,
&EffectUIHost::OnPlayback,
this);
wxTheApp->Connect(EVT_AUDIOIO_CAPTURE,
wxCommandEventHandler(EffectUIHost::OnCapture),
NULL,
wxTheApp->Bind(EVT_AUDIOIO_CAPTURE,
&EffectUIHost::OnCapture,
this);
mInitialized = true;
@ -3845,16 +3843,6 @@ void EffectUIHost::CleanupRealtime()
{
if (mSupportsRealtime && mInitialized)
{
wxTheApp->Disconnect(EVT_AUDIOIO_PLAYBACK,
wxCommandEventHandler(EffectUIHost::OnPlayback),
NULL,
this);
wxTheApp->Disconnect(EVT_AUDIOIO_CAPTURE,
wxCommandEventHandler(EffectUIHost::OnCapture),
NULL,
this);
EffectManager::Get().RealtimeRemoveEffect(mEffect);
mInitialized = false;

View File

@ -717,7 +717,9 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
mSliders[i] = safenew wxSlider(mGraphicPanel, ID_Slider + i, 0, -20, +20,
wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE);
mSliders[i]->Connect(wxEVT_ERASE_BACKGROUND, wxEraseEventHandler(EffectEqualization::OnErase));
mSliders[i]->Bind(wxEVT_ERASE_BACKGROUND,
// ignore it
[](wxEvent&){});
#if wxUSE_ACCESSIBILITY
wxString name;
if( kThirdOct[i] < 1000.)
@ -2592,11 +2594,6 @@ void EffectEqualization::OnSize(wxSizeEvent & event)
event.Skip();
}
void EffectEqualization::OnErase(wxEraseEvent & WXUNUSED(event))
{
// Ignore it
}
void EffectEqualization::OnSlider(wxCommandEvent & event)
{
wxSlider *s = (wxSlider *)event.GetEventObject();

View File

@ -172,7 +172,6 @@ private:
double splint(double x[], double y[], size_t n, double y2[], double xr);
void OnSize( wxSizeEvent & event );
void OnErase( wxEraseEvent & event );
void OnSlider( wxCommandEvent & event );
void OnInterp( wxCommandEvent & event );
void OnSliderM( wxCommandEvent & event );

View File

@ -171,7 +171,7 @@ void VSTControl::CreateCarbon()
{
OSStatus result;
Connect(wxEVT_SIZE, wxSizeEventHandler(VSTControl::OnSize));
Bind(wxEVT_SIZE, &VSTControl::OnSize, this);
VstRect *rect;

View File

@ -2755,6 +2755,24 @@ void VSTEffect::RemoveHandler()
{
}
static void OnSize(wxSizeEvent & evt)
{
evt.Skip();
// Once the parent dialog reaches its final size as indicated by
// a non-default minimum size, we set the maximum size to match.
// This is a bit of a hack to prevent VSTs GUI windows from resizing
// there's no real reason to allow it. But, there should be a better
// way of handling it.
wxWindow *w = (wxWindow *) evt.GetEventObject();
wxSize sz = w->GetMinSize();
if (sz != wxDefaultSize)
{
w->SetMaxSize(sz);
}
}
void VSTEffect::BuildFancy()
{
// Turn the power on...some effects need this when the editor is open
@ -2782,7 +2800,7 @@ void VSTEffect::BuildFancy()
NeedEditIdle(true);
mDialog->Connect(wxEVT_SIZE, wxSizeEventHandler(VSTEffect::OnSize));
mDialog->Bind(wxEVT_SIZE, OnSize);
#ifdef __WXMAC__
#ifdef __WX_EVTLOOP_BUSY_WAITING__
@ -2968,24 +2986,6 @@ void VSTEffect::RefreshParameters(int skip)
}
}
void VSTEffect::OnSize(wxSizeEvent & evt)
{
evt.Skip();
// Once the parent dialog reaches it's final size as indicated by
// a non-default minimum size, we set the maximum size to match.
// This is a bit of a hack to prevent VSTs GUI windows from resizing
// there's no real reason to allow it. But, there should be a better
// way of handling it.
wxWindow *w = (wxWindow *) evt.GetEventObject();
wxSize sz = w->GetMinSize();
if (sz != wxDefaultSize)
{
w->SetMaxSize(sz);
}
}
void VSTEffect::OnSizeWindow(wxCommandEvent & evt)
{
if (!mControl)

View File

@ -195,7 +195,6 @@ private:
// UI
void OnSlider(wxCommandEvent & evt);
void OnSize(wxSizeEvent & evt);
void OnSizeWindow(wxCommandEvent & evt);
void OnUpdateDisplay(wxCommandEvent & evt);

View File

@ -89,37 +89,6 @@ KeyConfigPrefs::KeyConfigPrefs(wxWindow * parent, wxWindowID winid,
}
}
KeyConfigPrefs::~KeyConfigPrefs()
{
if (mKey)
{
mKey->Disconnect(wxEVT_KEY_DOWN,
wxKeyEventHandler(KeyConfigPrefs::OnHotkeyKeyDown),
NULL,
this);
mKey->Disconnect(wxEVT_CHAR,
wxKeyEventHandler(KeyConfigPrefs::OnHotkeyChar),
NULL,
this);
mKey->Disconnect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(KeyConfigPrefs::OnHotkeyKillFocus),
NULL,
this);
}
if (mFilter)
{
mKey->Disconnect(wxEVT_KEY_DOWN,
wxKeyEventHandler(KeyConfigPrefs::OnFilterKeyDown),
NULL,
this);
mKey->Disconnect(wxEVT_CHAR,
wxKeyEventHandler(KeyConfigPrefs::OnFilterChar),
NULL,
this);
}
}
void KeyConfigPrefs::Populate()
{
ShuttleGui S(this, eIsCreatingFromPrefs);
@ -217,13 +186,11 @@ void KeyConfigPrefs::PopulateOrExchange(ShuttleGui & S)
#endif
wxTE_PROCESS_ENTER);
mFilter->SetName(wxStripMenuCodes(mFilterLabel->GetLabel()));
mFilter->Connect(wxEVT_KEY_DOWN,
wxKeyEventHandler(KeyConfigPrefs::OnFilterKeyDown),
NULL,
mFilter->Bind(wxEVT_KEY_DOWN,
&KeyConfigPrefs::OnFilterKeyDown,
this);
mFilter->Connect(wxEVT_CHAR,
wxKeyEventHandler(KeyConfigPrefs::OnFilterChar),
NULL,
mFilter->Bind(wxEVT_CHAR,
&KeyConfigPrefs::OnFilterChar,
this);
}
S.AddWindow(mFilter, wxALIGN_NOT | wxALIGN_LEFT);
@ -259,17 +226,14 @@ void KeyConfigPrefs::PopulateOrExchange(ShuttleGui & S)
wxTE_PROCESS_ENTER);
mKey->SetName(_("Short cut"));
mKey->Connect(wxEVT_KEY_DOWN,
wxKeyEventHandler(KeyConfigPrefs::OnHotkeyKeyDown),
NULL,
mKey->Bind(wxEVT_KEY_DOWN,
&KeyConfigPrefs::OnHotkeyKeyDown,
this);
mKey->Connect(wxEVT_CHAR,
wxKeyEventHandler(KeyConfigPrefs::OnHotkeyChar),
NULL,
mKey->Bind(wxEVT_CHAR,
&KeyConfigPrefs::OnHotkeyChar,
this);
mKey->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(KeyConfigPrefs::OnHotkeyKillFocus),
NULL,
mKey->Bind(wxEVT_KILL_FOCUS,
&KeyConfigPrefs::OnHotkeyKillFocus,
this);
}
S.AddWindow(mKey);

View File

@ -36,7 +36,6 @@ class KeyConfigPrefs final : public PrefsPanel
{
public:
KeyConfigPrefs(wxWindow * parent, wxWindowID winid, const wxString &name);
~KeyConfigPrefs();
bool Commit() override;
void Cancel() override;
wxString HelpPageName() override;

View File

@ -125,37 +125,29 @@ void DeviceToolBar::Populate()
mHost->Connect(wxEVT_SET_FOCUS,
wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL,
mHost->Bind(wxEVT_SET_FOCUS,
&DeviceToolBar::OnFocus,
this);
mHost->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL,
mHost->Bind(wxEVT_KILL_FOCUS,
&DeviceToolBar::OnFocus,
this);
mOutput->Connect(wxEVT_SET_FOCUS,
wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL,
mOutput->Bind(wxEVT_SET_FOCUS,
&DeviceToolBar::OnFocus,
this);
mOutput->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL,
mOutput->Bind(wxEVT_KILL_FOCUS,
&DeviceToolBar::OnFocus,
this);
mInput->Connect(wxEVT_SET_FOCUS,
wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL,
mInput->Bind(wxEVT_SET_FOCUS,
&DeviceToolBar::OnFocus,
this);
mInput->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL,
mInput->Bind(wxEVT_KILL_FOCUS,
&DeviceToolBar::OnFocus,
this);
mInputChannels->Connect(wxEVT_SET_FOCUS,
wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL,
mInputChannels->Bind(wxEVT_SET_FOCUS,
&DeviceToolBar::OnFocus,
this);
mInputChannels->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL,
mInputChannels->Bind(wxEVT_KILL_FOCUS,
&DeviceToolBar::OnFocus,
this);
SetNames();

View File

@ -94,21 +94,17 @@ void MixerToolBar::Populate()
Add(mOutputSlider, 0, wxALIGN_CENTER);
// this bit taken from SelectionBar::Populate()
mInputSlider->Connect(wxEVT_SET_FOCUS,
wxFocusEventHandler(MixerToolBar::OnFocus),
NULL,
mInputSlider->Bind(wxEVT_SET_FOCUS,
&MixerToolBar::OnFocus,
this);
mInputSlider->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(MixerToolBar::OnFocus),
NULL,
mInputSlider->Bind(wxEVT_KILL_FOCUS,
&MixerToolBar::OnFocus,
this);
mOutputSlider->Connect(wxEVT_SET_FOCUS,
wxFocusEventHandler(MixerToolBar::OnFocus),
NULL,
mOutputSlider->Bind(wxEVT_SET_FOCUS,
&MixerToolBar::OnFocus,
this);
mOutputSlider->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(MixerToolBar::OnFocus),
NULL,
mOutputSlider->Bind(wxEVT_KILL_FOCUS,
&MixerToolBar::OnFocus,
this);
// Show or hide the input slider based on whether it works
mInputSlider->Enable(gAudioIO->InputMixerWorks());

View File

@ -323,13 +323,11 @@ void SelectionBar::Populate()
}
#endif
mRateText->Connect(wxEVT_SET_FOCUS,
wxFocusEventHandler(SelectionBar::OnFocus),
NULL,
mRateText->Bind(wxEVT_SET_FOCUS,
&SelectionBar::OnFocus,
this);
mRateText->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(SelectionBar::OnFocus),
NULL,
mRateText->Bind(wxEVT_KILL_FOCUS,
&SelectionBar::OnFocus,
this);
#ifdef __WXGTK__
@ -361,13 +359,11 @@ void SelectionBar::Populate()
//mSnapTo->SetForegroundColour( clrText2 );
mSnapTo->SetSelection(mListener ? mListener->AS_GetSnapTo() : SNAP_OFF);
mSnapTo->Connect(wxEVT_SET_FOCUS,
wxFocusEventHandler(SelectionBar::OnFocus),
NULL,
mSnapTo->Bind(wxEVT_SET_FOCUS,
&SelectionBar::OnFocus,
this);
mSnapTo->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(SelectionBar::OnFocus),
NULL,
mSnapTo->Bind(wxEVT_KILL_FOCUS,
&SelectionBar::OnFocus,
this);
AddVLine( mainSizer );

View File

@ -382,15 +382,13 @@ ToolManager::ToolManager( AudacityProject *parent, wxWindow *topDockParent )
};
// Hook the creation event...only needed on GTK, but doesn't hurt for all
mIndicator->Connect( wxEVT_CREATE,
wxWindowCreateEventHandler( ToolManager::OnIndicatorCreate ),
NULL,
mIndicator->Bind( wxEVT_CREATE,
&ToolManager::OnIndicatorCreate,
this );
// Hook the paint event...needed for all
mIndicator->Connect( wxEVT_PAINT,
wxPaintEventHandler( ToolManager::OnIndicatorPaint ),
NULL,
mIndicator->Bind( wxEVT_PAINT,
&ToolManager::OnIndicatorPaint,
this );
// It's a little shy
@ -398,17 +396,14 @@ ToolManager::ToolManager( AudacityProject *parent, wxWindow *topDockParent )
// Hook the parents mouse events...using the parent helps greatly
// under GTK
mParent->Connect( wxEVT_LEFT_UP,
wxMouseEventHandler( ToolManager::OnMouse ),
NULL,
mParent->Bind( wxEVT_LEFT_UP,
&ToolManager::OnMouse,
this );
mParent->Connect( wxEVT_MOTION,
wxMouseEventHandler( ToolManager::OnMouse ),
NULL,
mParent->Bind( wxEVT_MOTION,
&ToolManager::OnMouse,
this );
mParent->Connect( wxEVT_MOUSE_CAPTURE_LOST,
wxMouseCaptureLostEventHandler( ToolManager::OnCaptureLost ),
NULL,
mParent->Bind( wxEVT_MOUSE_CAPTURE_LOST,
&ToolManager::OnCaptureLost,
this );
// Create the top and bottom docks
@ -458,30 +453,6 @@ ToolManager::~ToolManager()
// crashing when running with Jaws on Windows 10 1703.
mTopDock->GetConfiguration().Clear();
mBotDock->GetConfiguration().Clear();
// Remove handlers from parent
mParent->Disconnect( wxEVT_LEFT_UP,
wxMouseEventHandler( ToolManager::OnMouse ),
NULL,
this );
mParent->Disconnect( wxEVT_MOTION,
wxMouseEventHandler( ToolManager::OnMouse ),
NULL,
this );
mParent->Disconnect( wxEVT_MOUSE_CAPTURE_LOST,
wxMouseCaptureLostEventHandler( ToolManager::OnCaptureLost ),
NULL,
this );
// Remove our event handlers
mIndicator->Disconnect( wxEVT_CREATE,
wxWindowCreateEventHandler( ToolManager::OnIndicatorCreate ),
NULL,
this );
mIndicator->Disconnect( wxEVT_PAINT,
wxPaintEventHandler( ToolManager::OnIndicatorPaint ),
NULL,
this );
}
// This table describes the default configuration of the toolbars as

View File

@ -200,13 +200,11 @@ void TranscriptionToolBar::Populate()
mPlaySpeedSlider->Set(mPlaySpeed / 100.0);
mPlaySpeedSlider->SetLabel(_("Playback Speed"));
Add( mPlaySpeedSlider, 0, wxALIGN_CENTER );
mPlaySpeedSlider->Connect(wxEVT_SET_FOCUS,
wxFocusEventHandler(TranscriptionToolBar::OnFocus),
NULL,
mPlaySpeedSlider->Bind(wxEVT_SET_FOCUS,
&TranscriptionToolBar::OnFocus,
this);
mPlaySpeedSlider->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(TranscriptionToolBar::OnFocus),
NULL,
mPlaySpeedSlider->Bind(wxEVT_KILL_FOCUS,
&TranscriptionToolBar::OnFocus,
this);
#ifdef EXPERIMENTAL_VOICE_DETECTION

View File

@ -104,9 +104,8 @@ void PlayIndicatorOverlayBase::Draw(OverlayPanel &panel, wxDC &dc)
PlayIndicatorOverlay::PlayIndicatorOverlay(AudacityProject *project)
: PlayIndicatorOverlayBase(project, true)
{
mProject->Connect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(PlayIndicatorOverlay::OnTimer),
NULL,
mProject->Bind(EVT_TRACK_PANEL_TIMER,
&PlayIndicatorOverlay::OnTimer,
this);
}
@ -117,11 +116,6 @@ PlayIndicatorOverlay::~PlayIndicatorOverlay()
if(ruler)
ruler->RemoveOverlay(mPartner.get());
}
mProject->Disconnect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(PlayIndicatorOverlay::OnTimer),
NULL,
this);
}
void PlayIndicatorOverlay::OnTimer(wxCommandEvent &event)

View File

@ -198,9 +198,9 @@ Scrubber::Scrubber(AudacityProject *project)
{
if (wxTheApp)
wxTheApp->Connect
wxTheApp->Bind
(wxEVT_ACTIVATE_APP,
wxActivateEventHandler(Scrubber::OnActivateOrDeactivateApp), NULL, this);
&Scrubber::OnActivateOrDeactivateApp, this);
mProject->PushEventHandler(&mForwarder);
}
@ -212,10 +212,6 @@ Scrubber::~Scrubber()
#endif
mProject->PopEventHandler();
if (wxTheApp)
wxTheApp->Disconnect
(wxEVT_ACTIVATE_APP,
wxActivateEventHandler(Scrubber::OnActivateOrDeactivateApp), NULL, this);
}
namespace {
@ -730,17 +726,8 @@ ScrubbingOverlay::ScrubbingOverlay(AudacityProject *project)
, mLastScrubSpeedText()
, mNextScrubSpeedText()
{
mProject->Connect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(ScrubbingOverlay::OnTimer),
NULL,
this);
}
ScrubbingOverlay::~ScrubbingOverlay()
{
mProject->Disconnect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(ScrubbingOverlay::OnTimer),
NULL,
mProject->Bind(EVT_TRACK_PANEL_TIMER,
&ScrubbingOverlay::OnTimer,
this);
}

View File

@ -209,7 +209,6 @@ class ScrubbingOverlay final : public wxEvtHandler, public Overlay
{
public:
ScrubbingOverlay(AudacityProject *project);
virtual ~ScrubbingOverlay();
private:
std::pair<wxRect, bool> DoGetRectangle(wxSize size) override;

View File

@ -1042,18 +1042,8 @@ public:
, mConnectedProject{ pProject }
{
if (mConnectedProject)
mConnectedProject->Connect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(SelectHandle::TimerHandler::OnTimer),
NULL,
this);
}
~TimerHandler()
{
if (mConnectedProject)
mConnectedProject->Disconnect(EVT_TRACK_PANEL_TIMER,
wxCommandEventHandler(SelectHandle::TimerHandler::OnTimer),
NULL,
mConnectedProject->Bind(EVT_TRACK_PANEL_TIMER,
&SelectHandle::TimerHandler::OnTimer,
this);
}

View File

@ -167,13 +167,15 @@ public:
public:
void ConnectEvent(wxWindow *w)
{
w->GetEventHandler()->Connect(wxEVT_KILL_FOCUS, wxFocusEventHandler(FocusHandler::OnKillFocus));
// Need to use a named function pointer, not a lambda, so that we
// can unbind the same later
w->GetEventHandler()->Bind(wxEVT_KILL_FOCUS, OnKillFocus);
};
void DisconnectEvent(wxWindow *w)
{
w->GetEventHandler()->Disconnect(wxEVT_KILL_FOCUS, wxFocusEventHandler(FocusHandler::OnKillFocus));
w->GetEventHandler()->Unbind(wxEVT_KILL_FOCUS, OnKillFocus);
};
void OnKillFocus(wxFocusEvent & WXUNUSED(event))
static void OnKillFocus(wxFocusEvent & WXUNUSED(event))
{
return;
};

View File

@ -176,7 +176,7 @@ bool MeterUpdateQueue::Get(MeterUpdateMsg &msg)
const static int gap = 2;
// Event used to notify all meters of preference changes
DEFINE_EVENT_TYPE(EVT_METER_PREFERENCES_CHANGED);
wxDEFINE_EVENT(EVT_METER_PREFERENCES_CHANGED, wxCommandEvent);
const static wxChar *PrefStyles[] =
{
@ -270,19 +270,16 @@ MeterPanel::MeterPanel(AudacityProject *project,
mDisabledPen = wxPen(theTheme.Colour( clrMeterDisabledPen), 1, wxSOLID);
// Register for our preference update event
wxTheApp->Connect(EVT_METER_PREFERENCES_CHANGED,
wxCommandEventHandler(MeterPanel::OnMeterPrefsUpdated),
NULL,
wxTheApp->Bind(EVT_METER_PREFERENCES_CHANGED,
&MeterPanel::OnMeterPrefsUpdated,
this);
if (mIsInput) {
wxTheApp->Connect(EVT_AUDIOIO_MONITOR,
wxCommandEventHandler(MeterPanel::OnAudioIOStatus),
NULL,
wxTheApp->Bind(EVT_AUDIOIO_MONITOR,
&MeterPanel::OnAudioIOStatus,
this);
wxTheApp->Connect(EVT_AUDIOIO_CAPTURE,
wxCommandEventHandler(MeterPanel::OnAudioIOStatus),
NULL,
wxTheApp->Bind(EVT_AUDIOIO_CAPTURE,
&MeterPanel::OnAudioIOStatus,
this);
mPen = wxPen( theTheme.Colour( clrMeterInputPen ), 1, wxSOLID);
@ -294,9 +291,8 @@ MeterPanel::MeterPanel(AudacityProject *project,
}
else {
// Register for AudioIO events
wxTheApp->Connect(EVT_AUDIOIO_PLAYBACK,
wxCommandEventHandler(MeterPanel::OnAudioIOStatus),
NULL,
wxTheApp->Bind(EVT_AUDIOIO_PLAYBACK,
&MeterPanel::OnAudioIOStatus,
this);
mPen = wxPen( theTheme.Colour( clrMeterOutputPen ), 1, wxSOLID);
@ -340,35 +336,6 @@ void MeterPanel::Clear()
mQueue.Clear();
}
MeterPanel::~MeterPanel()
{
if (mIsInput)
{
// Unregister for AudioIO events
wxTheApp->Disconnect(EVT_AUDIOIO_MONITOR,
wxCommandEventHandler(MeterPanel::OnAudioIOStatus),
NULL,
this);
wxTheApp->Disconnect(EVT_AUDIOIO_CAPTURE,
wxCommandEventHandler(MeterPanel::OnAudioIOStatus),
NULL,
this);
}
else
{
wxTheApp->Disconnect(EVT_AUDIOIO_PLAYBACK,
wxCommandEventHandler(MeterPanel::OnAudioIOStatus),
NULL,
this);
}
// Unregister for our preference update event
wxTheApp->Disconnect(EVT_METER_PREFERENCES_CHANGED,
wxCommandEventHandler(MeterPanel::OnMeterPrefsUpdated),
NULL,
this);
}
void MeterPanel::UpdatePrefs()
{
mDBRange = gPrefs->Read(ENV_DB_KEY, ENV_DB_RANGE);

View File

@ -23,7 +23,8 @@
#include "Ruler.h"
// Event used to notify all meters of preference changes
DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_METER_PREFERENCES_CHANGED, -1);
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
EVT_METER_PREFERENCES_CHANGED, wxCommandEvent);
// Increase this when we add support for multichannel meters
// (most of the code is already there)
@ -114,8 +115,6 @@ class MeterPanel final : public wxPanelWrapper
Style style = HorizontalStereo,
float fDecayRate = 60.0f);
~MeterPanel();
bool AcceptsFocus() const override { return s_AcceptsFocus; }
bool AcceptsFocusFromKeyboard() const override { return true; }

View File

@ -13,15 +13,17 @@ Paul Licameli split from TrackPanel.cpp
PopupMenuTable::Menu::~Menu()
{
// Event connections between the parent window and the singleton table
// object must be broken when this menu is destroyed.
Disconnect();
}
void PopupMenuTable::Menu::Extend(PopupMenuTable *pTable)
{
auto connect = [&]( const PopupMenuTable::Entry *pEntry ) {
this->pParent->Connect
(pEntry->id, wxEVT_COMMAND_MENU_SELECTED,
pEntry->func, NULL, pTable);
this->pParent->Bind
(wxEVT_COMMAND_MENU_SELECTED,
pEntry->func, pTable, pEntry->id);
};
for (const PopupMenuTable::Entry *pEntry = &*pTable->Get().begin();
@ -67,8 +69,8 @@ void PopupMenuTable::Menu::DisconnectTable(PopupMenuTable *pTable)
for (const PopupMenuTable::Entry *pEntry = &*pTable->Get().begin();
pEntry->IsValid(); ++pEntry) {
if ( pEntry->IsItem() )
pParent->Disconnect( pEntry->id, wxEVT_COMMAND_MENU_SELECTED,
pEntry->func, NULL, pTable );
pParent->Unbind( wxEVT_COMMAND_MENU_SELECTED,
pEntry->func, pTable, pEntry->id );
else if ( pEntry->IsSubMenu() )
// recur
DisconnectTable(pEntry->subTable);

View File

@ -36,11 +36,11 @@ struct PopupMenuTableEntry
Type type;
int id;
wxString caption;
wxObjectEventFunction func;
wxCommandEventFunction func;
PopupMenuTable *subTable;
PopupMenuTableEntry(Type type_, int id_, wxString caption_,
wxObjectEventFunction func_, PopupMenuTable *subTable_)
wxCommandEventFunction func_, PopupMenuTable *subTable_)
: type(type_)
, id(id_)
, caption(caption_)
@ -165,8 +165,7 @@ void HandlerClass::Populate() { \
type, \
id, \
string, \
(wxObjectEventFunction)(wxEventFunction)(wxCommandEventFunction) \
(&My::memFn), \
(wxCommandEventFunction) (&My::memFn), \
nullptr )
#define POPUP_MENU_ITEM(id, string, memFn) \

View File

@ -2021,9 +2021,8 @@ AdornedRulerPanel::AdornedRulerPanel(AudacityProject* project,
wxToolTip::Enable(true);
#endif
wxTheApp->Connect(EVT_AUDIOIO_CAPTURE,
wxCommandEventHandler(AdornedRulerPanel::OnCapture),
NULL,
wxTheApp->Bind(EVT_AUDIOIO_CAPTURE,
&AdornedRulerPanel::OnCapture,
this);
}
@ -2031,11 +2030,6 @@ AdornedRulerPanel::~AdornedRulerPanel()
{
if(HasCapture())
ReleaseMouse();
wxTheApp->Disconnect(EVT_AUDIOIO_CAPTURE,
wxCommandEventHandler(AdornedRulerPanel::OnCapture),
NULL,
this);
}
#if 1

View File

@ -27,11 +27,6 @@ public:
{
this->Bind(wxEVT_CHAR_HOOK, wxTabTraversalWrapperCharHook);
}
~wxTabTraversalWrapper()
{
this->Unbind(wxEVT_CHAR_HOOK, wxTabTraversalWrapperCharHook);
}
};
class AUDACITY_DLL_API wxPanelWrapper : public wxTabTraversalWrapper<wxPanel>