1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-09-17 16:50:26 +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 );
wxTheApp->Bind(EVT_THEME_CHANGE, &AdornedRulerPanel::OnThemeChange, this);
mViewInfo->selectedRegion.Bind(EVT_SELECTED_REGION_CHANGE,
&AdornedRulerPanel::OnSelectionChange, this);
}
AdornedRulerPanel::~AdornedRulerPanel()
@ -1129,25 +1132,19 @@ void AdornedRulerPanel::DoIdle()
auto &project = *mProject;
auto &viewInfo = ViewInfo::Get( project );
const auto &selectedRegion = viewInfo.selectedRegion;
auto &playRegion = ViewInfo::Get( project ).playRegion;
bool dirtySelectedRegion = mDirtySelectedRegion
|| ( mLastDrawnSelectedRegion != selectedRegion );
auto gAudioIO = AudioIOBase::Get();
if (!gAudioIO->IsBusy() && !playRegion.Locked() && dirtySelectedRegion)
SetPlayRegion( selectedRegion.t0(), selectedRegion.t1() );
else {
changed = changed
|| dirtySelectedRegion
|| mLastDrawnH != viewInfo.h
|| mLastDrawnZoom != viewInfo.GetZoom()
;
if (changed)
// Cause ruler redraw anyway, because we may be zooming or scrolling,
// showing or hiding the scrub bar, etc.
Refresh();
}
changed = changed
|| dirtySelectedRegion
|| mLastDrawnH != viewInfo.h
|| mLastDrawnZoom != viewInfo.GetZoom()
;
if (changed)
// Cause ruler redraw anyway, because we may be zooming or scrolling,
// showing or hiding the scrub bar, etc.
Refresh();
mDirtySelectedRegion = false;
}
@ -1231,6 +1228,21 @@ void AdornedRulerPanel::OnThemeChange(wxCommandEvent& evt)
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()
{
auto inner = mOuter;

View File

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