From f49dbae9e24c5e6a1a164c35d3e0ad91b7794eb3 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Fri, 28 Aug 2015 16:21:00 -0400 Subject: [PATCH] Move minimize and close details out of TrackPanel.cpp --- src/Menus.cpp | 16 +++++++++- src/Project.cpp | 43 ++++++++++++++++++++++++++ src/Project.h | 1 + src/TrackPanel.cpp | 77 +--------------------------------------------- src/TrackPanel.h | 3 -- 5 files changed, 60 insertions(+), 80 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index a62b37f56..dc74abf94 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -2954,7 +2954,21 @@ void AudacityProject::OnTrackSolo() void AudacityProject::OnTrackClose() { - mTrackPanel->OnTrackClose(); + Track *t = mTrackPanel->GetFocusedTrack(); + if (!t) + return; + + if (IsAudioActive()) + { + this->TP_DisplayStatusMessage(_("Can't delete track with active audio")); + wxBell(); + return; + } + + RemoveTrack(t); + + GetTrackPanel()->UpdateViewIfNoTracks(); + GetTrackPanel()->Refresh(false); } void AudacityProject::OnTrackMoveUp() diff --git a/src/Project.cpp b/src/Project.cpp index 966452642..f06ceddd9 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -4916,6 +4916,49 @@ void AudacityProject::SetTrackPan(Track * track, LWSlider * slider) GetTrackPanel()->RefreshTrack(track); } +/// Removes the specified track. Called from HandleClosing. +void AudacityProject::RemoveTrack(Track * toRemove) +{ + // If it was focused, reassign focus to the next or, if + // unavailable, the previous track. + if (mTrackPanel->GetFocusedTrack() == toRemove) { + Track *t = mTracks->GetNext(toRemove, true); + if (t == NULL) { + t = mTracks->GetPrev(toRemove, true); + } + mTrackPanel->SetFocusedTrack(t); // It's okay if this is NULL + } + + wxString name = toRemove->GetName(); + Track *partner = toRemove->GetLink(); + + if (toRemove->GetKind() == Track::Wave) + { + // Update mixer board displayed tracks. + MixerBoard* pMixerBoard = this->GetMixerBoard(); + if (pMixerBoard) + pMixerBoard->RemoveTrackCluster((WaveTrack*)toRemove); // Will remove partner shown in same cluster. + } + + mTracks->Remove(toRemove, true); + if (partner) { + mTracks->Remove(partner, true); + } + + if (mTracks->IsEmpty()) { + mTrackPanel->SetFocusedTrack(NULL); + } + + PushState( + wxString::Format(_("Removed track '%s.'"), + name.c_str()), + _("Track Remove")); + + TP_RedrawScrollbars(); + TP_HandleResize(); + GetTrackPanel()->Refresh(false); +} + 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 d1225ad10..144396756 100644 --- a/src/Project.h +++ b/src/Project.h @@ -342,6 +342,7 @@ class AUDACITY_DLL_API AudacityProject: public wxFrame, void SetTrackGain(Track * track, LWSlider * slider); void SetTrackPan(Track * track, LWSlider * slider); + void RemoveTrack(Track * toRemove); // "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 ace52f1ff..62d77c5ea 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -5182,7 +5182,7 @@ void TrackPanel::HandleClosing(wxMouseEvent & event) mTrackInfo.DrawCloseBox(&dc, rect, false); if (closeRect.Contains(event.m_x, event.m_y)) { if (!IsUnsafe()) - RemoveTrack(t); + GetProject()->RemoveTrack(t); } SetCapturedTrack( NULL ); } @@ -5212,48 +5212,6 @@ void TrackPanel::UpdateViewIfNoTracks() } } -/// Removes the specified track. Called from HandleClosing. -void TrackPanel::RemoveTrack(Track * toRemove) -{ - // If it was focused, reassign focus to the next or, if - // unavailable, the previous track. - if (GetFocusedTrack() == toRemove) { - Track *t = mTracks->GetNext(toRemove, true); - if (t == NULL) { - t = mTracks->GetPrev( toRemove, true ); - } - SetFocusedTrack(t); // It's okay if this is NULL - } - - wxString name = toRemove->GetName(); - Track *partner = toRemove->GetLink(); - - if (toRemove->GetKind() == Track::Wave) - { - // Update mixer board displayed tracks. - MixerBoard* pMixerBoard = this->GetMixerBoard(); - if (pMixerBoard) - pMixerBoard->RemoveTrackCluster((WaveTrack*)toRemove); // Will remove partner shown in same cluster. - } - - mTracks->Remove(toRemove, true); - if (partner) { - mTracks->Remove(partner, true); - } - - if (mTracks->IsEmpty()) { - SetFocusedTrack( NULL ); - } - - MakeParentPushState( - wxString::Format(_("Removed track '%s.'"), - name.c_str()), - _("Track Remove")); - MakeParentRedrawScrollbars(); - MakeParentResize(); - Refresh(false); -} - void TrackPanel::HandlePopping(wxMouseEvent & event) { Track *t = mCapturedTrack; @@ -8502,39 +8460,6 @@ void TrackPanel::OnVRulerMenu(Track *t, wxMouseEvent *pEvent) mPopupMenuTarget = NULL; } -void TrackPanel::OnTrackClose() -{ - Track *t = GetFocusedTrack(); - if(!t) return; - - if (IsUnsafe()) - { - mListener->TP_DisplayStatusMessage( _( "Can't delete track with active audio" ) ); - wxBell(); - return; - } - - RemoveTrack( t ); - - SetCapturedTrack( NULL ); - - // BG: There are no more tracks on screen - if( mTracks->IsEmpty() ) - { - //BG: Set zoom to normal - mViewInfo->SetZoom(ZoomInfo::GetDefaultZoom()); - - //STM: Set selection to 0,0 - //PRL: and default the rest of the selection information - mViewInfo->selectedRegion = SelectedRegion(); - - mListener->TP_RedrawScrollbars(); - mListener->TP_DisplayStatusMessage( wxT( "" ) ); //STM: Clear message if all tracks are removed - } - - Refresh( false ); -} - void TrackPanel::OnTrackMoveUp() { if (mTracks->CanMoveUp(GetFocusedTrack())) diff --git a/src/TrackPanel.h b/src/TrackPanel.h index adf130e70..e4e81b3a6 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -201,7 +201,6 @@ class AUDACITY_DLL_API TrackPanel:public wxPanel { virtual void OnTrackMenu(Track *t = NULL); virtual void OnVRulerMenu(Track *t, wxMouseEvent *pEvent = NULL); - virtual void OnTrackClose(); virtual void OnTrackMoveUp(); virtual void OnTrackMoveDown(); virtual void OnTrackMoveTop(); @@ -501,8 +500,6 @@ protected: virtual void SplitStereo(bool stereo); virtual void OnMergeStereo(wxCommandEvent &event); - virtual void RemoveTrack(Track * toRemove); - // Find track info by coordinate virtual Track *FindTrack(int mouseX, int mouseY, bool label, bool link, wxRect * trackRect = NULL);