1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-16 08:09:32 +02:00

TrackPanel still draws Velocity, but no longer handles clicks on it...

... also implemented ESC key for that drag
This commit is contained in:
Paul Licameli 2017-05-14 17:26:17 -04:00
parent a569476e79
commit 7cab380192
7 changed files with 161 additions and 73 deletions

View File

@ -1222,6 +1222,7 @@
5E15126E1DB0010C00702E29 /* TrackControls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E1512681DB0010C00702E29 /* TrackControls.cpp */; };
5E15126F1DB0010C00702E29 /* TrackUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E15126A1DB0010C00702E29 /* TrackUI.cpp */; };
5E1512701DB0010C00702E29 /* TrackVRulerControls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E15126B1DB0010C00702E29 /* TrackVRulerControls.cpp */; };
5E3FFE721EC9032B0020F7C9 /* NoteTrackSliderHandles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E3FFE701EC9032B0020F7C9 /* NoteTrackSliderHandles.cpp */; };
5E73963B1DAFD82D00BA0A4D /* PopupMenuTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E7396391DAFD82D00BA0A4D /* PopupMenuTable.cpp */; };
5E73963E1DAFD86000BA0A4D /* ZoomHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E73963C1DAFD86000BA0A4D /* ZoomHandle.cpp */; };
5E7396441DAFD8C600BA0A4D /* TimeShiftHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E7396421DAFD8C600BA0A4D /* TimeShiftHandle.cpp */; };
@ -3044,6 +3045,8 @@
5E15126A1DB0010C00702E29 /* TrackUI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrackUI.cpp; sourceTree = "<group>"; };
5E15126B1DB0010C00702E29 /* TrackVRulerControls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrackVRulerControls.cpp; sourceTree = "<group>"; };
5E15126C1DB0010C00702E29 /* TrackVRulerControls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrackVRulerControls.h; sourceTree = "<group>"; };
5E3FFE701EC9032B0020F7C9 /* NoteTrackSliderHandles.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NoteTrackSliderHandles.cpp; sourceTree = "<group>"; };
5E3FFE711EC9032B0020F7C9 /* NoteTrackSliderHandles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoteTrackSliderHandles.h; sourceTree = "<group>"; };
5E4685F81CCA9D84008741F2 /* CommandFunctors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CommandFunctors.h; sourceTree = "<group>"; };
5E61EE0C1CBAA6BB0009FCF1 /* MemoryX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryX.h; sourceTree = "<group>"; };
5E7396391DAFD82D00BA0A4D /* PopupMenuTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PopupMenuTable.cpp; sourceTree = "<group>"; };
@ -5806,6 +5809,8 @@
5EA0181B1EC7B226001F2996 /* ui */ = {
isa = PBXGroup;
children = (
5E3FFE701EC9032B0020F7C9 /* NoteTrackSliderHandles.cpp */,
5E3FFE711EC9032B0020F7C9 /* NoteTrackSliderHandles.h */,
5EA0181C1EC7B226001F2996 /* NoteTrackControls.cpp */,
5EA0181D1EC7B226001F2996 /* NoteTrackControls.h */,
5EA0181E1EC7B226001F2996 /* NoteTrackUI.cpp */,
@ -7662,6 +7667,7 @@
2806EF7A1B32532A00D1AB9A /* FileDialogPrivate.mm in Sources */,
1790B18509883BFD008A330A /* MousePrefs.cpp in Sources */,
1790B18609883BFD008A330A /* PrefsDialog.cpp in Sources */,
5E3FFE721EC9032B0020F7C9 /* NoteTrackSliderHandles.cpp in Sources */,
1790B18709883BFD008A330A /* QualityPrefs.cpp in Sources */,
1790B18809883BFD008A330A /* SpectrumPrefs.cpp in Sources */,
1790B18909883BFD008A330A /* Prefs.cpp in Sources */,

View File

@ -556,6 +556,8 @@ audacity_SOURCES = \
tracks/labeltrack/ui/LabelTrackVRulerControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.h \
tracks/playabletrack/notetrack/ui/NoteTrackUI.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.h \

View File

@ -1147,8 +1147,7 @@ void TrackPanel::HandleInterruptedDrag()
IsClosing,
IsAdjustingLabel,
IsRearranging,
IsStretching,
IsVelocitySliding
IsStretching
*/
if (sendEvent) {
@ -3574,39 +3573,6 @@ void TrackPanel::HandleMinimizing(wxMouseEvent & event)
}
}
#ifdef EXPERIMENTAL_MIDI_OUT
void TrackPanel::HandleVelocitySlider(wxMouseEvent &event)
{
wxASSERT(mCapturedTrack->GetKind() == Track::Note);
NoteTrack *capturedTrack = static_cast<NoteTrack *>(mCapturedTrack);
auto rect = FindTrackRect( capturedTrack, true );
wxRect sliderRect;
TrackInfo::GetVelocityRect(rect.GetTopLeft(), sliderRect);
auto slider = mTrackInfo.VelocitySlider(sliderRect, capturedTrack, true, this);
slider->OnMouseEvent(event);
//If we have a double-click, do this...
if (event.LeftDClick())
mMouseCapture = IsUncaptured;
float newValue = slider->Get();
capturedTrack->SetVelocity(newValue);
MixerBoard* pMixerBoard = this->GetMixerBoard(); // Update mixer board, too.
if (pMixerBoard) {
pMixerBoard->UpdateVelocity(capturedTrack);
}
RefreshTrack(capturedTrack);
if (event.ButtonUp()) {
MakeParentPushState(_("Moved velocity slider"), _("Velocity"), UndoPush::CONSOLIDATE);
SetCapturedTrack(NULL);
}
}
#endif
// The tracks positions within the list have changed, so update the vertical
// ruler size for the track that triggered the event.
void TrackPanel::OnTrackListResized(wxCommandEvent & e)
@ -3882,8 +3848,6 @@ void TrackPanel::HandleLabelClick(wxMouseEvent & event)
else if (t->GetKind() == Track::Note)
{
#ifdef EXPERIMENTAL_MIDI_OUT
if (isleft && VelocityFunc(t, rect, event, event.m_x, event.m_y))
return;
wxRect midiRect;
mTrackInfo.GetMidiControlsRect(rect, midiRect);
@ -3995,25 +3959,6 @@ void TrackPanel::CalculateRearrangingThresholds(wxMouseEvent & event)
mMoveDownThreshold = INT_MAX;
}
#ifdef EXPERIMENTAL_MIDI_OUT
bool TrackPanel::VelocityFunc(Track * t, wxRect rect, wxMouseEvent &event,
int x, int y)
{
wxRect sliderRect;
mTrackInfo.GetVelocityRect(rect.GetTopLeft(), sliderRect);
if ( TrackInfo::HideTopItem( rect, sliderRect, kTrackInfoSliderAllowance ) )
return false;
if (!sliderRect.Contains(x, y))
return false;
SetCapturedTrack(t, IsVelocitySliding);
mCapturedRect = rect;
HandleVelocitySlider(event);
return true;
}
#endif
bool TrackPanel::MinimizeFunc(Track * t, wxRect rect, int x, int y)
{
wxRect buttonRect;
@ -4936,11 +4881,6 @@ try
case IsRearranging:
HandleRearrange(event);
break;
#ifdef EXPERIMENTAL_MIDI_OUT
case IsVelocitySliding:
HandleVelocitySlider(event);
break;
#endif
case IsMinimizing:
HandleMinimizing(event);
break;

View File

@ -494,9 +494,6 @@ protected:
virtual void HandleClosing(wxMouseEvent & event);
virtual void HandlePopping(wxMouseEvent & event);
virtual void HandleMinimizing(wxMouseEvent & event);
#ifdef EXPERIMENTAL_MIDI_OUT
virtual void HandleVelocitySlider(wxMouseEvent &event);
#endif
// These *Func methods are used in TrackPanel::HandleLabelClick to set up
@ -506,11 +503,6 @@ protected:
virtual bool PopupFunc(Track * t, wxRect rect, int x, int y);
virtual bool MinimizeFunc(Track *t, wxRect rect, int x, int f);
#ifdef EXPERIMENTAL_MIDI_OUT
virtual bool VelocityFunc(Track * t, wxRect rect, wxMouseEvent &event,
int x, int y);
#endif
public:
virtual void MakeParentRedrawScrollbars();
@ -803,10 +795,6 @@ public:
IsSoloing,
IsMinimizing,
IsPopping,
#ifdef EXPERIMENTAL_MIDI_OUT
IsVelocitySliding,
#endif
};
protected:

View File

@ -14,6 +14,7 @@ Paul Licameli split from TrackPanel.cpp
#include "NoteTrackControls.h"
#include "../../ui/PlayableTrackButtonHandles.h"
#include "NoteTrackSliderHandles.h"
#include "../../../../HitTestResult.h"
#include "../../../../Track.h"
@ -52,6 +53,11 @@ HitTestResult NoteTrackControls::HitTest
(result = SoloButtonHandle::HitTest
(event, rect, pProject, track)).handle)
return result;
#ifdef EXPERIMENTAL_MIDI_OUT
if (NULL != (result =
VelocitySliderHandle::HitTest(event, rect, pProject, mpTrack)).handle)
return result;
#endif
}
}

