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:
parent
a569476e79
commit
7cab380192
@ -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 */,
|
||||
|
@ -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 \
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user