16#include "../../../ui/ChannelVRulerControls.h"
18#include "../../../../HitTestResult.h"
22#include "../../../../RefreshCode.h"
23#include "../../../../TrackArtist.h"
24#include "../../../../TrackPanelMouseEvent.h"
25#include "../../../../widgets/PopupMenuTable.h"
26#include "../../../../../images/Cursors.h"
55(
const std::shared_ptr<NoteTrack> &pTrack,
const wxRect &rect,
int y)
56 : mpTrack{ pTrack } , mZoomStart(y), mZoomEnd(y), mRect(rect)
62#ifdef EXPERIMENTAL_TRACK_PANEL_HIGHLIGHTING
69 static auto zoomInCursor =
70 ::MakeCursor(wxCURSOR_MAGNIFIER, ZoomInCursorXpm, 19, 15);
71 static auto zoomOutCursor =
72 ::MakeCursor(wxCURSOR_MAGNIFIER, ZoomOutCursorXpm, 19, 15);
73 static wxCursor arrowCursor{ wxCURSOR_ARROW };
77 bVZoom &= !state.RightIsDown();
78 const auto message =
bVZoom ?
79 XO(
"Click to vertically zoom in. Shift-click to zoom out. Drag to specify a zoom region.") :
80 XO(
"Right-click for menu.");
84 bVZoom ? (state.ShiftDown() ? &*zoomOutCursor : &*zoomInCursor) : &arrowCursor
90(std::weak_ptr<NoteTrackVZoomHandle> &holder,
91 const wxMouseState &state,
92 const std::shared_ptr<NoteTrack> &pTrack,
const wxRect &rect)
95 auto result = std::make_shared<NoteTrackVZoomHandle>(
96 pTrack, rect, state.m_y);
134 const wxMouseEvent &
event = evt.
event;
198 void OnZoom(
int iZoomCode );
228 mpData =
static_cast<InitMenuData*
>(pUserData);
235 data.ZoomAllNotes(&
mpData->pTrack->GetSeq());
244 data.ZoomMaxExtent();
247 data.ShiftNoteRange(12);
250 data.ShiftNoteRange(-12);
269 MakeLabel(
XXO("Zoom Reset"),
bVZoom,
XXO("Shift-Right-Click")),
276 MakeLabel(
XXO("Zoom In"),
bVZoom,
XXO("Left-Click/Left-Drag") ),
279 MakeLabel(
XXO("Zoom Out"),
bVZoom,
XXO("Shift-Left-Click") ),
304 const wxMouseEvent &
event = evt.event;
306 const bool rightUp =
event.RightUp();
312 !(event.ShiftDown() || event.CmdDown()))
315 *pProject, pTrack.get(), mRect,
RefreshNone,
event.m_y
322 pMenu->Popup( *pParent, {
event.m_x,
event.m_y } );
335 data.
ZoomTo(mZoomStart, mZoomEnd);
337 else if (event.ShiftDown() || event.RightUp()) {
338 if (event.ShiftDown() && event.RightUp()) {
340 auto oldBotNote = data.GetBottomNote();
341 auto oldTopNote = data.GetTopNote();
343 data.ZoomAllNotes(&pTrack->GetSeq());
344 if (data.GetBottomNote() == oldBotNote &&
345 data.GetTopNote() == oldTopNote) {
347 data.ZoomMaxExtent();
351 data.ZoomOut(mZoomEnd);
355 data.ZoomIn(mZoomEnd);
358 mZoomEnd = mZoomStart = 0;
373 const wxRect &rect,
unsigned iPass )
387 const wxRect &rect,
const wxRect &panelRect,
unsigned iPass )
std::shared_ptr< UIHandle > UIHandlePtr
XXO("&Cut/Copy/Paste Toolbar")
gPrefs Read(wxT("/GUI/VerticalZooming"), &bVZoom, false)
AppendItem("Reset", OnZoomResetID, MakeLabel(XXO("Zoom Reset"), bVZoom, XXO("Shift-Right-Click")), POPUP_MENU_FN(OnZoomReset))
audacity::BasicSettings * gPrefs
std::unique_ptr< wxCursor > MakeCursor(int WXUNUSED(CursorId), const char *const pXpm[36], int HotX, int HotY)
const int kCaptureLostEventId
std::shared_ptr< Subclass > AssignUIHandlePtr(std::weak_ptr< Subclass > &holder, const std::shared_ptr< Subclass > &pNew)
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
static wxRect ZoomingArea(const wxRect &rect, const wxRect &panelRect)
static void DrawZooming(TrackPanelDrawingContext &context, const wxRect &rect, int zoomStart, int zoomEnd)
Temporary data used to display a note track.
void ZoomTo(int start, int end)
A Track that is used for Midi notes. (Somewhat old code).
static NoteTrackRange & Get(const NoteTrack &track)
Allow mutative access to attached data of a const track.
Result Drag(const TrackPanelMouseEvent &event, AudacityProject *pProject) override
Result Click(const TrackPanelMouseEvent &event, AudacityProject *pProject) override
NoteTrackVZoomHandle(const NoteTrackVZoomHandle &)
std::weak_ptr< NoteTrack > mpTrack
wxRect DrawingArea(TrackPanelDrawingContext &, const wxRect &rect, const wxRect &panelRect, unsigned iPass) override
static HitTestPreview HitPreview(const wxMouseState &state)
virtual ~NoteTrackVZoomHandle()
Result Cancel(AudacityProject *pProject) override
bool HandlesRightClick() override
Whether the handle has any special right-button handling.
void Draw(TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass) override
void Enter(bool forward, AudacityProject *) override
static UIHandlePtr HitTest(std::weak_ptr< NoteTrackVZoomHandle > &holder, const wxMouseState &state, const std::shared_ptr< NoteTrack > &pTrack, const wxRect &rect)
HitTestPreview Preview(const TrackPanelMouseState &state, AudacityProject *pProject) override
std::shared_ptr< const Channel > FindChannel() const override
A listener notified of changes in preferences.
void ModifyState(bool bWantsAutoSave)
static ProjectHistory & Get(AudacityProject &project)
std::shared_ptr< Subclass > Lock(const std::weak_ptr< Subclass > &wTrack)
static TrackList & Get(AudacityProject &project)
Short-lived drawing and event-handling object associated with a TrackPanelCell.
virtual bool Read(const wxString &key, bool *value) const =0
void Release(wxWindow *handler)
Namespace containing an enum 'what to do on a refresh?'.
bool IsDragZooming(int zoomStart, int zoomEnd)
AudacityProject & project