From 45e91f165adf0daa7b3c494a03c70e4bc73defdb Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Fri, 28 Aug 2015 15:53:11 -0400 Subject: [PATCH] Move gain and pan details out of TrackPanel.cpp --- src/Menus.cpp | 65 ++++++++++++++++++++++--- src/Project.cpp | 35 ++++++++++++++ src/Project.h | 5 ++ src/TrackPanel.cpp | 117 ++------------------------------------------- src/TrackPanel.h | 13 ++--- 5 files changed, 108 insertions(+), 127 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 5736b8938..a62b37f56 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -2841,34 +2841,87 @@ void AudacityProject::PrevWindow() w->Raise(); } +//The following methods operate controls on specified tracks, +//This will pop up the track panning dialog for specified track void AudacityProject::OnTrackPan() { - mTrackPanel->OnTrackPan(); + Track *const track = mTrackPanel->GetFocusedTrack(); + if (!track || (track->GetKind() != Track::Wave)) { + return; + } + + LWSlider *slider = mTrackPanel->GetTrackInfo()->PanSlider + (static_cast(track)); + if (slider->ShowDialog()) { + SetTrackPan(track, slider); + } } void AudacityProject::OnTrackPanLeft() { - mTrackPanel->OnTrackPanLeft(); + Track *const track = mTrackPanel->GetFocusedTrack(); + if (!track || (track->GetKind() != Track::Wave)) { + return; + } + + LWSlider *slider = mTrackPanel->GetTrackInfo()->PanSlider + (static_cast(track)); + slider->Decrease(1); + SetTrackPan(track, slider); } void AudacityProject::OnTrackPanRight() { - mTrackPanel->OnTrackPanRight(); + Track *const track = mTrackPanel->GetFocusedTrack(); + if (!track || (track->GetKind() != Track::Wave)) { + return; + } + + LWSlider *slider = mTrackPanel->GetTrackInfo()->PanSlider + (static_cast(track)); + slider->Increase(1); + SetTrackPan(track, slider); } void AudacityProject::OnTrackGain() { - mTrackPanel->OnTrackGain(); + /// This will pop up the track gain dialog for specified track + Track *const track = mTrackPanel->GetFocusedTrack(); + if (!track || (track->GetKind() != Track::Wave)) { + return; + } + + LWSlider *slider = mTrackPanel->GetTrackInfo()->GainSlider + (static_cast(track)); + if (slider->ShowDialog()) { + SetTrackGain(track, slider); + } } void AudacityProject::OnTrackGainInc() { - mTrackPanel->OnTrackGainInc(); + Track *const track = mTrackPanel->GetFocusedTrack(); + if (!track || (track->GetKind() != Track::Wave)) { + return; + } + + LWSlider *slider = mTrackPanel->GetTrackInfo()->GainSlider + (static_cast(track)); + slider->Increase(1); + SetTrackGain(track, slider); } void AudacityProject::OnTrackGainDec() { - mTrackPanel->OnTrackGainDec(); + Track *const track = mTrackPanel->GetFocusedTrack(); + if (!track || (track->GetKind() != Track::Wave)) { + return; + } + + LWSlider *slider = mTrackPanel->GetTrackInfo()->GainSlider + (static_cast(track)); + slider->Decrease(1); + SetTrackGain(track, slider); } void AudacityProject::OnTrackMenu() diff --git a/src/Project.cpp b/src/Project.cpp index 48c38417d..966452642 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -120,6 +120,7 @@ scroll information. It also has some status flags. #include "effects/Effect.h" #include "prefs/PrefsDialog.h" #include "widgets/LinkingHtmlWindow.h" +#include "widgets/ASlider.h" #include "widgets/ErrorDialog.h" #include "widgets/Ruler.h" #include "widgets/Warning.h" @@ -4881,6 +4882,40 @@ void AudacityProject::DoTrackSolo(Track *t, bool exclusive) mTrackPanel->Refresh(false); } +void AudacityProject::SetTrackGain(Track * track, LWSlider * slider) +{ + wxASSERT(track); + if (track->GetKind() != Track::Wave) + return; + float newValue = slider->Get(); + + WaveTrack *const link = static_cast(mTracks->GetLink(track)); + static_cast(track)->SetGain(newValue); + if (link) + link->SetGain(newValue); + + PushState(_("Adjusted gain"), _("Gain"), PUSH_CONSOLIDATE); + + GetTrackPanel()->RefreshTrack(track); +} + +void AudacityProject::SetTrackPan(Track * track, LWSlider * slider) +{ + wxASSERT(track); + if (track->GetKind() != Track::Wave) + return; + float newValue = slider->Get(); + + WaveTrack *const link = static_cast(mTracks->GetLink(track)); + static_cast(track)->SetPan(newValue); + if (link) + link->SetPan(newValue); + + PushState(_("Adjusted Pan"), _("Pan"), PUSH_CONSOLIDATE); + + GetTrackPanel()->RefreshTrack(track); +} + void AudacityProject::HandleTrackMute(Track *t, const bool exclusive) { // "exclusive" mute means mute the chosen track and unmute all others. diff --git a/src/Project.h b/src/Project.h index 6a82c0c7d..d1225ad10 100644 --- a/src/Project.h +++ b/src/Project.h @@ -89,6 +89,8 @@ struct AudioIOStartStreamOptions; class WaveTrackArray; class Regions; +class LWSlider; + AudacityProject *CreateNewAudacityProject(); AUDACITY_DLL_API AudacityProject *GetActiveProject(); void RedrawAllProjects(); @@ -337,6 +339,9 @@ class AUDACITY_DLL_API AudacityProject: public wxFrame, void DoTrackMute(Track *pTrack, bool exclusive); void DoTrackSolo(Track *pTrack, bool exclusive); + void SetTrackGain(Track * track, LWSlider * slider); + void SetTrackPan(Track * track, LWSlider * slider); + // "exclusive" mute means mute the chosen track and unmute all others. void HandleTrackMute(Track *t, const bool exclusive); diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index d3a7ba3f7..ace52f1ff 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -6588,7 +6588,11 @@ void TrackPanel::OnMouseEvent(wxMouseEvent & event) if (event.Leaving() && !event.ButtonIsDown(wxMOUSE_BTN_ANY)) { - if (mMouseCapture != IsPanSliding && mMouseCapture != IsGainSliding) + // PRL: was this test really needed? It interfered with my refactoring + // that tried to eliminate those enum values. + // I think it was never true, that mouse capture was pan or gain sliding, + // but no mouse button was down. + // if (mMouseCapture != IsPanSliding && mMouseCapture != IsGainSliding) { SetCapturedTrack(NULL); #if defined(__WXMAC__) @@ -8342,117 +8346,6 @@ void TrackPanel::ScrollIntoView(int x) ScrollIntoView(mViewInfo->PositionToTime(x, GetLeftOffset())); } -//The following methods operate controls on specified tracks, -//This will pop up the track panning dialog for specified track -void TrackPanel::OnTrackPan() -{ - Track *t = GetFocusedTrack(); - if (!t || (t->GetKind() != Track::Wave)) { - return; - } - - LWSlider *slider = mTrackInfo.PanSlider((WaveTrack *) t); - if (slider->ShowDialog()) { - SetTrackPan(t, slider); - } -} - -void TrackPanel::OnTrackPanLeft() -{ - Track *t = GetFocusedTrack(); - if (!t || (t->GetKind() != Track::Wave)) { - return; - } - - LWSlider *slider = mTrackInfo.PanSlider((WaveTrack *) t); - slider->Decrease(1); - SetTrackPan(t, slider); -} - -void TrackPanel::OnTrackPanRight() -{ - Track *t = GetFocusedTrack(); - if (!t || (t->GetKind() != Track::Wave)) { - return; - } - - LWSlider *slider = mTrackInfo.PanSlider((WaveTrack *) t); - slider->Increase(1); - SetTrackPan(t, slider); -} - -void TrackPanel::SetTrackPan(Track * t, LWSlider * s) -{ - wxASSERT(t); - if( t->GetKind() != Track::Wave ) - return; - float newValue = s->Get(); - - WaveTrack *link = (WaveTrack *)mTracks->GetLink(t); - ((WaveTrack*)t)->SetPan(newValue); - if (link) - link->SetPan(newValue); - - MakeParentPushState(_("Adjusted Pan"), _("Pan"), PUSH_CONSOLIDATE ); - - RefreshTrack(t); -} - -/// This will pop up the track gain dialog for specified track -void TrackPanel::OnTrackGain() -{ - Track *t = GetFocusedTrack(); - if (!t || (t->GetKind() != Track::Wave)) { - return; - } - - LWSlider *slider = mTrackInfo.GainSlider((WaveTrack *) t); - if (slider->ShowDialog()) { - SetTrackGain(t, slider); - } -} - -void TrackPanel::OnTrackGainInc() -{ - Track *t = GetFocusedTrack(); - if (!t || (t->GetKind() != Track::Wave)) { - return; - } - - LWSlider *slider = mTrackInfo.GainSlider((WaveTrack *) t); - slider->Increase(1); - SetTrackGain(t, slider); -} - -void TrackPanel::OnTrackGainDec() -{ - Track *t = GetFocusedTrack(); - if (!t || (t->GetKind() != Track::Wave)) { - return; - } - - LWSlider *slider = mTrackInfo.GainSlider((WaveTrack *) t); - slider->Decrease(1); - SetTrackGain(t, slider); -} - -void TrackPanel::SetTrackGain(Track * t, LWSlider * s) -{ - wxASSERT(t); - if( t->GetKind() != Track::Wave ) - return ; - float newValue = s->Get(); - - WaveTrack *link = (WaveTrack *)mTracks->GetLink(t); - ((WaveTrack*)t)->SetGain(newValue); - if (link) - link->SetGain(newValue); - - MakeParentPushState(_("Adjusted gain"), _("Gain"), PUSH_CONSOLIDATE); - - RefreshTrack(t); -} - void TrackPanel::OnTrackMenu(Track *t) { if(!t) { diff --git a/src/TrackPanel.h b/src/TrackPanel.h index 54ce5d365..adf130e70 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -104,6 +104,7 @@ private: void GetMinimizeRect(const wxRect & rect, wxRect &dest) const; void GetSyncLockIconRect(const wxRect & rect, wxRect &dest) const; +public: LWSlider * GainSlider(WaveTrack *t) const; LWSlider * PanSlider(WaveTrack *t) const; @@ -198,12 +199,6 @@ class AUDACITY_DLL_API TrackPanel:public wxPanel { virtual void ScrollIntoView(double pos); virtual void ScrollIntoView(int x); - virtual void OnTrackPan(); - virtual void OnTrackPanLeft(); - virtual void OnTrackPanRight(); - virtual void OnTrackGain(); - virtual void OnTrackGainDec(); - virtual void OnTrackGainInc(); virtual void OnTrackMenu(Track *t = NULL); virtual void OnVRulerMenu(Track *t, wxMouseEvent *pEvent = NULL); virtual void OnTrackClose(); @@ -506,9 +501,6 @@ protected: virtual void SplitStereo(bool stereo); virtual void OnMergeStereo(wxCommandEvent &event); - virtual void SetTrackPan(Track * t, LWSlider * s); - virtual void SetTrackGain(Track * t, LWSlider * s); - virtual void RemoveTrack(Track * toRemove); // Find track info by coordinate @@ -577,7 +569,10 @@ protected: virtual bool MoveClipToTrack(WaveClip *clip, WaveTrack* dst); TrackInfo mTrackInfo; + public: + TrackInfo *GetTrackInfo() { return &mTrackInfo; } +protected: TrackPanelListener *mListener; TrackList *mTracks;