mirror of
https://github.com/cookiengineer/audacity
synced 2025-12-10 14:46:24 +01:00
Move class CellularPanel into its own files
This commit is contained in:
133
src/TrackPanel.h
133
src/TrackPanel.h
@@ -22,7 +22,7 @@
|
||||
|
||||
#include "SelectedRegion.h"
|
||||
|
||||
#include "widgets/OverlayPanel.h"
|
||||
#include "CellularPanel.h"
|
||||
|
||||
#include "SelectionState.h"
|
||||
|
||||
@@ -34,7 +34,6 @@ class SpectrumAnalyst;
|
||||
class Track;
|
||||
class TrackList;
|
||||
class TrackPanel;
|
||||
class TrackPanelCell;
|
||||
class TrackArtist;
|
||||
class Ruler;
|
||||
class SnapManager;
|
||||
@@ -43,20 +42,13 @@ class LWSlider;
|
||||
class ControlToolBar; //Needed because state of controls can affect what gets drawn.
|
||||
class ToolsToolBar; //Needed because state of controls can affect what gets drawn.
|
||||
class MixerBoard;
|
||||
class AudacityProject;
|
||||
|
||||
class TrackPanelAx;
|
||||
class TrackPanelCellIterator;
|
||||
struct TrackPanelMouseEvent;
|
||||
struct TrackPanelMouseState;
|
||||
|
||||
class ViewInfo;
|
||||
|
||||
class NoteTrack;
|
||||
class WaveTrack;
|
||||
class WaveClip;
|
||||
class UIHandle;
|
||||
using UIHandlePtr = std::shared_ptr<UIHandle>;
|
||||
|
||||
// Declared elsewhere, to reduce compilation dependencies
|
||||
class TrackPanelListener;
|
||||
@@ -242,127 +234,6 @@ private:
|
||||
const int DragThreshold = 3;// Anything over 3 pixels is a drag, else a click.
|
||||
|
||||
|
||||
// This class manages a panel divided into a number of sub-rectangles called
|
||||
// cells, that each implement hit tests returning click-drag-release handler
|
||||
// objects, and other services.
|
||||
// It has no dependency on the Track class.
|
||||
class AUDACITY_DLL_API CellularPanel : public OverlayPanel {
|
||||
public:
|
||||
CellularPanel(wxWindow * parent, wxWindowID id,
|
||||
const wxPoint & pos,
|
||||
const wxSize & size,
|
||||
ViewInfo *viewInfo,
|
||||
// default as for wxPanel:
|
||||
long style = wxTAB_TRAVERSAL | wxNO_BORDER)
|
||||
: OverlayPanel(parent, id, pos, size, style)
|
||||
, mViewInfo( viewInfo )
|
||||
{}
|
||||
|
||||
// Overridables:
|
||||
|
||||
virtual AudacityProject *GetProject() const = 0;
|
||||
|
||||
// Find track info by coordinate
|
||||
struct FoundCell {
|
||||
std::shared_ptr<TrackPanelCell> pCell;
|
||||
wxRect rect;
|
||||
};
|
||||
virtual FoundCell FindCell(int mouseX, int mouseY) = 0;
|
||||
virtual wxRect FindRect(const TrackPanelCell &cell) = 0;
|
||||
virtual TrackPanelCell *GetFocusedCell() = 0;
|
||||
virtual void SetFocusedCell() = 0;
|
||||
|
||||
virtual void ProcessUIHandleResult
|
||||
(TrackPanelCell *pClickedCell, TrackPanelCell *pLatestCell,
|
||||
unsigned refreshResult) = 0;
|
||||
|
||||
virtual void UpdateStatusMessage( const wxString & ) = 0;
|
||||
|
||||
public:
|
||||
UIHandlePtr Target()
|
||||
{
|
||||
if (mTargets.size())
|
||||
return mTargets[mTarget];
|
||||
else
|
||||
return {};
|
||||
}
|
||||
|
||||
bool IsMouseCaptured();
|
||||
|
||||
wxCoord MostRecentXCoord() const { return mMouseMostRecentX; }
|
||||
|
||||
void HandleCursorForPresentMouseState(bool doHit = true);
|
||||
|
||||
protected:
|
||||
bool HasEscape();
|
||||
bool CancelDragging();
|
||||
void ClearTargets()
|
||||
{
|
||||
// Forget the rotation of hit test candidates when the mouse moves from
|
||||
// cell to cell or outside of the panel entirely.
|
||||
mLastCell.reset();
|
||||
mTargets.clear();
|
||||
mTarget = 0;
|
||||
mMouseOverUpdateFlags = 0;
|
||||
}
|
||||
void DoContextMenu( TrackPanelCell *pCell = nullptr );
|
||||
|
||||
private:
|
||||
bool HasRotation();
|
||||
bool ChangeTarget(bool forward, bool cycle);
|
||||
|
||||
void OnMouseEvent(wxMouseEvent & event);
|
||||
void OnCaptureLost(wxMouseCaptureLostEvent & event);
|
||||
void OnCaptureKey(wxCommandEvent & event);
|
||||
void OnKeyDown(wxKeyEvent & event);
|
||||
void OnChar(wxKeyEvent & event);
|
||||
void OnKeyUp(wxKeyEvent & event);
|
||||
|
||||
void OnSetFocus(wxFocusEvent & event);
|
||||
void OnKillFocus(wxFocusEvent & event);
|
||||
|
||||
void OnContextMenu(wxContextMenuEvent & event);
|
||||
|
||||
void HandleInterruptedDrag();
|
||||
void Uncapture( wxMouseState *pState = nullptr );
|
||||
bool HandleEscapeKey(bool down);
|
||||
void UpdateMouseState(const wxMouseState &state);
|
||||
void HandleModifierKey();
|
||||
|
||||
void HandleClick( const TrackPanelMouseEvent &tpmEvent );
|
||||
void HandleWheelRotation( TrackPanelMouseEvent &tpmEvent );
|
||||
|
||||
void HandleMotion( wxMouseState &state, bool doHit = true );
|
||||
void HandleMotion
|
||||
( const TrackPanelMouseState &tpmState, bool doHit = true );
|
||||
|
||||
|
||||
protected:
|
||||
ViewInfo *mViewInfo;
|
||||
|
||||
private:
|
||||
UIHandlePtr mUIHandle;
|
||||
|
||||
std::weak_ptr<TrackPanelCell> mLastCell;
|
||||
std::vector<UIHandlePtr> mTargets;
|
||||
size_t mTarget {};
|
||||
unsigned mMouseOverUpdateFlags{};
|
||||
|
||||
protected:
|
||||
// To do: make a drawing method and make this private
|
||||
wxMouseState mLastMouseState;
|
||||
|
||||
private:
|
||||
int mMouseMostRecentX;
|
||||
int mMouseMostRecentY;
|
||||
|
||||
std::weak_ptr<TrackPanelCell> mpClickedCell;
|
||||
|
||||
bool mEnableTab{};
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
class AUDACITY_DLL_API TrackPanel final : public CellularPanel {
|
||||
|
||||
public:
|
||||
@@ -606,7 +477,7 @@ protected:
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
||||
void ProcessUIHandleResult
|
||||
(TrackPanelCell *pClickedCell, TrackPanelCell *pLatestCell,
|
||||
(TrackPanelCell *pClickedTrack, TrackPanelCell *pLatestCell,
|
||||
unsigned refreshResult) override;
|
||||
|
||||
void UpdateStatusMessage( const wxString &status ) override;
|
||||
|
||||
Reference in New Issue
Block a user