mirror of
https://github.com/cookiengineer/audacity
synced 2025-09-19 17:40:51 +02:00
121 lines
3.2 KiB
C++
121 lines
3.2 KiB
C++
/**********************************************************************
|
|
|
|
Audacity: A Digital Audio Editor
|
|
|
|
TrackView.h
|
|
|
|
Paul Licameli split from class Track
|
|
|
|
**********************************************************************/
|
|
|
|
#ifndef __AUDACITY_TRACK_VIEW__
|
|
#define __AUDACITY_TRACK_VIEW__
|
|
|
|
#include <memory>
|
|
#include "CommonTrackPanelCell.h" // to inherit
|
|
|
|
class Track;
|
|
class TrackList;
|
|
class TrackVRulerControls;
|
|
class TrackPanelResizerCell;
|
|
|
|
class TrackView /* not final */ : public CommonTrackCell
|
|
, public std::enable_shared_from_this<TrackView>
|
|
{
|
|
TrackView( const TrackView& ) = delete;
|
|
TrackView &operator=( const TrackView& ) = delete;
|
|
|
|
public:
|
|
enum : unsigned { DefaultHeight = 150 };
|
|
|
|
explicit
|
|
TrackView( const std::shared_ptr<Track> &pTrack );
|
|
virtual ~TrackView() = 0;
|
|
|
|
// some static conveniences, useful for summation over track iterator
|
|
// ranges
|
|
static int GetTrackHeight( const Track *pTrack );
|
|
static int GetChannelGroupHeight( const Track *pTrack );
|
|
// Total height of the given track and all previous ones (constant time!)
|
|
static int GetCumulativeHeight( const Track *pTrack );
|
|
static int GetTotalHeight( const TrackList &list );
|
|
|
|
// Copy view state, for undo/redo purposes
|
|
void CopyTo( Track &track ) const override;
|
|
|
|
static TrackView &Get( Track & );
|
|
static const TrackView &Get( const Track & );
|
|
|
|
bool GetMinimized() const { return mMinimized; }
|
|
void SetMinimized( bool minimized );
|
|
|
|
int GetY() const { return mY; }
|
|
int GetActualHeight() const { return mHeight; }
|
|
virtual int GetMinimizedHeight() const = 0;
|
|
int GetHeight() const;
|
|
|
|
void SetY(int y) { DoSetY( y ); }
|
|
void SetHeight(int height);
|
|
|
|
// Return another, associated TrackPanelCell object that implements the
|
|
// mouse actions for the vertical ruler
|
|
std::shared_ptr<TrackVRulerControls> GetVRulerControls();
|
|
std::shared_ptr<const TrackVRulerControls> GetVRulerControls() const;
|
|
|
|
|
|
void WriteXMLAttributes( XMLWriter & ) const override;
|
|
bool HandleXMLAttribute( const wxChar *attr, const wxChar *value ) override;
|
|
|
|
// New virtual function. The default just returns a one-element array
|
|
// containing this. Overrides might refine the Y axis.
|
|
using Refinement = std::vector< std::pair<
|
|
wxCoord, std::shared_ptr< TrackView >
|
|
> >;
|
|
virtual Refinement GetSubViews( const wxRect &rect );
|
|
|
|
// default is false
|
|
virtual bool IsSpectral() const;
|
|
|
|
virtual void DoSetMinimized( bool isMinimized );
|
|
|
|
protected:
|
|
|
|
// No need yet to make this virtual
|
|
void DoSetY(int y);
|
|
|
|
void DoSetHeight(int h);
|
|
|
|
// Private factory to make appropriate object; class TrackView handles
|
|
// memory management thereafter
|
|
virtual std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() = 0;
|
|
|
|
std::shared_ptr<TrackVRulerControls> mpVRulerControls;
|
|
|
|
private:
|
|
bool mMinimized{ false };
|
|
int mY{ 0 };
|
|
int mHeight{ DefaultHeight };
|
|
};
|
|
|
|
#include "../../AttachedVirtualFunction.h"
|
|
|
|
struct DoGetViewTag;
|
|
|
|
using DoGetView =
|
|
AttachedVirtualFunction<
|
|
DoGetViewTag,
|
|
std::shared_ptr< TrackView >,
|
|
Track
|
|
>;
|
|
|
|
struct GetDefaultTrackHeightTag;
|
|
|
|
using GetDefaultTrackHeight =
|
|
AttachedVirtualFunction<
|
|
GetDefaultTrackHeightTag,
|
|
int,
|
|
Track
|
|
>;
|
|
|
|
#endif
|