1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-08-12 06:01:13 +02:00

Norm's patch to improve selection speed on large projects by reducing the number of unnecessary auto-saves. Maybe vertical zooming should also not trigger an auto-save?

This commit is contained in:
martynshaw99 2013-12-30 00:41:18 +00:00
parent 2c47926141
commit 65e4f56126
5 changed files with 74 additions and 70 deletions

View File

@ -1922,7 +1922,7 @@ void AudacityProject::OnPlayStopSelect()
if( mViewInfo.sel1 < mViewInfo.sel0 ) {
mViewInfo.sel1 = mViewInfo.sel0;
}
ModifyState();
ModifyState(false); // without bWantsAutoSave
toolbar->OnStop(evt);
}
else if (!gAudioIO->IsBusy()) {
@ -1945,7 +1945,7 @@ void AudacityProject::OnStopSelect()
mViewInfo.sel1 = mViewInfo.sel0;
}
GetControlToolBar()->OnStop(evt);
ModifyState();
ModifyState(false); // without bWantsAutoSave
}
}
@ -2114,7 +2114,7 @@ void AudacityProject::OnSkipStart()
wxCommandEvent evt;
GetControlToolBar()->OnRewind(evt);
ModifyState();
ModifyState(false);
}
void AudacityProject::OnSkipEnd()
@ -2122,7 +2122,7 @@ void AudacityProject::OnSkipEnd()
wxCommandEvent evt;
GetControlToolBar()->OnFF(evt);
ModifyState();
ModifyState(false);
}
void AudacityProject::OnSeekLeftShort()
@ -2148,13 +2148,13 @@ void AudacityProject::OnSeekRightLong()
void AudacityProject::OnSelToStart()
{
Rewind(true);
ModifyState();
ModifyState(false);
}
void AudacityProject::OnSelToEnd()
{
SkipEnd(true);
ModifyState();
ModifyState(false);
}
void AudacityProject::OnCursorUp()
@ -2281,7 +2281,7 @@ void AudacityProject::OnSetLeftSelection()
if (bSelChanged)
{
ModifyState();
ModifyState(false);
mTrackPanel->Refresh(false);
}
}
@ -2323,7 +2323,7 @@ void AudacityProject::OnSetRightSelection()
if (bSelChanged)
{
ModifyState();
ModifyState(false);
mTrackPanel->Refresh(false);
}
}
@ -2642,7 +2642,7 @@ void AudacityProject::OnZeroCrossing()
mViewInfo.sel1 = mViewInfo.sel0;
}
ModifyState();
ModifyState(false);
mTrackPanel->Refresh(false);
}
@ -4174,7 +4174,7 @@ void AudacityProject::OnSelectAll()
mViewInfo.sel0 = mTracks->GetMinOffset();
mViewInfo.sel1 = mTracks->GetEndTime();
ModifyState();
ModifyState(false);
mTrackPanel->Refresh(false);
if (mMixerBoard)
@ -4185,7 +4185,7 @@ void AudacityProject::OnSelectNone()
{
this->SelectNone();
mViewInfo.sel1 = mViewInfo.sel0;
ModifyState();
ModifyState(false);
}
void AudacityProject::OnSelectCursorEnd()
@ -4206,7 +4206,7 @@ void AudacityProject::OnSelectCursorEnd()
mViewInfo.sel1 = maxEndOffset;
ModifyState();
ModifyState(false);
mTrackPanel->Refresh(false);
}
@ -4229,7 +4229,7 @@ void AudacityProject::OnSelectStartCursor()
mViewInfo.sel0 = minOffset;
ModifyState();
ModifyState(false);
mTrackPanel->Refresh(false);
}
@ -4247,7 +4247,7 @@ void AudacityProject::OnSelectSyncLockSel()
}
if (selected)
ModifyState();
ModifyState(false);
mTrackPanel->Refresh(false);
if (mMixerBoard)
@ -4261,7 +4261,7 @@ void AudacityProject::OnSelectAllTracks()
t->SetSelected(true);
}
ModifyState();
ModifyState(false);
mTrackPanel->Refresh(false);
if (mMixerBoard)
@ -4447,7 +4447,7 @@ void AudacityProject::OnZoomFitV()
mVsbar->SetThumbPosition(0);
RedrawProject();
ModifyState();
ModifyState(true);
}
void AudacityProject::OnZoomSel()
@ -4867,7 +4867,7 @@ void AudacityProject::OnSelectionRestore()
mViewInfo.sel0 = mSel0save;
mViewInfo.sel1 = mSel1save;
ModifyState();
ModifyState(false);
mTrackPanel->Refresh(false);
}
@ -4891,7 +4891,7 @@ void AudacityProject::OnCursorTrackStart()
if (minOffset < 0.0) minOffset = 0.0;
mViewInfo.sel0 = minOffset;
mViewInfo.sel1 = minOffset;
ModifyState();
ModifyState(false);
mTrackPanel->ScrollIntoView(mViewInfo.sel0);
mTrackPanel->Refresh(false);
}
@ -4916,7 +4916,7 @@ void AudacityProject::OnCursorTrackEnd()
mViewInfo.sel0 = maxEndOffset;
mViewInfo.sel1 = maxEndOffset;
ModifyState();
ModifyState(false);
mTrackPanel->ScrollIntoView(mViewInfo.sel1);
mTrackPanel->Refresh(false);
}
@ -4924,7 +4924,7 @@ void AudacityProject::OnCursorTrackEnd()
void AudacityProject::OnCursorSelStart()
{
mViewInfo.sel1 = mViewInfo.sel0;
ModifyState();
ModifyState(false);
mTrackPanel->ScrollIntoView(mViewInfo.sel0);
mTrackPanel->Refresh(false);
}
@ -4932,7 +4932,7 @@ void AudacityProject::OnCursorSelStart()
void AudacityProject::OnCursorSelEnd()
{
mViewInfo.sel0 = mViewInfo.sel1;
ModifyState();
ModifyState(false);
mTrackPanel->ScrollIntoView(mViewInfo.sel1);
mTrackPanel->Refresh(false);
}
@ -5791,7 +5791,7 @@ void AudacityProject::OnCollapseAllTracks()
t = iter.Next();
}
ModifyState();
ModifyState(true);
RedrawProject();
}
@ -5806,7 +5806,7 @@ void AudacityProject::OnExpandAllTracks()
t = iter.Next();
}
ModifyState();
ModifyState(true);
RedrawProject();
}
@ -5822,7 +5822,7 @@ void AudacityProject::OnMuteAllTracks()
t = iter.Next();
}
ModifyState();
ModifyState(true);
RedrawProject();
if (mMixerBoard)
mMixerBoard->UpdateMute();
@ -5839,7 +5839,7 @@ void AudacityProject::OnUnMuteAllTracks()
t = iter.Next();
}
ModifyState();
ModifyState(true);
RedrawProject();
if (mMixerBoard)
mMixerBoard->UpdateMute();

