1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-24 00:18:07 +02:00

Implement classes SpectrumVZoomHandle, WaveformVZoomHandle

This commit is contained in:
Paul Licameli 2019-07-06 19:25:08 -04:00
parent f7dc21436d
commit d991295efb
7 changed files with 399 additions and 47 deletions

View File

@ -0,0 +1,19 @@
/**********************************************************************
Audacity: A Digital Audio Editor
SpectrumVZoomHandle.cpp
Paul Licameli split from WaveTrackVZoomHandle.cpp
**********************************************************************/
#include "SpectrumVZoomHandle.h"
SpectrumVZoomHandle::SpectrumVZoomHandle
(const std::shared_ptr<WaveTrack> &pTrack, const wxRect &rect, int y)
: mpTrack{ pTrack } , mZoomStart(y), mZoomEnd(y), mRect(rect)
{
}
SpectrumVZoomHandle::~SpectrumVZoomHandle() = default;

View File

@ -0,0 +1,73 @@
/**********************************************************************
Audacity: A Digital Audio Editor
SpectrumVZoomHandle.h
Paul Licameli split from WaveTrackVZoomHandle.h
**********************************************************************/
#ifndef __AUDACITY_SPECTRUM_VZOOM_HANDLE__
#define __AUDACITY_SPECTRUM_VZOOM_HANDLE__
#include "../../../../UIHandle.h" // to inherit
#include "WaveTrackViewConstants.h"
class WaveTrack;
class SpectrumVZoomHandle final : public UIHandle
{
SpectrumVZoomHandle(const SpectrumVZoomHandle&);
public:
explicit SpectrumVZoomHandle
(const std::shared_ptr<WaveTrack> &pTrack, const wxRect &rect, int y);
SpectrumVZoomHandle &operator=(const SpectrumVZoomHandle&) = default;
static void DoZoom(
AudacityProject *pProject, WaveTrack *pTrack,
WaveTrackViewConstants::ZoomActions ZoomKind,
const wxRect &rect, int zoomStart, int zoomEnd,
bool fixedMousePoint);
~SpectrumVZoomHandle() override;
std::shared_ptr<WaveTrack> GetTrack() const { return mpTrack.lock(); }
void Enter(bool forward) override;
Result Click
(const TrackPanelMouseEvent &event, AudacityProject *pProject) override;
Result Drag
(const TrackPanelMouseEvent &event, AudacityProject *pProject) override;
HitTestPreview Preview
(const TrackPanelMouseState &state, const AudacityProject *pProject)
override;
Result Release
(const TrackPanelMouseEvent &event, AudacityProject *pProject,
wxWindow *pParent) override;
Result Cancel(AudacityProject *pProject) override;
private:
// TrackPanelDrawable implementation
void Draw(
TrackPanelDrawingContext &context,
const wxRect &rect, unsigned iPass ) override;
wxRect DrawingArea(
const wxRect &rect, const wxRect &panelRect, unsigned iPass ) override;
std::weak_ptr<WaveTrack> mpTrack;
int mZoomStart{}, mZoomEnd{};
wxRect mRect{};
};
#endif

View File

