From 17c964e39262346e3eda65f061e910b407968fe6 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Mon, 17 Jul 2017 11:59:25 -0400 Subject: [PATCH] Distinct status bar message for Time track envelope edit --- .../wavetrack/ui/WaveTrackUI.cpp | 2 +- src/tracks/ui/EnvelopeHandle.cpp | 48 +++++++++---------- src/tracks/ui/EnvelopeHandle.h | 9 ++-- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp index c8844cd66..56d9bf511 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp @@ -82,7 +82,7 @@ std::vector WaveTrack::DetailedHitTest case envelopeTool: { auto envelope = GetEnvelopeAtX( st.state.m_x ); result = EnvelopeHandle::HitAnywhere( - mEnvelopeHandle, envelope); + mEnvelopeHandle, envelope, false); break; } case drawTool: diff --git a/src/tracks/ui/EnvelopeHandle.cpp b/src/tracks/ui/EnvelopeHandle.cpp index b50e3ab0a..e9ccd3661 100644 --- a/src/tracks/ui/EnvelopeHandle.cpp +++ b/src/tracks/ui/EnvelopeHandle.cpp @@ -41,28 +41,11 @@ void EnvelopeHandle::Enter(bool) EnvelopeHandle::~EnvelopeHandle() {} -HitTestPreview EnvelopeHandle::HitPreview -(const AudacityProject *pProject, bool unsafe) -{ - static auto disabledCursor = - ::MakeCursor(wxCURSOR_NO_ENTRY, DisabledCursorXpm, 16, 16); - static auto envelopeCursor = - ::MakeCursor(wxCURSOR_ARROW, EnvCursorXpm, 16, 16); - // TODO: this message isn't appropriate for time track - auto message = _("Click and drag to edit the amplitude envelope"); - - return { - message, - (unsafe - ? &*disabledCursor - : &*envelopeCursor) - }; -} - UIHandlePtr EnvelopeHandle::HitAnywhere -(std::weak_ptr &holder, Envelope *envelope) +(std::weak_ptr &holder, Envelope *envelope, bool timeTrack) { auto result = std::make_shared( envelope ); + result->mTimeTrack = timeTrack; return result; } @@ -96,7 +79,8 @@ UIHandlePtr EnvelopeHandle::TimeTrackHitTest float zoomMin, zoomMax; GetTimeTrackData( *pProject, *tt, dBRange, dB, zoomMin, zoomMax); return EnvelopeHandle::HitEnvelope - (holder, state, rect, pProject, envelope, zoomMin, zoomMax, dB, dBRange); + (holder, state, rect, pProject, envelope, zoomMin, zoomMax, dB, dBRange, + true); } UIHandlePtr EnvelopeHandle::WaveTrackHitTest @@ -126,14 +110,14 @@ UIHandlePtr EnvelopeHandle::WaveTrackHitTest const float dBRange = wt->GetWaveformSettings().dBRange; return EnvelopeHandle::HitEnvelope - (holder, state, rect, pProject, envelope, zoomMin, zoomMax, dB, dBRange); + (holder, state, rect, pProject, envelope, zoomMin, zoomMax, dB, dBRange, false); } UIHandlePtr EnvelopeHandle::HitEnvelope (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, Envelope *envelope, float zoomMin, float zoomMax, - bool dB, float dBRange) + bool dB, float dBRange, bool timeTrack) { const ViewInfo &viewInfo = pProject->GetViewInfo(); @@ -179,7 +163,7 @@ UIHandlePtr EnvelopeHandle::HitEnvelope if (distance >= yTolerance) return {}; - return HitAnywhere(holder, envelope); + return HitAnywhere(holder, envelope, timeTrack); } UIHandle::Result EnvelopeHandle::Click @@ -258,7 +242,23 @@ HitTestPreview EnvelopeHandle::Preview (const TrackPanelMouseState &, const AudacityProject *pProject) { const bool unsafe = pProject->IsAudioActive(); - return HitPreview(pProject, unsafe); + static auto disabledCursor = + ::MakeCursor(wxCURSOR_NO_ENTRY, DisabledCursorXpm, 16, 16); + static auto envelopeCursor = + ::MakeCursor(wxCURSOR_ARROW, EnvCursorXpm, 16, 16); + + wxString message; + if (mTimeTrack) + message = _("Click and drag to warp playback time"); + else + message = _("Click and drag to edit the amplitude envelope"); + + return { + message, + (unsafe + ? &*disabledCursor + : &*envelopeCursor) + }; } UIHandle::Result EnvelopeHandle::Release diff --git a/src/tracks/ui/EnvelopeHandle.h b/src/tracks/ui/EnvelopeHandle.h index 205851439..11787ecc7 100644 --- a/src/tracks/ui/EnvelopeHandle.h +++ b/src/tracks/ui/EnvelopeHandle.h @@ -28,15 +28,13 @@ class EnvelopeHandle final : public UIHandle { EnvelopeHandle(const EnvelopeHandle&) = delete; EnvelopeHandle &operator=(const EnvelopeHandle&) = delete; - static HitTestPreview HitPreview - (const AudacityProject *pProject, bool unsafe); static UIHandlePtr HitEnvelope (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, Envelope *envelope, float zoomMin, float zoomMax, - bool dB, float dBRange); + bool dB, float dBRange, bool timeTrack); public: explicit EnvelopeHandle( Envelope *pEnvelope ); @@ -44,7 +42,8 @@ public: virtual ~EnvelopeHandle(); static UIHandlePtr HitAnywhere - (std::weak_ptr &holder, Envelope *envelope); + (std::weak_ptr &holder, Envelope *envelope, + bool timeTrack); static UIHandlePtr TimeTrackHitTest (std::weak_ptr &holder, const wxMouseState &state, const wxRect &rect, @@ -88,6 +87,8 @@ private: Envelope *mEnvelope{}; std::unique_ptr mEnvelopeEditor; std::unique_ptr mEnvelopeEditorRight; + + bool mTimeTrack{}; }; #endif