1
0
mirror of https://github.com/cookiengineer/audacity synced 2026-04-25 23:44:13 +02:00

AdornedRulerPanel updates the play region in selection event handler

This commit is contained in:
Paul Licameli
2019-07-17 12:25:32 -04:00
parent 33f3d4b82d
commit ed33fdebc9
2 changed files with 29 additions and 15 deletions

View File

@@ -945,6 +945,9 @@ AdornedRulerPanel::AdornedRulerPanel(AudacityProject* project,
this->CallAfter( &AdornedRulerPanel::UpdatePrefs ); this->CallAfter( &AdornedRulerPanel::UpdatePrefs );
wxTheApp->Bind(EVT_THEME_CHANGE, &AdornedRulerPanel::OnThemeChange, this); wxTheApp->Bind(EVT_THEME_CHANGE, &AdornedRulerPanel::OnThemeChange, this);
mViewInfo->selectedRegion.Bind(EVT_SELECTED_REGION_CHANGE,
&AdornedRulerPanel::OnSelectionChange, this);
} }
AdornedRulerPanel::~AdornedRulerPanel() AdornedRulerPanel::~AdornedRulerPanel()
@@ -1129,25 +1132,19 @@ void AdornedRulerPanel::DoIdle()
auto &project = *mProject; auto &project = *mProject;
auto &viewInfo = ViewInfo::Get( project ); auto &viewInfo = ViewInfo::Get( project );
const auto &selectedRegion = viewInfo.selectedRegion; const auto &selectedRegion = viewInfo.selectedRegion;
auto &playRegion = ViewInfo::Get( project ).playRegion;
bool dirtySelectedRegion = mDirtySelectedRegion bool dirtySelectedRegion = mDirtySelectedRegion
|| ( mLastDrawnSelectedRegion != selectedRegion ); || ( mLastDrawnSelectedRegion != selectedRegion );
auto gAudioIO = AudioIOBase::Get(); changed = changed
if (!gAudioIO->IsBusy() && !playRegion.Locked() && dirtySelectedRegion) || dirtySelectedRegion
SetPlayRegion( selectedRegion.t0(), selectedRegion.t1() ); || mLastDrawnH != viewInfo.h
else { || mLastDrawnZoom != viewInfo.GetZoom()
changed = changed ;
|| dirtySelectedRegion if (changed)
|| mLastDrawnH != viewInfo.h // Cause ruler redraw anyway, because we may be zooming or scrolling,
|| mLastDrawnZoom != viewInfo.GetZoom() // showing or hiding the scrub bar, etc.
; Refresh();
if (changed)
// Cause ruler redraw anyway, because we may be zooming or scrolling,
// showing or hiding the scrub bar, etc.
Refresh();
}
mDirtySelectedRegion = false; mDirtySelectedRegion = false;
} }
@@ -1231,6 +1228,21 @@ void AdornedRulerPanel::OnThemeChange(wxCommandEvent& evt)
ReCreateButtons(); ReCreateButtons();
} }
void AdornedRulerPanel::OnSelectionChange(SelectedRegionEvent& evt)
{
evt.Skip();
auto gAudioIO = AudioIOBase::Get();
if ( !gAudioIO->IsBusy() &&
!ViewInfo::Get( *mProject ).playRegion.Locked()
) {
if (!evt.pRegion)
return;
auto &selectedRegion = *evt.pRegion;
SetPlayRegion( selectedRegion.t0(), selectedRegion.t1() );
}
}
bool AdornedRulerPanel::UpdateRects() bool AdornedRulerPanel::UpdateRects()
{ {
auto inner = mOuter; auto inner = mOuter;

View File

@@ -17,6 +17,7 @@
#include "ViewInfo.h" // for PlayRegion #include "ViewInfo.h" // for PlayRegion
class AudacityProject; class AudacityProject;
class SelectedRegionEvent;
class SnapManager; class SnapManager;
class TrackList; class TrackList;
@@ -85,6 +86,7 @@ private:
void OnPaint(wxPaintEvent &evt); void OnPaint(wxPaintEvent &evt);
void OnSize(wxSizeEvent &evt); void OnSize(wxSizeEvent &evt);
void OnThemeChange(wxCommandEvent& evt); void OnThemeChange(wxCommandEvent& evt);
void OnSelectionChange(SelectedRegionEvent& evt);
bool UpdateRects(); bool UpdateRects();
void HandleQPClick(wxMouseEvent &event, wxCoord mousePosX); void HandleQPClick(wxMouseEvent &event, wxCoord mousePosX);
void HandleQPDrag(wxMouseEvent &event, wxCoord mousePosX); void HandleQPDrag(wxMouseEvent &event, wxCoord mousePosX);