1
0
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:
Paul Licameli
2018-08-04 13:06:55 -04:00
parent 7f84e71324
commit f6609e5ffb
9 changed files with 1023 additions and 921 deletions

View File

@@ -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;