15#include "../../../ui/TrackVRulerControls.h"
17#include "../../../../HitTestResult.h"
18#include "../../../../NoteTrack.h"
21#include "../../../../RefreshCode.h"
22#include "../../../../TrackArtist.h"
23#include "../../../../TrackPanelMouseEvent.h"
24#include "../../../../widgets/PopupMenuTable.h"
25#include "../../../../../images/Cursors.h"
54(
const std::shared_ptr<NoteTrack> &pTrack,
const wxRect &rect,
int y)
55 : mpTrack{ pTrack } , mZoomStart(y), mZoomEnd(y), mRect(rect)
61#ifdef EXPERIMENTAL_TRACK_PANEL_HIGHLIGHTING
68 static auto zoomInCursor =
69 ::MakeCursor(wxCURSOR_MAGNIFIER, ZoomInCursorXpm, 19, 15);
70 static auto zoomOutCursor =
71 ::MakeCursor(wxCURSOR_MAGNIFIER, ZoomOutCursorXpm, 19, 15);
72 static wxCursor arrowCursor{ wxCURSOR_ARROW };
76 bVZoom &= !state.RightIsDown();
77 const auto message =
bVZoom ?
78 XO(
"Click to vertically zoom in. Shift-click to zoom out. Drag to specify a zoom region.") :
79 XO(
"Right-click for menu.");
83 bVZoom ? (state.ShiftDown() ? &*zoomOutCursor : &*zoomInCursor) : &arrowCursor
89(std::weak_ptr<NoteTrackVZoomHandle> &holder,
90 const wxMouseState &state,
91 const std::shared_ptr<NoteTrack> &pTrack,
const wxRect &rect)
94 auto result = std::make_shared<NoteTrackVZoomHandle>(
95 pTrack, rect, state.m_y);
128 const wxMouseEvent &
event = evt.
event;
192 void OnZoom(
int iZoomCode );
222 mpData =
static_cast<InitMenuData*
>(pUserData);
228 mpData->pTrack->ZoomAllNotes();
237 mpData->pTrack->ZoomMaxExtent();
240 mpData->pTrack->ShiftNoteRange(12);
243 mpData->pTrack->ShiftNoteRange(-12);
262 MakeLabel(
XXO("Zoom Reset"),
bVZoom,
XXO("Shift-Right-Click")),
269 MakeLabel(
XXO("Zoom In"),
bVZoom,
XXO("Left-Click/Left-Drag") ),
272 MakeLabel(
XXO("Zoom Out"),
bVZoom,
XXO("Shift-Left-Click") ),
297 const wxMouseEvent &
event = evt.event;
299 const bool rightUp =
event.RightUp();
305 !(event.ShiftDown() || event.CmdDown()))
308 *pProject, pTrack.get(), mRect,
RefreshNone,
event.m_y
315 pMenu->Popup( *pParent, {
event.m_x,
event.m_y } );
327 pTrack->ZoomTo(evt.rect, mZoomStart, mZoomEnd);
329 else if (event.ShiftDown() || event.RightUp()) {
330 if (event.ShiftDown() && event.RightUp()) {
331 auto oldBotNote = pTrack->GetBottomNote();
332 auto oldTopNote = pTrack->GetTopNote();
334 pTrack->ZoomAllNotes();
335 if (pTrack->GetBottomNote() == oldBotNote &&
336 pTrack->GetTopNote() == oldTopNote) {
338 pTrack->ZoomMaxExtent();
342 pTrack->ZoomOut(evt.rect, mZoomEnd);
346 pTrack->ZoomIn(evt.rect, mZoomEnd);
349 mZoomEnd = mZoomStart = 0;
364 const wxRect &rect,
unsigned iPass )
378 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))
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...
A Track that is used for Midi notes. (Somewhat old code).
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
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)
static void DrawZooming(TrackPanelDrawingContext &context, const wxRect &rect, int zoomStart, int zoomEnd)
static wxRect ZoomingArea(const wxRect &rect, const wxRect &panelRect)
Short-lived drawing and event-handling object associated with a TrackPanelCell.
void Release(wxWindow *handler)
Namespace containing an enum 'what to do on a refresh?'.
bool IsDragZooming(int zoomStart, int zoomEnd)
AudacityProject & project