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:
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user