View File

@ -0,0 +1,94 @@
/**********************************************************************
Audacity: A Digital Audio Editor
NoteTrackSliderHandles.cpp
Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#include "../../../../Audacity.h"
#include "NoteTrackSliderHandles.h"
#ifdef EXPERIMENTAL_MIDI_OUT
#include "../../../../HitTestResult.h"
#include "../../../../MixerBoard.h"
#include "../../../../Project.h"
#include "../../../../RefreshCode.h"
#include "../../../../TrackPanel.h" // for TrackInfo
#include "../../../../UndoManager.h"
#include "../../../../NoteTrack.h"
VelocitySliderHandle::VelocitySliderHandle()
: SliderHandle()
{
}
VelocitySliderHandle::~VelocitySliderHandle()
{
}
VelocitySliderHandle &VelocitySliderHandle::Instance()
{
static VelocitySliderHandle instance;
return instance;
}
NoteTrack *VelocitySliderHandle::GetTrack()
{
return static_cast<NoteTrack*>(mpTrack);
}
float VelocitySliderHandle::GetValue()
{
return GetTrack()->GetVelocity();
}
UIHandle::Result VelocitySliderHandle::SetValue
(AudacityProject *pProject, float newValue)
{
GetTrack()->SetVelocity(newValue);
MixerBoard *const pMixerBoard = pProject->GetMixerBoard();
if (pMixerBoard)
pMixerBoard->UpdateVelocity(GetTrack());
return RefreshCode::RefreshCell;
}
UIHandle::Result VelocitySliderHandle::CommitChanges
(const wxMouseEvent &, AudacityProject *pProject)
{
pProject->PushState(_("Moved velocity slider"), _("Velocity"), UndoPush::CONSOLIDATE);
return RefreshCode::RefreshCell;
}
HitTestResult VelocitySliderHandle::HitTest
(const wxMouseEvent &event, const wxRect &rect,
const AudacityProject *pProject, Track *pTrack)
{
if (!event.Button(wxMOUSE_BTN_LEFT))
return {};
wxRect sliderRect;
TrackInfo::GetVelocityRect(rect.GetTopLeft(), sliderRect);
if ( TrackInfo::HideTopItem( rect, sliderRect, kTrackInfoSliderAllowance ) )
return {};
if (sliderRect.Contains(event.m_x, event.m_y)) {
NoteTrack *const notetrack = static_cast<NoteTrack*>(pTrack);
auto slider = TrackInfo::VelocitySlider
(sliderRect, notetrack, true,
const_cast<TrackPanel*>(pProject->GetTrackPanel()));
Instance().mpSlider = slider;
Instance().mpTrack = notetrack;
return { HitPreview(), &Instance() };
}
else
return {};
}
#endif

View File

@ -0,0 +1,52 @@
/**********************************************************************
Audacity: A Digital Audio Editor
NoteTrackSliderHandles.h
Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#ifndef __AUDACITY_NOTE_TRACK_SLIDER_HANDLES__
#define __AUDACITY_NOTE_TRACK_SLIDER_HANDLES__
#include "../../../../Experimental.h"
#ifdef EXPERIMENTAL_MIDI_OUT
#include "../../../ui/SliderHandle.h"
class NoteTrack;
struct HitTestResult;
class VelocitySliderHandle final : public SliderHandle
{
VelocitySliderHandle(const VelocitySliderHandle&) = delete;
VelocitySliderHandle &operator=(const VelocitySliderHandle&) = delete;
VelocitySliderHandle();
virtual ~VelocitySliderHandle();
static VelocitySliderHandle& Instance();
NoteTrack *GetTrack();
protected:
float GetValue() override;
Result SetValue
(AudacityProject *pProject, float newValue) override;
Result CommitChanges
(const wxMouseEvent &event, AudacityProject *pProject) override;
bool StopsOnKeystroke () override { return true; }
public:
static HitTestResult HitTest
(const wxMouseEvent &event, const wxRect &rect,
const AudacityProject *pProject, Track *pTrack);
};
#endif
#endif