From 67d3bb89cb6f556ea23e979539336355081a471d Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 3 May 2016 20:35:38 -0400 Subject: [PATCH] Define a place to insert a double-click action for the time ruler... ... also split out a function just for starting play. --- src/widgets/Ruler.cpp | 58 +++++++++++++++++++++++++++++++------------ src/widgets/Ruler.h | 4 +++ 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/widgets/Ruler.cpp b/src/widgets/Ruler.cpp index 6f805737a..77044b80a 100644 --- a/src/widgets/Ruler.cpp +++ b/src/widgets/Ruler.cpp @@ -85,6 +85,7 @@ array of Ruler::Label. #include "../tracks/ui/Scrubbing.h" //#define SCRUB_ABOVE +//#define RULER_DOUBLE_CLICK using std::min; using std::max; @@ -2367,7 +2368,15 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt) } } +#ifdef RULER_DOUBLE_CLICK + if (evt.LeftDClick()) { + mDoubleClick = true; + HandleQPDoubleClick(evt, mousePosX); + } + else +#endif if (evt.LeftDown()) { + mDoubleClick = false; HandleQPClick(evt, mousePosX); HandleQPDrag(evt, mousePosX); } @@ -2382,6 +2391,10 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt) } } +void AdornedRulerPanel::HandleQPDoubleClick(wxMouseEvent &evt, wxCoord mousePosX) +{ +} + void AdornedRulerPanel::HandleQPClick(wxMouseEvent &evt, wxCoord mousePosX) { // Temporarily unlock locked play region @@ -2515,6 +2528,9 @@ void AdornedRulerPanel::HandleQPDrag(wxMouseEvent &event, wxCoord mousePosX) void AdornedRulerPanel::HandleQPRelease(wxMouseEvent &evt) { + if (mDoubleClick) + return; + HideQuickPlayIndicator(); if (HasCapture()) @@ -2555,6 +2571,28 @@ void AdornedRulerPanel::HandleQPRelease(wxMouseEvent &evt) ClearPlayRegion(); } + StartQPPlay(evt.ShiftDown(), evt.ControlDown()); + + mMouseEventState = mesNone; + mIsDragging = false; + mLeftDownClick = -1; + + if (mPlayRegionLock) { + // Restore Locked Play region + SetPlayRegion(mOldPlayRegionStart, mOldPlayRegionEnd); + mProject->OnLockPlayRegion(); + // and release local lock + mPlayRegionLock = false; + } +} + +void AdornedRulerPanel::StartQPPlay(bool looped, bool cutPreview) +{ + const double t0 = mTracks->GetStartTime(); + const double t1 = mTracks->GetEndTime(); + const double sel0 = mProject->GetSel0(); + const double sel1 = mProject->GetSel1(); + // Start / Restart playback on left click. bool startPlaying = (mPlayRegionStart >= 0); @@ -2565,7 +2603,7 @@ void AdornedRulerPanel::HandleQPRelease(wxMouseEvent &evt) bool loopEnabled = true; double start, end; - if ((mPlayRegionEnd - mPlayRegionStart == 0.0) && evt.ShiftDown()) { + if ((mPlayRegionEnd - mPlayRegionStart == 0.0) && looped) { // Loop play a point will loop either a selection or the project. if ((mPlayRegionStart > sel0) && (mPlayRegionStart < sel1)) { // we are in a selection, so use the selection @@ -2585,15 +2623,15 @@ void AdornedRulerPanel::HandleQPRelease(wxMouseEvent &evt) loopEnabled = ((end - start) > 0.001)? true : false; AudioIOStartStreamOptions options(mProject->GetDefaultPlayOptions()); - options.playLooped = (loopEnabled && evt.ShiftDown()); + options.playLooped = (loopEnabled && looped); - if (!evt.ControlDown()) + if (!cutPreview) options.pStartTime = &mPlayRegionStart; else options.timeTrack = NULL; ControlToolBar::PlayAppearance appearance = - evt.ControlDown() ? ControlToolBar::PlayAppearance::CutPreview + cutPreview ? ControlToolBar::PlayAppearance::CutPreview : options.playLooped ? ControlToolBar::PlayAppearance::Looped : ControlToolBar::PlayAppearance::Straight; ctb->PlayPlayRegion((SelectedRegion(start, end)), @@ -2606,18 +2644,6 @@ void AdornedRulerPanel::HandleQPRelease(wxMouseEvent &evt) mPlayRegionEnd = end; Refresh(); } - - mMouseEventState = mesNone; - mIsDragging = false; - mLeftDownClick = -1; - - if (mPlayRegionLock) { - // Restore Locked Play region - SetPlayRegion(mOldPlayRegionStart, mOldPlayRegionEnd); - mProject->OnLockPlayRegion(); - // and release local lock - mPlayRegionLock = false; - } } void AdornedRulerPanel::UpdateStatusBarAndTooltips(StatusChoice choice) diff --git a/src/widgets/Ruler.h b/src/widgets/Ruler.h index a10525e6b..afcfb997a 100644 --- a/src/widgets/Ruler.h +++ b/src/widgets/Ruler.h @@ -342,9 +342,11 @@ private: void OnSize(wxSizeEvent &evt); void UpdateRects(); void OnMouseEvents(wxMouseEvent &evt); + void HandleQPDoubleClick(wxMouseEvent &event, wxCoord mousePosX); void HandleQPClick(wxMouseEvent &event, wxCoord mousePosX); void HandleQPDrag(wxMouseEvent &event, wxCoord mousePosX); void HandleQPRelease(wxMouseEvent &event); + void StartQPPlay(bool looped, bool cutPreview); static inline bool IsButton(StatusChoice choice) { @@ -488,6 +490,8 @@ private: mutable int mButtonFontSize { -1 }; mutable wxFont mButtonFont; + bool mDoubleClick {}; + DECLARE_EVENT_TABLE() };