1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-29 06:38:38 +02:00

ProjectWindow listens for undo events, intrudes less in other code

This commit is contained in:
Paul Licameli 2019-06-08 11:28:22 -04:00
parent e17fc86c23
commit 5eaf0a649b
4 changed files with 20 additions and 10 deletions

View File

@ -15,7 +15,6 @@ Paul Licameli split from ProjectManager.cpp
#include "Project.h"
#include "ProjectFileIO.h"
#include "ProjectSettings.h"
#include "ProjectWindow.h"
#include "Tags.h"
#include "Track.h"
#include "TrackPanel.h"
@ -147,7 +146,6 @@ void ProjectHistory::PopState(const UndoState &state)
auto &projectFileIO = ProjectFileIO::Get( project );
auto &dstTracks = TrackList::Get( project );
auto &viewInfo = ViewInfo::Get( project );
auto &window = ProjectWindow::Get( project );
viewInfo.selectedRegion = state.selectedRegion;
@ -192,8 +190,6 @@ void ProjectHistory::PopState(const UndoState &state)
if(odUsed)
ODManager::Instance()->AddNewTask(std::move(computeTask));
window.HandleResize();
MenuManager::Get( project ).UpdateMenus();
projectFileIO.AutoSave();
@ -204,12 +200,10 @@ void ProjectHistory::SetStateTo(unsigned int n)
auto &project = mProject;
auto &trackPanel = TrackPanel::Get( project );
auto &undoManager = UndoManager::Get( project );
auto &window = ProjectWindow::Get( project );
undoManager.SetStateTo(n,
[this]( const UndoState &state ){ PopState(state); } );
window.HandleResize();
trackPanel.SetFocusedTrack(NULL);
trackPanel.Refresh(false);
MenuManager::Get( project ).ModifyUndoMenuItems( project );

View File

@ -21,6 +21,7 @@ Paul Licameli split from AudacityProject.cpp
#include "RefreshCode.h"
#include "TrackPanel.h"
#include "TrackPanelMouseEvent.h"
#include "UndoManager.h"
#include "ViewInfo.h"
#include "WaveClip.h"
#include "WaveTrack.h"
@ -642,6 +643,9 @@ ProjectWindow::ProjectWindow(wxWindow * parent, wxWindowID id,
mMainPage = pPage;
mPlaybackScroller = std::make_unique<PlaybackScroller>( &project );
project.Bind( EVT_UNDO_OR_REDO, &ProjectWindow::OnUndoRedo, this );
project.Bind( EVT_UNDO_RESET, &ProjectWindow::OnUndoReset, this );
}
void ProjectWindow::Init()
@ -1436,6 +1440,20 @@ void ProjectWindow::OnToolBarUpdate(wxCommandEvent & event)
event.Skip(false); /* No need to propagate any further */
}
void ProjectWindow::OnUndoRedo( wxCommandEvent &evt )
{
evt.Skip();
HandleResize();
CallAfter( [this]{ RedrawProject(); } );
}
void ProjectWindow::OnUndoReset( wxCommandEvent &evt )
{
evt.Skip();
HandleResize();
// CallAfter( [this]{ RedrawProject(); } ); // Should we do this here too?
}
void ProjectWindow::OnScroll(wxScrollEvent & WXUNUSED(event))
{
auto &project = mProject;

View File

@ -155,6 +155,8 @@ public:
void DoScroll();
void OnScroll(wxScrollEvent & event);
void OnToolBarUpdate(wxCommandEvent & event);
void OnUndoRedo( wxCommandEvent & );
void OnUndoReset( wxCommandEvent & );
bool mbInitializingScrollbar{ false };

View File

@ -253,8 +253,6 @@ void DoUndo(AudacityProject &project)
trackPanel.EnsureVisible(trackPanel.GetFirstSelectedTrack());
window.RedrawProject();
MenuManager::ModifyUndoMenuItems(project);
}
@ -289,8 +287,6 @@ void OnRedo(const CommandContext &context)
trackPanel.EnsureVisible(trackPanel.GetFirstSelectedTrack());
window.RedrawProject();
MenuManager::ModifyUndoMenuItems(project);
}