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:
parent
f7dc21436d
commit
d991295efb
@ -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;
|
@ -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
|
@ -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)
|
||||||
|
@ -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 );
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user