@ -13,6 +13,9 @@ Paul Licameli split from TrackPanel.cpp
#include "WaveTrackVZoomHandle.h" #include "WaveTrackVZoomHandle.h"
#include "SpectrumVZoomHandle.h"
#include "WaveformVZoomHandle.h"
#include "../../../../Experimental.h" #include "../../../../Experimental.h"
#include "../../../../HitTestResult.h" #include "../../../../HitTestResult.h"
@ -126,8 +129,8 @@ unsigned WaveTrackVRulerControls::HandleWheelRotation
else if (event.CmdDown() && !event.ShiftDown()) { else if (event.CmdDown() && !event.ShiftDown()) {
const int yy = event.m_y; const int yy = event.m_y;
auto doZoom = (wt->GetDisplay() == Spectrum) auto doZoom = (wt->GetDisplay() == Spectrum)
? WaveTrackVZoomHandle::DoSpectrumZoom ? SpectrumVZoomHandle::DoZoom
: WaveTrackVZoomHandle::DoWaveformZoom; : WaveformVZoomHandle::DoZoom;
doZoom( doZoom(
pProject, wt, pProject, wt,
(steps < 0) (steps < 0)

View File

@ -11,6 +11,9 @@ Paul Licameli split from TrackPanel.cpp
#include "../../../../Audacity.h" #include "../../../../Audacity.h"
#include "WaveTrackVZoomHandle.h" #include "WaveTrackVZoomHandle.h"
#include "SpectrumVZoomHandle.h"
#include "WaveformVZoomHandle.h"
#include "../../../../Experimental.h" #include "../../../../Experimental.h"
#include "../../../ui/TrackVRulerControls.h" #include "../../../ui/TrackVRulerControls.h"
@ -42,7 +45,9 @@ public:
WaveTrackVZoomHandle::DoZoomFunction doZoom; WaveTrackVZoomHandle::DoZoomFunction doZoom;
}; };
bool IsDragZooming(int zoomStart, int zoomEnd) }
bool WaveTrackVZoomHandle::IsDragZooming(int zoomStart, int zoomEnd)
{ {
const int DragThreshold = 3;// Anything over 3 pixels is a drag, else a click. const int DragThreshold = 3;// Anything over 3 pixels is a drag, else a click.
bool bVZoom; bool bVZoom;
@ -50,14 +55,26 @@ bool IsDragZooming(int zoomStart, int zoomEnd)
return bVZoom && (abs(zoomEnd - zoomStart) > DragThreshold); return bVZoom && (abs(zoomEnd - zoomStart) > DragThreshold);
} }
}
WaveTrackVZoomHandle::WaveTrackVZoomHandle WaveTrackVZoomHandle::WaveTrackVZoomHandle
(const std::shared_ptr<WaveTrack> &pTrack, const wxRect &rect, int y) (const std::shared_ptr<WaveTrack> &pTrack, const wxRect &rect, int y)
: mpTrack{ pTrack } , mZoomStart(y), mZoomEnd(y), mRect(rect) : mpTrack{ pTrack } , mZoomStart(y), mZoomEnd(y), mRect(rect)
{ {
} }
void SpectrumVZoomHandle::Enter(bool)
{
#ifdef EXPERIMENTAL_TRACK_PANEL_HIGHLIGHTING
mChangeHighlight = RefreshCode::RefreshCell;
#endif
}
void WaveformVZoomHandle::Enter(bool)
{
#ifdef EXPERIMENTAL_TRACK_PANEL_HIGHLIGHTING
mChangeHighlight = RefreshCode::RefreshCell;
#endif
}
void WaveTrackVZoomHandle::Enter(bool) void WaveTrackVZoomHandle::Enter(bool)
{ {
#ifdef EXPERIMENTAL_TRACK_PANEL_HIGHLIGHTING #ifdef EXPERIMENTAL_TRACK_PANEL_HIGHLIGHTING
@ -68,7 +85,7 @@ void WaveTrackVZoomHandle::Enter(bool)
// ZoomKind says how to zoom. // ZoomKind says how to zoom.
// If ZoomStart and ZoomEnd are not equal, this may override // If ZoomStart and ZoomEnd are not equal, this may override
// the zoomKind and cause a drag-zoom-in. // the zoomKind and cause a drag-zoom-in.
void WaveTrackVZoomHandle::DoSpectrumZoom( void SpectrumVZoomHandle::DoZoom(
AudacityProject *pProject, AudacityProject *pProject,
WaveTrack *pTrack, WaveTrack *pTrack,
WaveTrackViewConstants::ZoomActions ZoomKind, WaveTrackViewConstants::ZoomActions ZoomKind,
@ -95,7 +112,7 @@ void WaveTrackVZoomHandle::DoSpectrumZoom(
(pTrack->GetSpectrogramSettings().scaleType == SpectrogramSettings::stLinear); (pTrack->GetSpectrogramSettings().scaleType == SpectrogramSettings::stLinear);
bool bDragZoom = IsDragZooming(zoomStart, zoomEnd); bool bDragZoom = WaveTrackVZoomHandle::IsDragZooming(zoomStart, zoomEnd);
// Add 100 if spectral to separate the kinds of zoom. // Add 100 if spectral to separate the kinds of zoom.
const int kSpectral = 100; const int kSpectral = 100;
@ -228,7 +245,7 @@ void WaveTrackVZoomHandle::DoSpectrumZoom(
// ZoomKind says how to zoom. // ZoomKind says how to zoom.
// If ZoomStart and ZoomEnd are not equal, this may override // If ZoomStart and ZoomEnd are not equal, this may override
// the zoomKind and cause a drag-zoom-in. // the zoomKind and cause a drag-zoom-in.
void WaveTrackVZoomHandle::DoWaveformZoom( void WaveformVZoomHandle::DoZoom(
AudacityProject *pProject, AudacityProject *pProject,
WaveTrack *pTrack, WaveTrack *pTrack,
WaveTrackViewConstants::ZoomActions ZoomKind, WaveTrackViewConstants::ZoomActions ZoomKind,
@ -252,7 +269,7 @@ void WaveTrackVZoomHandle::DoWaveformZoom(
const SpectrogramSettings &specSettings = pTrack->GetSpectrogramSettings(); const SpectrogramSettings &specSettings = pTrack->GetSpectrogramSettings();
NumberScale scale; NumberScale scale;
bool bDragZoom = IsDragZooming(zoomStart, zoomEnd); bool bDragZoom = WaveTrackVZoomHandle::IsDragZooming(zoomStart, zoomEnd);
// Add 100 if spectral to separate the kinds of zoom. // Add 100 if spectral to separate the kinds of zoom.
// Possibly override the zoom kind. // Possibly override the zoom kind.
@ -469,7 +486,7 @@ class WaveformVRulerMenuTable : public WaveTrackVRulerMenuTable
DECLARE_POPUP_MENU(WaveformVRulerMenuTable); DECLARE_POPUP_MENU(WaveformVRulerMenuTable);
public: public:
static WaveformVRulerMenuTable &Instance(); static PopupMenuTable &Instance();
private: private:
virtual void InitMenu(Menu *pMenu, void *pUserData) override; virtual void InitMenu(Menu *pMenu, void *pUserData) override;
@ -477,7 +494,7 @@ private:
void OnWaveformScaleType(wxCommandEvent &evt); void OnWaveformScaleType(wxCommandEvent &evt);
}; };
WaveformVRulerMenuTable &WaveformVRulerMenuTable::Instance() PopupMenuTable &WaveformVRulerMenuTable::Instance()
{ {
static WaveformVRulerMenuTable instance; static WaveformVRulerMenuTable instance;
return instance; return instance;
@ -556,7 +573,7 @@ class SpectrumVRulerMenuTable : public WaveTrackVRulerMenuTable
DECLARE_POPUP_MENU(SpectrumVRulerMenuTable); DECLARE_POPUP_MENU(SpectrumVRulerMenuTable);
public: public:
static SpectrumVRulerMenuTable &Instance(); static PopupMenuTable &Instance();
private: private:
void InitMenu(Menu *pMenu, void *pUserData) override; void InitMenu(Menu *pMenu, void *pUserData) override;
@ -564,7 +581,7 @@ private:
void OnSpectrumScaleType(wxCommandEvent &evt); void OnSpectrumScaleType(wxCommandEvent &evt);
}; };
SpectrumVRulerMenuTable &SpectrumVRulerMenuTable::Instance() PopupMenuTable &SpectrumVRulerMenuTable::Instance()
{ {
static SpectrumVRulerMenuTable instance; static SpectrumVRulerMenuTable instance;
return instance; return instance;
@ -645,12 +662,44 @@ WaveTrackVZoomHandle::~WaveTrackVZoomHandle()
{ {
} }
UIHandle::Result SpectrumVZoomHandle::Click
(const TrackPanelMouseEvent &, AudacityProject *)
{
return RefreshCode::RefreshNone;
}
UIHandle::Result WaveformVZoomHandle::Click
(const TrackPanelMouseEvent &, AudacityProject *)
{
return RefreshCode::RefreshNone;
}
UIHandle::Result WaveTrackVZoomHandle::Click UIHandle::Result WaveTrackVZoomHandle::Click
(const TrackPanelMouseEvent &, AudacityProject *) (const TrackPanelMouseEvent &, AudacityProject *)
{ {
return RefreshCode::RefreshNone; return RefreshCode::RefreshNone;
} }
UIHandle::Result SpectrumVZoomHandle::Drag
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
{
using namespace RefreshCode;
auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack);
if (!pTrack)
return Cancelled;
return WaveTrackVZoomHandle::DoDrag( evt, pProject, mZoomStart, mZoomEnd );
}
UIHandle::Result WaveformVZoomHandle::Drag
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
{
using namespace RefreshCode;
auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack);
if (!pTrack)
return Cancelled;
return WaveTrackVZoomHandle::DoDrag( evt, pProject, mZoomStart, mZoomEnd );
}
UIHandle::Result WaveTrackVZoomHandle::Drag UIHandle::Result WaveTrackVZoomHandle::Drag
(const TrackPanelMouseEvent &evt, AudacityProject *pProject) (const TrackPanelMouseEvent &evt, AudacityProject *pProject)
{ {
@ -658,28 +707,88 @@ UIHandle::Result WaveTrackVZoomHandle::Drag
auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack); auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack);
if (!pTrack) if (!pTrack)
return Cancelled; return Cancelled;
return DoDrag( evt, pProject, mZoomStart, mZoomEnd );
}
UIHandle::Result WaveTrackVZoomHandle::DoDrag(
const TrackPanelMouseEvent &evt, AudacityProject *pProject,
const int zoomStart, int &zoomEnd)
{
using namespace RefreshCode;
const wxMouseEvent &event = evt.event; const wxMouseEvent &event = evt.event;
if ( event.RightIsDown() ) if ( event.RightIsDown() )
return RefreshNone; return RefreshNone;
mZoomEnd = event.m_y; zoomEnd = event.m_y;
if (IsDragZooming(mZoomStart, mZoomEnd)) if (IsDragZooming( zoomStart, zoomEnd ))
return RefreshAll; return RefreshAll;
return RefreshNone; return RefreshNone;
} }
HitTestPreview SpectrumVZoomHandle::Preview
(const TrackPanelMouseState &st, const AudacityProject *)
{
return WaveTrackVZoomHandle::HitPreview(st.state);
}
HitTestPreview WaveformVZoomHandle::Preview
(const TrackPanelMouseState &st, const AudacityProject *)
{
return WaveTrackVZoomHandle::HitPreview(st.state);
}
HitTestPreview WaveTrackVZoomHandle::Preview HitTestPreview WaveTrackVZoomHandle::Preview
(const TrackPanelMouseState &st, const AudacityProject *) (const TrackPanelMouseState &st, const AudacityProject *)
{ {
return HitPreview(st.state); return HitPreview(st.state);
} }
UIHandle::Result SpectrumVZoomHandle::Release
(const TrackPanelMouseEvent &evt, AudacityProject *pProject,
wxWindow *pParent)
{
auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack);
return WaveTrackVZoomHandle::DoRelease(
evt, pProject, pParent, pTrack.get(), mRect,
DoZoom, SpectrumVRulerMenuTable::Instance(),
mZoomStart, mZoomEnd );
}
UIHandle::Result WaveformVZoomHandle::Release
(const TrackPanelMouseEvent &evt, AudacityProject *pProject,
wxWindow *pParent)
{
auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack);
return WaveTrackVZoomHandle::DoRelease(
evt, pProject, pParent, pTrack.get(), mRect,
DoZoom, WaveformVRulerMenuTable::Instance(),
mZoomStart, mZoomEnd );
}
UIHandle::Result WaveTrackVZoomHandle::Release UIHandle::Result WaveTrackVZoomHandle::Release
(const TrackPanelMouseEvent &evt, AudacityProject *pProject, (const TrackPanelMouseEvent &evt, AudacityProject *pProject,
wxWindow *pParent) wxWindow *pParent)
{ {
using namespace RefreshCode;
auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack); auto pTrack = TrackList::Get( *pProject ).Lock(mpTrack);
auto doZoom = (pTrack->GetDisplay() == WaveTrackViewConstants::Spectrum)
? SpectrumVZoomHandle::DoZoom
: WaveformVZoomHandle::DoZoom;
return DoRelease(
evt, pProject, pParent, pTrack.get(), mRect,
doZoom,
(pTrack->GetDisplay() == WaveTrackViewConstants::Spectrum)
? SpectrumVRulerMenuTable::Instance()
: WaveformVRulerMenuTable::Instance(),
mZoomStart, mZoomEnd );
}
UIHandle::Result WaveTrackVZoomHandle::DoRelease(
const TrackPanelMouseEvent &evt, AudacityProject *pProject,
wxWindow *pParent, WaveTrack *pTrack, const wxRect &rect,
DoZoomFunction doZoom, PopupMenuTable &table,
int zoomStart, int zoomEnd )
{
using namespace RefreshCode;
if (!pTrack) if (!pTrack)
return RefreshNone; return RefreshNone;
@ -698,18 +807,10 @@ UIHandle::Result WaveTrackVZoomHandle::Release
!(event.ShiftDown() || event.CmdDown())) !(event.ShiftDown() || event.CmdDown()))
{ {
InitMenuData data { InitMenuData data {
pTrack.get(), mRect, RefreshCode::RefreshNone, event.m_y, pTrack, rect, RefreshCode::RefreshNone, event.m_y, doZoom };
(pTrack->GetDisplay() == Spectrum)
? WaveTrackVZoomHandle::DoSpectrumZoom
: WaveTrackVZoomHandle::DoWaveformZoom
};
PopupMenuTable *const pTable =
(pTrack->GetDisplay() == Spectrum)
? (PopupMenuTable *) &SpectrumVRulerMenuTable::Instance()
: (PopupMenuTable *) &WaveformVRulerMenuTable::Instance();
std::unique_ptr<PopupMenuTable::Menu> std::unique_ptr<PopupMenuTable::Menu>
pMenu(PopupMenuTable::BuildMenu(pParent, pTable, &data)); pMenu(PopupMenuTable::BuildMenu(pParent, &table, &data));
// Accelerators only if zooming enabled. // Accelerators only if zooming enabled.
if( !bVZoom ) if( !bVZoom )
@ -739,21 +840,32 @@ UIHandle::Result WaveTrackVZoomHandle::Release
// F | - | In // F | - | In
if( bVZoom ) { if( bVZoom ) {
if( shiftDown ) if( shiftDown )
mZoomStart = mZoomEnd; zoomStart = zoomEnd;
auto doZoom = (pTrack->GetDisplay() == Spectrum) doZoom(pProject, pTrack,
? WaveTrackVZoomHandle::DoSpectrumZoom
: WaveTrackVZoomHandle::DoWaveformZoom;
doZoom(pProject, pTrack.get(),
shiftDown shiftDown
? (rightUp ? kZoom1to1 : kZoomOut) ? (rightUp ? kZoom1to1 : kZoomOut)
: kZoomIn, : kZoomIn,
mRect, mZoomStart, mZoomEnd, !shiftDown); rect, zoomStart, zoomEnd, !shiftDown);
} }
} }
return UpdateVRuler | RefreshAll; return UpdateVRuler | RefreshAll;
} }
UIHandle::Result SpectrumVZoomHandle::Cancel(AudacityProject*)
{
// Cancel is implemented! And there is no initial state to restore,
// so just return a code.
return RefreshCode::RefreshAll;
}
UIHandle::Result WaveformVZoomHandle::Cancel(AudacityProject*)
{
// Cancel is implemented! And there is no initial state to restore,
// so just return a code.
return RefreshCode::RefreshAll;
}
UIHandle::Result WaveTrackVZoomHandle::Cancel(AudacityProject*) UIHandle::Result WaveTrackVZoomHandle::Cancel(AudacityProject*)
{ {
// Cancel is implemented! And there is no initial state to restore, // Cancel is implemented! And there is no initial state to restore,
@ -761,22 +873,66 @@ UIHandle::Result WaveTrackVZoomHandle::Cancel(AudacityProject*)
return RefreshCode::RefreshAll; return RefreshCode::RefreshAll;
} }
void SpectrumVZoomHandle::Draw(
TrackPanelDrawingContext &context,
const wxRect &rect, unsigned iPass )
{
if (!mpTrack.lock()) //? TrackList::Lock()
return;
return WaveTrackVZoomHandle::DoDraw(
context, rect, iPass, mZoomStart, mZoomEnd );
}
void WaveformVZoomHandle::Draw(
TrackPanelDrawingContext &context,
const wxRect &rect, unsigned iPass )
{
if (!mpTrack.lock()) //? TrackList::Lock()
return;
return WaveTrackVZoomHandle::DoDraw(
context, rect, iPass, mZoomStart, mZoomEnd );
}
void WaveTrackVZoomHandle::Draw( void WaveTrackVZoomHandle::Draw(
TrackPanelDrawingContext &context, TrackPanelDrawingContext &context,
const wxRect &rect, unsigned iPass ) const wxRect &rect, unsigned iPass )
{
if (!mpTrack.lock()) //? TrackList::Lock()
return;
return DoDraw( context, rect, iPass, mZoomStart, mZoomEnd );
}
void WaveTrackVZoomHandle::DoDraw(
TrackPanelDrawingContext &context,
const wxRect &rect, unsigned iPass, const int zoomStart, const int zoomEnd )
{ {
if ( iPass == TrackArtist::PassZooming ) { if ( iPass == TrackArtist::PassZooming ) {
if (!mpTrack.lock()) //? TrackList::Lock() if ( IsDragZooming( zoomStart, zoomEnd ) )
return;
if ( IsDragZooming( mZoomStart, mZoomEnd ) )
TrackVRulerControls::DrawZooming TrackVRulerControls::DrawZooming
( context, rect, mZoomStart, mZoomEnd ); ( context, rect, zoomStart, zoomEnd );
} }
} }
wxRect SpectrumVZoomHandle::DrawingArea(
const wxRect &rect, const wxRect &panelRect, unsigned iPass )
{
return WaveTrackVZoomHandle::DoDrawingArea( rect, panelRect, iPass );
}
wxRect WaveformVZoomHandle::DrawingArea(
const wxRect &rect, const wxRect &panelRect, unsigned iPass )
{
return WaveTrackVZoomHandle::DoDrawingArea( rect, panelRect, iPass );
}
wxRect WaveTrackVZoomHandle::DrawingArea( wxRect WaveTrackVZoomHandle::DrawingArea(
const wxRect &rect, const wxRect &panelRect, unsigned iPass ) const wxRect &rect, const wxRect &panelRect, unsigned iPass )
{
return DoDrawingArea( rect, panelRect, iPass );
}
wxRect WaveTrackVZoomHandle::DoDrawingArea(
const wxRect &rect, const wxRect &panelRect, unsigned iPass )
{ {
if ( iPass == TrackArtist::PassZooming ) if ( iPass == TrackArtist::PassZooming )
return TrackVRulerControls::ZoomingArea( rect, panelRect ); return TrackVRulerControls::ZoomingArea( rect, panelRect );

View File

@ -12,6 +12,7 @@ Paul Licameli split from TrackPanel.cpp
#define __AUDACITY_WAVE_TRACK_VZOOM_HANDLE__ #define __AUDACITY_WAVE_TRACK_VZOOM_HANDLE__
class wxMouseState; class wxMouseState;
class PopupMenuTable;
class WaveTrack; class WaveTrack;
#include "WaveTrackViewConstants.h" #include "WaveTrackViewConstants.h"
#include "../../../../UIHandle.h" #include "../../../../UIHandle.h"
@ -28,21 +29,13 @@ public:
WaveTrackVZoomHandle &operator=(const WaveTrackVZoomHandle&) = default; WaveTrackVZoomHandle &operator=(const WaveTrackVZoomHandle&) = default;
static bool IsDragZooming(int zoomStart, int zoomEnd);
using DoZoomFunction = void (*)( AudacityProject *pProject, using DoZoomFunction = void (*)( AudacityProject *pProject,
WaveTrack *pTrack, WaveTrack *pTrack,
WaveTrackViewConstants::ZoomActions ZoomKind, WaveTrackViewConstants::ZoomActions ZoomKind,
const wxRect &rect, int zoomStart, int zoomEnd, const wxRect &rect, int zoomStart, int zoomEnd,
bool fixedMousePoint); bool fixedMousePoint);
static void DoSpectrumZoom( AudacityProject *pProject,
WaveTrack *pTrack,
WaveTrackViewConstants::ZoomActions ZoomKind,
const wxRect &rect, int zoomStart, int zoomEnd,
bool fixedMousePoint);
static void DoWaveformZoom( AudacityProject *pProject,
WaveTrack *pTrack,
WaveTrackViewConstants::ZoomActions ZoomKind,
const wxRect &rect, int zoomStart, int zoomEnd,
bool fixedMousePoint);
virtual ~WaveTrackVZoomHandle(); virtual ~WaveTrackVZoomHandle();
@ -55,6 +48,9 @@ public:
Result Drag Result Drag
(const TrackPanelMouseEvent &event, AudacityProject *pProject) override; (const TrackPanelMouseEvent &event, AudacityProject *pProject) override;
static Result DoDrag(
const TrackPanelMouseEvent &event, AudacityProject *pProject,
int zoomStart, int &zoomEnd );
HitTestPreview Preview HitTestPreview Preview
(const TrackPanelMouseState &state, const AudacityProject *pProject) (const TrackPanelMouseState &state, const AudacityProject *pProject)
@ -63,6 +59,11 @@ public:
Result Release Result Release
(const TrackPanelMouseEvent &event, AudacityProject *pProject, (const TrackPanelMouseEvent &event, AudacityProject *pProject,
wxWindow *pParent) override; wxWindow *pParent) override;
static Result DoRelease(
const TrackPanelMouseEvent &event, AudacityProject *pProject,
wxWindow *pParent, WaveTrack *pTrack, const wxRect &mRect,
DoZoomFunction doZoom, PopupMenuTable &table,
int zoomStart, int zoomEnd );
Result Cancel(AudacityProject *pProject) override; Result Cancel(AudacityProject *pProject) override;
@ -72,14 +73,22 @@ private:
void Draw( void Draw(
TrackPanelDrawingContext &context, TrackPanelDrawingContext &context,
const wxRect &rect, unsigned iPass ) override; const wxRect &rect, unsigned iPass ) override;
static void DoDraw(
TrackPanelDrawingContext &context,
const wxRect &rect, unsigned iPass, int zoomStart, int zoomEnd );
wxRect DrawingArea( wxRect DrawingArea(
const wxRect &rect, const wxRect &panelRect, unsigned iPass ) override; const wxRect &rect, const wxRect &panelRect, unsigned iPass ) override;
static wxRect DoDrawingArea(
const wxRect &rect, const wxRect &panelRect, unsigned iPass );
std::weak_ptr<WaveTrack> mpTrack; std::weak_ptr<WaveTrack> mpTrack;
int mZoomStart{}, mZoomEnd{}; int mZoomStart{}, mZoomEnd{};
wxRect mRect{}; wxRect mRect{};
friend class SpectrumVZoomHandle;
friend class WaveformVZoomHandle;
}; };
#endif #endif