View File

@ -1235,7 +1235,7 @@ void AudacityProject::AS_ModifySelection(double &start, double &end, bool done)
mViewInfo.sel1 = end;
mTrackPanel->Refresh(false);
if (done) {
ModifyState();
ModifyState(false);
}
}
@ -3706,10 +3706,11 @@ void AudacityProject::PushState(wxString desc,
AutoSave();
}
void AudacityProject::ModifyState()
void AudacityProject::ModifyState(bool bWantsAutoSave)
{
mUndoManager.ModifyState(mTracks, mViewInfo.sel0, mViewInfo.sel1);
AutoSave();
if (bWantsAutoSave)
AutoSave();
}
// LL: Is there a memory leak here as "l" and "t" are not deleted???
@ -4381,9 +4382,9 @@ void AudacityProject::TP_PushState(wxString desc, wxString shortDesc,
}
// TrackPanel callback method
void AudacityProject::TP_ModifyState()
void AudacityProject::TP_ModifyState(bool bWantsAutoSave)
{
ModifyState();
ModifyState(bWantsAutoSave);
}
// TrackPanel callback method
@ -4685,7 +4686,7 @@ void AudacityProject::HandleTrackMute(Track *t, const bool exclusive)
}
}
}
ModifyState();
ModifyState(true);
}
// Type of solo (standard or simple) follows the set preference, unless
@ -4744,6 +4745,6 @@ void AudacityProject::HandleTrackSolo(Track *t, const bool alternate)
i = iter.Next();
}
}
ModifyState();
ModifyState(true);
}

View File

@ -339,7 +339,8 @@ class AUDACITY_DLL_API AudacityProject: public wxFrame,
virtual void TP_OnPlayKey();
virtual void TP_PushState(wxString longDesc, wxString shortDesc,
int flags);
virtual void TP_ModifyState();
virtual void TP_ModifyState(bool bWantsAutoSave); // if true, writes auto-save file. Should set only if you really want the state change restored after
// a crash, as it can take many seconds for large (eg. 10 track-hours) projects
virtual void TP_RedrawScrollbars();
virtual void TP_ScrollLeft();
virtual void TP_ScrollRight();
@ -410,7 +411,8 @@ class AUDACITY_DLL_API AudacityProject: public wxFrame,
void ClearClipboard();
void InitialState();
void ModifyState();
void ModifyState(bool bWantsAutoSave); // if true, writes auto-save file. Should set only if you really want the state change restored after
// a crash, as it can take many seconds for large (eg. 10 track-hours) projects
void PopState(TrackList * l);
void UpdateLyrics();

View File

