mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-14 17:14:07 +01:00
TrackPanel still draws Gain and Pan, but no longer handles clicks on them...
... also implemented ESC key for those drags
This commit is contained in:
committed by
Paul Licameli
parent
5ee73f944d
commit
a569476e79
@@ -11,6 +11,7 @@ Paul Licameli split from TrackPanel.cpp
|
||||
#include "../../../../Audacity.h"
|
||||
#include "WaveTrackControls.h"
|
||||
#include "../../ui/PlayableTrackButtonHandles.h"
|
||||
#include "WaveTrackSliderHandles.h"
|
||||
|
||||
#include "../../../../HitTestResult.h"
|
||||
#include "../../../../Track.h"
|
||||
@@ -51,6 +52,14 @@ HitTestResult WaveTrackControls::HitTest
|
||||
(result = SoloButtonHandle::HitTest
|
||||
(event, rect, pProject, track)).handle)
|
||||
return result;
|
||||
|
||||
if (NULL != (result =
|
||||
GainSliderHandle::HitTest(event, rect, pProject, mpTrack)).handle)
|
||||
return result;
|
||||
|
||||
if (NULL != (result =
|
||||
PanSliderHandle::HitTest(event, rect, pProject, mpTrack)).handle)
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
190
src/tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.cpp
Normal file
190
src/tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.cpp
Normal file
@@ -0,0 +1,190 @@
|
||||
#include "WaveTrackSliderHandles.h"
|
||||
|
||||
/**********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
WaveTrackSliderHandles.cpp
|
||||
|
||||
Paul Licameli split from TrackPanel.cpp
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "../../../../Audacity.h"
|
||||
#include "WaveTrackSliderHandles.h"
|
||||
|
||||
#include "../../../../HitTestResult.h"
|
||||
#include "../../../../MixerBoard.h"
|
||||
#include "../../../../Project.h"
|
||||
#include "../../../../RefreshCode.h"
|
||||
#include "../../../../TrackPanel.h"
|
||||
#include "../../../../UndoManager.h"
|
||||
#include "../../../../WaveTrack.h"
|
||||
|
||||
GainSliderHandle::GainSliderHandle()
|
||||
: SliderHandle()
|
||||
{
|
||||
}
|
||||
|
||||
GainSliderHandle::~GainSliderHandle()
|
||||
{
|
||||
}
|
||||
|
||||
GainSliderHandle &GainSliderHandle::Instance()
|
||||
{
|
||||
static GainSliderHandle instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
WaveTrack *GainSliderHandle::GetTrack()
|
||||
{
|
||||
return static_cast<WaveTrack*>(mpTrack);
|
||||
}
|
||||
|
||||
float GainSliderHandle::GetValue()
|
||||
{
|
||||
return static_cast<WaveTrack*>(mpTrack)->GetGain();
|
||||
}
|
||||
|
||||
UIHandle::Result GainSliderHandle::SetValue
|
||||
(AudacityProject *pProject, float newValue)
|
||||
{
|
||||
GetTrack()->SetGain(newValue);
|
||||
|
||||
// Assume linked track is wave or null
|
||||
const auto link = static_cast<WaveTrack*>(mpTrack->GetLink());
|
||||
if (link)
|
||||
link->SetGain(newValue);
|
||||
|
||||
MixerBoard *const pMixerBoard = pProject->GetMixerBoard();
|
||||
if (pMixerBoard)
|
||||
pMixerBoard->UpdateGain(GetTrack());
|
||||
|
||||
return RefreshCode::RefreshNone;
|
||||
}
|
||||
|
||||
UIHandle::Result GainSliderHandle::CommitChanges
|
||||
(const wxMouseEvent &, AudacityProject *pProject)
|
||||
{
|
||||
pProject->PushState(_("Moved gain slider"), _("Gain"), UndoPush::CONSOLIDATE);
|
||||
return RefreshCode::RefreshCell;
|
||||
}
|
||||
|
||||
HitTestResult GainSliderHandle::HitTest
|
||||
(const wxMouseEvent &event, const wxRect &rect,
|
||||
const AudacityProject *pProject, Track *pTrack)
|
||||
{
|
||||
if (!event.Button(wxMOUSE_BTN_LEFT))
|
||||
return {};
|
||||
|
||||
wxRect sliderRect;
|
||||
TrackInfo::GetGainRect(rect.GetTopLeft(), sliderRect);
|
||||
if ( TrackInfo::HideTopItem( rect, sliderRect, kTrackInfoSliderAllowance ) )
|
||||
return {};
|
||||
if (sliderRect.Contains(event.m_x, event.m_y)) {
|
||||
WaveTrack *const wavetrack = static_cast<WaveTrack*>(pTrack);
|
||||
wxRect sliderRect;
|
||||
TrackInfo::GetGainRect(rect.GetTopLeft(), sliderRect);
|
||||
auto slider = TrackInfo::GainSlider
|
||||
(sliderRect, wavetrack, true,
|
||||
const_cast<TrackPanel*>(pProject->GetTrackPanel()));
|
||||
Instance().mpSlider = slider;
|
||||
Instance().mpTrack = wavetrack;
|
||||
return {
|
||||
HitPreview(),
|
||||
&Instance()
|
||||
};
|
||||
}
|
||||
else
|
||||
return {};
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
PanSliderHandle::PanSliderHandle()
|
||||
: SliderHandle()
|
||||
{
|
||||
}
|
||||
|
||||
PanSliderHandle::~PanSliderHandle()
|
||||
{
|
||||
}
|
||||
|
||||
PanSliderHandle &PanSliderHandle::Instance()
|
||||
{
|
||||
static PanSliderHandle instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
WaveTrack *PanSliderHandle::GetTrack()
|
||||
{
|
||||
return static_cast<WaveTrack*>(mpTrack);
|
||||
}
|
||||
|
||||
float PanSliderHandle::GetValue()
|
||||
{
|
||||
return GetTrack()->GetPan();
|
||||
}
|
||||
|
||||
UIHandle::Result PanSliderHandle::SetValue(AudacityProject *pProject, float newValue)
|
||||
{
|
||||
#ifdef EXPERIMENTAL_OUTPUT_DISPLAY
|
||||
bool panZero = false;
|
||||
panZero = static_cast<WaveTrack*>(mpTrack)->SetPan(newValue);
|
||||
#else
|
||||
mpTrack->SetPan(newValue);
|
||||
#endif
|
||||
|
||||
// Assume linked track is wave or null
|
||||
const auto link = static_cast<WaveTrack*>(mpTrack->GetLink());
|
||||
if (link)
|
||||
link->SetPan(newValue);
|
||||
|
||||
MixerBoard *const pMixerBoard = pProject->GetMixerBoard();
|
||||
if (pMixerBoard)
|
||||
pMixerBoard->UpdatePan(GetTrack());
|
||||
|
||||
using namespace RefreshCode;
|
||||
Result result = RefreshNone;
|
||||
|
||||
#ifdef EXPERIMENTAL_OUTPUT_DISPLAY
|
||||
if(panZero)
|
||||
result |= FixScrollbars;
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
UIHandle::Result PanSliderHandle::CommitChanges
|
||||
(const wxMouseEvent &, AudacityProject *pProject)
|
||||
{
|
||||
pProject->PushState(_("Moved pan slider"), _("Pan"), UndoPush::CONSOLIDATE);
|
||||
return RefreshCode::RefreshCell;
|
||||
}
|
||||
|
||||
HitTestResult PanSliderHandle::HitTest
|
||||
(const wxMouseEvent &event, const wxRect &rect,
|
||||
const AudacityProject *pProject, Track *pTrack)
|
||||
{
|
||||
if (!event.Button(wxMOUSE_BTN_LEFT))
|
||||
return {};
|
||||
|
||||
wxRect sliderRect;
|
||||
TrackInfo::GetPanRect(rect.GetTopLeft(), sliderRect);
|
||||
if ( TrackInfo::HideTopItem( rect, sliderRect, kTrackInfoSliderAllowance ) )
|
||||
return {};
|
||||
if (sliderRect.Contains(event.m_x, event.m_y)) {
|
||||
WaveTrack *const wavetrack = static_cast<WaveTrack*>(pTrack);
|
||||
auto slider = TrackInfo::PanSlider
|
||||
(sliderRect, wavetrack, true,
|
||||
const_cast<TrackPanel*>(pProject->GetTrackPanel()));
|
||||
Instance().mpSlider = slider;
|
||||
Instance().mpTrack = wavetrack;
|
||||
return {
|
||||
HitPreview(),
|
||||
&Instance()
|
||||
};
|
||||
}
|
||||
else
|
||||
return {};
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
/**********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
WavelTrackSliderHandles.h
|
||||
|
||||
Paul Licameli split from TrackPanel.cpp
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __AUDACITY_WAVE_TRACK_SLIDER_HANDLES__
|
||||
#define __AUDACITY_WAVE_TRACK_SLIDER_HANDLES__
|
||||
|
||||
#include "../../../ui/SliderHandle.h"
|
||||
|
||||
class WaveTrack;
|
||||
|
||||
struct HitTestResult;
|
||||
|
||||
class GainSliderHandle final : public SliderHandle
|
||||
{
|
||||
GainSliderHandle(const GainSliderHandle&) = delete;
|
||||
GainSliderHandle &operator=(const GainSliderHandle&) = delete;
|
||||
|
||||
GainSliderHandle();
|
||||
virtual ~GainSliderHandle();
|
||||
static GainSliderHandle& Instance();
|
||||
|
||||
WaveTrack *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);
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class PanSliderHandle final : public SliderHandle
|
||||
{
|
||||
PanSliderHandle(const PanSliderHandle&) = delete;
|
||||
PanSliderHandle &operator=(const PanSliderHandle&) = delete;
|
||||
|
||||
PanSliderHandle();
|
||||
virtual ~PanSliderHandle();
|
||||
static PanSliderHandle& Instance();
|
||||
|
||||
WaveTrack *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
|
||||
Reference in New Issue
Block a user