View File

@ -0,0 +1,19 @@
/**********************************************************************
Audacity: A Digital Audio Editor
WaveformVZoomHandle.cpp
Paul Licameli split from WaveTrackVZoomHandle.cpp
**********************************************************************/
#include "WaveformVZoomHandle.h"
WaveformVZoomHandle::WaveformVZoomHandle(
const std::shared_ptr<WaveTrack> &pTrack, const wxRect &rect, int y)
: mpTrack{ pTrack } , mZoomStart(y), mZoomEnd(y), mRect(rect)
{
}
WaveformVZoomHandle::~WaveformVZoomHandle() = default;

View File

@ -0,0 +1,73 @@
/**********************************************************************
Audacity: A Digital Audio Editor
WaveformVZoomHandle.h
Paul Licameli split from WaveTrackVZoomHandle.h
**********************************************************************/
#ifndef __AUDACITY_WAVEFORM_VZOOM_HANDLE__
#define __AUDACITY_WAVEFORM_VZOOM_HANDLE__
#include "../../../../UIHandle.h" // to inherit
#include "WaveTrackViewConstants.h"
class WaveTrack;
class WaveformVZoomHandle final : public UIHandle
{
WaveformVZoomHandle(const WaveformVZoomHandle&);
public:
explicit WaveformVZoomHandle
(const std::shared_ptr<WaveTrack> &pTrack, const wxRect &rect, int y);
WaveformVZoomHandle &operator=(const WaveformVZoomHandle&) = default;
static void DoZoom(
AudacityProject *pProject, WaveTrack *pTrack,
WaveTrackViewConstants::ZoomActions ZoomKind,
const wxRect &rect, int zoomStart, int zoomEnd,
bool fixedMousePoint);
~WaveformVZoomHandle() override;
std::shared_ptr<WaveTrack> GetTrack() const { return mpTrack.lock(); }
void Enter(bool forward) override;
Result Click
(const TrackPanelMouseEvent &event, AudacityProject *pProject) override;
Result Drag
(const TrackPanelMouseEvent &event, AudacityProject *pProject) override;
HitTestPreview Preview
(const TrackPanelMouseState &state, const AudacityProject *pProject)
override;
Result Release
(const TrackPanelMouseEvent &event, AudacityProject *pProject,
wxWindow *pParent) override;
Result Cancel(AudacityProject *pProject) override;
private:
// TrackPanelDrawable implementation
void Draw(
TrackPanelDrawingContext &context,
const wxRect &rect, unsigned iPass ) override;
wxRect DrawingArea(
const wxRect &rect, const wxRect &panelRect, unsigned iPass ) override;
std::weak_ptr<WaveTrack> mpTrack;
int mZoomStart{}, mZoomEnd{};
wxRect mRect{};
};
#endif