@ -1416,9 +1416,9 @@ void TrackPanel::MakeParentPushState(wxString desc, wxString shortDesc,
mListener->TP_PushState(desc, shortDesc, flags);
}
void TrackPanel::MakeParentModifyState()
void TrackPanel::MakeParentModifyState(bool bWantsAutoSave)
{
mListener->TP_ModifyState();
mListener->TP_ModifyState(bWantsAutoSave);
}
void TrackPanel::MakeParentRedrawScrollbars()
@ -1858,7 +1858,7 @@ void TrackPanel::HandleSelect(wxMouseEvent & event)
SetCapturedTrack( NULL );
//Send the new selection state to the undo/redo stack:
MakeParentModifyState();
MakeParentModifyState(false);
} else if (event.LeftDClick() && !event.ShiftDown()) {
if (!mCapturedTrack) {
@ -1898,7 +1898,7 @@ void TrackPanel::HandleSelect(wxMouseEvent & event)
Refresh(false);
SetCapturedTrack( NULL );
MakeParentModifyState();
MakeParentModifyState(false);
}
done:
SelectionHandleDrag(event, t);
@ -1983,7 +1983,7 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
// If the shift button is down, extend the current selection.
ExtendSelection(event.m_x, r.x, pTrack);
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
@ -2197,7 +2197,7 @@ void TrackPanel::StartSelection(int mouseXCoordinate, int trackLeftEdge)
mViewInfo->sel1 = s;
SonifyBeginModifyState();
MakeParentModifyState();
MakeParentModifyState(false);
SonifyEndModifyState();
}
@ -3392,7 +3392,7 @@ void TrackPanel::HandleVZoomButtonUp( wxMouseEvent & event )
mZoomEnd = mZoomStart = 0;
Refresh(false);
mCapturedTrack = NULL;
MakeParentModifyState();
MakeParentModifyState(true);
return;
}
#endif
@ -3640,7 +3640,7 @@ void TrackPanel::HandleVZoomButtonUp( wxMouseEvent & event )
UpdateVRuler(mCapturedTrack);
Refresh(false);
mCapturedTrack = NULL;
MakeParentModifyState();
MakeParentModifyState(true);
}
/// Determines if we can edit samples in a wave track.
@ -4161,7 +4161,7 @@ void TrackPanel::HandleMinimizing(wxMouseEvent & event)
if (mTracks->GetLink(t))
mTracks->GetLink(t)->SetMinimized(t->GetMinimized());
MakeParentRedrawScrollbars();
MakeParentModifyState();
MakeParentModifyState(true);
}
SetCapturedTrack(NULL);
@ -4424,7 +4424,7 @@ void TrackPanel::HandleLabelClick(wxMouseEvent & event)
pMixerBoard->RefreshTrackClusters();
if (!unsafe)
MakeParentModifyState();
MakeParentModifyState(true);
}
/// The user is dragging one of the tracks: change the track order
@ -4717,7 +4717,7 @@ void TrackPanel::HandleResizeButtonUp(wxMouseEvent & WXUNUSED(event))
{
SetCapturedTrack( NULL );
MakeParentRedrawScrollbars();
MakeParentModifyState(); //v Probably doesn't really warrant AutoSave. Maybe add bWantAutoSave param if there are more.
MakeParentModifyState(false);
}
/// Resize dragging means that the mouse button IS down and has moved
@ -6291,7 +6291,7 @@ void TrackPanel::OnPrevTrack( bool shift )
t = iter.Last();
SetFocusedTrack( t );
EnsureVisible( t );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
@ -6325,7 +6325,7 @@ void TrackPanel::OnPrevTrack( bool shift )
mTracks->Select( t, false );
SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
if( tSelected && !pSelected )
@ -6333,7 +6333,7 @@ void TrackPanel::OnPrevTrack( bool shift )
mTracks->Select( p, true );
SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
if( !tSelected && pSelected )
@ -6341,7 +6341,7 @@ void TrackPanel::OnPrevTrack( bool shift )
mTracks->Select( p, false );
SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
if( !tSelected && !pSelected )
@ -6349,7 +6349,7 @@ void TrackPanel::OnPrevTrack( bool shift )
mTracks->Select( t, true );
SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
}
@ -6368,7 +6368,7 @@ void TrackPanel::OnPrevTrack( bool shift )
}
SetFocusedTrack( p ); // Wrap to the first track
EnsureVisible( p );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
else
@ -6381,7 +6381,7 @@ void TrackPanel::OnPrevTrack( bool shift )
{
SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
}
@ -6403,7 +6403,7 @@ void TrackPanel::OnNextTrack( bool shift )
t = iter.First();
SetFocusedTrack( t );
EnsureVisible( t );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
@ -6431,7 +6431,7 @@ void TrackPanel::OnNextTrack( bool shift )
mTracks->Select( t, false );
SetFocusedTrack( n ); // move focus to next track down
EnsureVisible( n );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
if( tSelected && !nSelected )
@ -6439,7 +6439,7 @@ void TrackPanel::OnNextTrack( bool shift )
mTracks->Select( n, true );
SetFocusedTrack( n ); // move focus to next track down
EnsureVisible( n );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
if( !tSelected && nSelected )
@ -6447,7 +6447,7 @@ void TrackPanel::OnNextTrack( bool shift )
mTracks->Select( n, false );
SetFocusedTrack( n ); // move focus to next track down
EnsureVisible( n );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
if( !tSelected && !nSelected )
@ -6455,7 +6455,7 @@ void TrackPanel::OnNextTrack( bool shift )
mTracks->Select( t, true );
SetFocusedTrack( n ); // move focus to next track down
EnsureVisible( n );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
}
@ -6471,7 +6471,7 @@ void TrackPanel::OnNextTrack( bool shift )
n = iter.First();
SetFocusedTrack( n ); // Wrap to the first track
EnsureVisible( n );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
else
@ -6484,7 +6484,7 @@ void TrackPanel::OnNextTrack( bool shift )
{
SetFocusedTrack( n ); // move focus to next track down
EnsureVisible( n );
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
}
@ -6500,7 +6500,7 @@ void TrackPanel::OnToggle()
mTracks->Select( t, !t->GetSelected() );
EnsureVisible( t );
MakeParentModifyState();
MakeParentModifyState(false);
mAx->Updated();
@ -6536,7 +6536,7 @@ void TrackPanel::OnCursorLeft( bool shift, bool ctrl, bool keyup )
return;
}
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
@ -6650,7 +6650,7 @@ void TrackPanel::OnCursorRight( bool shift, bool ctrl, bool keyup )
return;
}
MakeParentModifyState();
MakeParentModifyState(false);
return;
}
@ -6812,7 +6812,7 @@ void TrackPanel::OnBoundaryMove(bool left, bool boundaryContract)
mViewInfo->sel1 = indicator;
}
MakeParentModifyState();
MakeParentModifyState(false);
Refresh(false);
}
else
@ -6869,7 +6869,7 @@ void TrackPanel::OnBoundaryMove(bool left, bool boundaryContract)
}
}
Refresh( false );
MakeParentModifyState();
MakeParentModifyState(false);
}
}
@ -6943,7 +6943,7 @@ void TrackPanel::OnCursorMove(bool forward, bool jump, bool longjump )
// Make sure it's visible
ScrollIntoView( mViewInfo->sel0 );
MakeParentModifyState();
MakeParentModifyState(false);
}
}
@ -7574,7 +7574,7 @@ void TrackPanel::OnSetDisplay(wxCommandEvent & event)
#endif
UpdateVRuler(wt);
}
MakeParentModifyState(); //v Doesn't really warrant AutoSave. Maybe add bWantAutoSave param if there are more.
MakeParentModifyState(true);
mPopupMenuTarget = NULL;
Refresh(false);
}
@ -7931,7 +7931,7 @@ void TrackPanel::OnChangeOctave(wxCommandEvent & event)
bool bDown = (OnDownOctaveID == event.GetId());
t->SetBottomNote(t->GetBottomNote() + ((bDown) ? -12 : 12));
MakeParentModifyState();
MakeParentModifyState(true);
Refresh(false);
#endif
}

