1
0
mirror of https://github.com/cookiengineer/audacity synced 2026-02-21 13:41:21 +01:00

Define a place to insert a double-click action for the time ruler...

... also split out a function just for starting play.
This commit is contained in:
Paul Licameli
2016-05-03 20:35:38 -04:00
parent b4763d2608
commit 67d3bb89cb
2 changed files with 46 additions and 16 deletions

View File

@@ -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)

View File

@@ -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()
};