View File

@ -70,7 +70,8 @@ class AUDACITY_DLL_API TrackPanelListener {
virtual void TP_OnPlayKey() = 0;
virtual void TP_PushState(wxString shortDesc, wxString longDesc,
int flags = PUSH_AUTOSAVE | PUSH_CALC_SPACE) = 0;
virtual void TP_ModifyState() = 0;
virtual void TP_ModifyState(bool bWantsAutoSave) = 0; // if true, writes auto-save file. Should set only if you really want the state change restored after
// a crash, as it can take many seconds for large (eg. 10 track-hours) projects
virtual void TP_RedrawScrollbars() = 0;
virtual void TP_ScrollLeft() = 0;
virtual void TP_ScrollRight() = 0;
@ -426,8 +427,8 @@ class AUDACITY_DLL_API TrackPanel:public wxPanel {
// AS: Pushing the state preserves state for Undo operations.
virtual void MakeParentPushState(wxString desc, wxString shortDesc,
int flags = PUSH_AUTOSAVE | PUSH_CALC_SPACE);
virtual void MakeParentModifyState();
virtual void MakeParentModifyState(bool bWantsAutoSave); // if true, writes auto-save file. Should set only if you really want the state change restored after
// a crash, as it can take many seconds for large (eg. 10 track-hours) projects
virtual void MakeParentResize();
virtual void OnSetName(wxCommandEvent &event);