Associate View object with Track, analogous with controls
This commit is contained in:
parent
18ba27a641
commit
059d7eaa42
|
@ -319,8 +319,10 @@ private:
|
|||
std::weak_ptr<LabelTextHandle> mTextHandle;
|
||||
|
||||
protected:
|
||||
std::shared_ptr<TrackView> DoGetView() override;
|
||||
std::shared_ptr<TrackControls> DoGetControls() override;
|
||||
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
|
||||
|
||||
friend class GetInfoCommand; // to get labels.
|
||||
friend class SetLabelCommand; // to set labels.
|
||||
};
|
||||
|
|
|
@ -226,6 +226,7 @@ class AUDACITY_DLL_API NoteTrack final
|
|||
std::weak_ptr<StretchHandle> mStretchHandle;
|
||||
|
||||
protected:
|
||||
std::shared_ptr<TrackView> DoGetView() override;
|
||||
std::shared_ptr<TrackControls> DoGetControls() override;
|
||||
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
|
||||
};
|
||||
|
|
|
@ -123,6 +123,7 @@ class TimeTrack final : public Track {
|
|||
friend class TrackFactory;
|
||||
|
||||
protected:
|
||||
std::shared_ptr<TrackView> DoGetView() override;
|
||||
std::shared_ptr<TrackControls> DoGetControls() override;
|
||||
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
|
||||
};
|
||||
|
|
|
@ -37,6 +37,7 @@ class PlayableTrack;
|
|||
class LabelTrack;
|
||||
class TimeTrack;
|
||||
class TrackControls;
|
||||
class TrackView;
|
||||
class TrackVRulerControls;
|
||||
class TrackPanelResizerCell;
|
||||
class WaveTrack;
|
||||
|
@ -285,6 +286,11 @@ class AUDACITY_DLL_API Track /* not final */
|
|||
|
||||
mutable wxSize vrulerSize;
|
||||
|
||||
// Return another, associated TrackPanelCell object that implements
|
||||
// click and drag and keystrokes in the track contents.
|
||||
std::shared_ptr<TrackView> GetTrackView();
|
||||
std::shared_ptr<const TrackView> GetTrackView() const;
|
||||
|
||||
// Return another, associated TrackPanelCell object that implements the
|
||||
// drop-down, close and minimize buttons, etc.
|
||||
std::shared_ptr<TrackPanelCell> GetTrackControls();
|
||||
|
@ -752,10 +758,12 @@ protected:
|
|||
std::shared_ptr<Track> DoFindTrack() override;
|
||||
|
||||
// These are called to create controls on demand:
|
||||
virtual std::shared_ptr<TrackView> DoGetView() = 0;
|
||||
virtual std::shared_ptr<TrackControls> DoGetControls() = 0;
|
||||
virtual std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() = 0;
|
||||
|
||||
// These hold the controls:
|
||||
std::shared_ptr<TrackView> mpView;
|
||||
std::shared_ptr<TrackControls> mpControls;
|
||||
std::shared_ptr<TrackVRulerControls> mpVRulerContols;
|
||||
std::shared_ptr<TrackPanelResizerCell> mpResizer;
|
||||
|
|
|
@ -699,6 +699,7 @@ private:
|
|||
std::weak_ptr<EnvelopeHandle> mEnvelopeHandle;
|
||||
|
||||
protected:
|
||||
std::shared_ptr<TrackView> DoGetView() override;
|
||||
std::shared_ptr<TrackControls> DoGetControls() override;
|
||||
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
|
||||
};
|
||||
|
|
|
@ -8,6 +8,7 @@ Paul Licameli split from TrackPanel.cpp
|
|||
|
||||
**********************************************************************/
|
||||
|
||||
#include "LabelTrackView.h"
|
||||
#include "../../../LabelTrack.h"
|
||||
|
||||
#include "LabelTrackControls.h"
|
||||
|
@ -18,6 +19,10 @@ Paul Licameli split from TrackPanel.cpp
|
|||
#include "../../../HitTestResult.h"
|
||||
#include "../../../TrackPanelMouseEvent.h"
|
||||
|
||||
LabelTrackView::~LabelTrackView()
|
||||
{
|
||||
}
|
||||
|
||||
std::vector<UIHandlePtr> LabelTrack::DetailedHitTest
|
||||
(const TrackPanelMouseState &st,
|
||||
const AudacityProject *WXUNUSED(pProject), int, bool)
|
||||
|
@ -39,6 +44,11 @@ std::vector<UIHandlePtr> LabelTrack::DetailedHitTest
|
|||
return results;
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackView> LabelTrack::DoGetView()
|
||||
{
|
||||
return std::make_shared<LabelTrackView>( SharedPointer() );
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackControls> LabelTrack::DoGetControls()
|
||||
{
|
||||
return std::make_shared<LabelTrackControls>( SharedPointer() );
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/**********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
LabelTrackView.h
|
||||
|
||||
Paul Licameli split from class LabelTrack
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __AUDACITY_LABEL_TRACK_VIEW__
|
||||
#define __AUDACITY_LABEL_TRACK_VIEW__
|
||||
|
||||
#include "../../ui/TrackView.h"
|
||||
|
||||
class LabelTrackView final : public TrackView
|
||||
{
|
||||
LabelTrackView( const LabelTrackView& ) = delete;
|
||||
LabelTrackView &operator=( const LabelTrackView& ) = delete;
|
||||
|
||||
public:
|
||||
explicit
|
||||
LabelTrackView( const std::shared_ptr<Track> &pTrack )
|
||||
: TrackView{ pTrack } {}
|
||||
~LabelTrackView() override;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -9,6 +9,8 @@ Paul Licameli split from TrackPanel.cpp
|
|||
**********************************************************************/
|
||||
|
||||
#include "../../../../Audacity.h" // for USE_* macros
|
||||
#include "NoteTrackView.h"
|
||||
|
||||
#ifdef USE_MIDI
|
||||
#include "../../../../NoteTrack.h"
|
||||
|
||||
|
@ -22,6 +24,10 @@ Paul Licameli split from TrackPanel.cpp
|
|||
#include "../../../ui/SelectHandle.h"
|
||||
#include "StretchHandle.h"
|
||||
|
||||
NoteTrackView::~NoteTrackView()
|
||||
{
|
||||
}
|
||||
|
||||
std::vector<UIHandlePtr> NoteTrack::DetailedHitTest
|
||||
(const TrackPanelMouseState &WXUNUSED(state),
|
||||
const AudacityProject *WXUNUSED(pProject), int, bool )
|
||||
|
@ -41,6 +47,11 @@ std::vector<UIHandlePtr> NoteTrack::DetailedHitTest
|
|||
return results;
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackView> NoteTrack::DoGetView()
|
||||
{
|
||||
return std::make_shared<NoteTrackView>( SharedPointer() );
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackControls> NoteTrack::DoGetControls()
|
||||
{
|
||||
return std::make_shared<NoteTrackControls>( SharedPointer() );
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/**********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
NoteTrackView.h
|
||||
|
||||
Paul Licameli split from class NoteTrack
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __AUDACITY_NOTE_TRACK_VIEW__
|
||||
#define __AUDACITY_NOTE_TRACK_VIEW__
|
||||
|
||||
#include "../../../ui/TrackView.h"
|
||||
|
||||
class NoteTrackView final : public TrackView
|
||||
{
|
||||
NoteTrackView( const NoteTrackView& ) = delete;
|
||||
NoteTrackView &operator=( const NoteTrackView& ) = delete;
|
||||
|
||||
public:
|
||||
explicit
|
||||
NoteTrackView( const std::shared_ptr<Track> &pTrack )
|
||||
: TrackView{ pTrack } {}
|
||||
~NoteTrackView() override;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -8,6 +8,7 @@ Paul Licameli split from TrackPanel.cpp
|
|||
|
||||
**********************************************************************/
|
||||
|
||||
#include "WaveTrackView.h"
|
||||
#include "../../../../WaveTrack.h"
|
||||
|
||||
#include "WaveTrackControls.h"
|
||||
|
@ -23,6 +24,10 @@ Paul Licameli split from TrackPanel.cpp
|
|||
#include "../../../ui/TimeShiftHandle.h"
|
||||
#include "../../../../ProjectSettings.h"
|
||||
|
||||
WaveTrackView::~WaveTrackView()
|
||||
{
|
||||
}
|
||||
|
||||
std::vector<UIHandlePtr> WaveTrack::DetailedHitTest
|
||||
(const TrackPanelMouseState &st,
|
||||
const AudacityProject *pProject, int currentTool, bool bMultiTool)
|
||||
|
@ -101,6 +106,11 @@ std::vector<UIHandlePtr> WaveTrack::DetailedHitTest
|
|||
return results;
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackView> WaveTrack::DoGetView()
|
||||
{
|
||||
return std::make_shared<WaveTrackView>( SharedPointer() );
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackControls> WaveTrack::DoGetControls()
|
||||
{
|
||||
return std::make_shared<WaveTrackControls>( SharedPointer() );
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/**********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
WaveTrackView.h
|
||||
|
||||
Paul Licameli split from class WaveTrack
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __AUDACITY_WAVE_TRACK_VIEW__
|
||||
#define __AUDACITY_WAVE_TRACK_VIEW__
|
||||
|
||||
#include "../../../ui/TrackView.h"
|
||||
|
||||
class WaveTrackView final : public TrackView
|
||||
{
|
||||
WaveTrackView( const WaveTrackView& ) = delete;
|
||||
WaveTrackView &operator=( const WaveTrackView& ) = delete;
|
||||
|
||||
public:
|
||||
explicit
|
||||
WaveTrackView( const std::shared_ptr<Track> &pTrack )
|
||||
: TrackView{ pTrack } {}
|
||||
~WaveTrackView() override;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -8,6 +8,7 @@ Paul Licameli split from TrackPanel.cpp
|
|||
|
||||
**********************************************************************/
|
||||
|
||||
#include "TimeTrackView.h"
|
||||
#include "../../../TimeTrack.h"
|
||||
|
||||
#include "TimeTrackControls.h"
|
||||
|
@ -18,6 +19,10 @@ Paul Licameli split from TrackPanel.cpp
|
|||
|
||||
#include "../../ui/EnvelopeHandle.h"
|
||||
|
||||
TimeTrackView::~TimeTrackView()
|
||||
{
|
||||
}
|
||||
|
||||
std::vector<UIHandlePtr> TimeTrack::DetailedHitTest
|
||||
(const TrackPanelMouseState &st,
|
||||
const AudacityProject *pProject, int, bool)
|
||||
|
@ -30,6 +35,11 @@ std::vector<UIHandlePtr> TimeTrack::DetailedHitTest
|
|||
return results;
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackView> TimeTrack::DoGetView()
|
||||
{
|
||||
return std::make_shared<TimeTrackView>( SharedPointer() );
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackControls> TimeTrack::DoGetControls()
|
||||
{
|
||||
return std::make_shared<TimeTrackControls>( SharedPointer() );
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/**********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
TimeTrackView.h
|
||||
|
||||
Paul Licameli split from class TimeTrack
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __AUDACITY_TIME_TRACK_VIEW__
|
||||
#define __AUDACITY_TIME_TRACK_VIEW__
|
||||
|
||||
#include "../../ui/TrackView.h"
|
||||
|
||||
class TimeTrackView final : public TrackView
|
||||
{
|
||||
TimeTrackView( const TimeTrackView& ) = delete;
|
||||
TimeTrackView &operator=( const TimeTrackView& ) = delete;
|
||||
|
||||
public:
|
||||
explicit
|
||||
TimeTrackView( const std::shared_ptr<Track> &pTrack )
|
||||
: TrackView{ pTrack } {}
|
||||
~TimeTrackView() override;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -11,6 +11,7 @@ Paul Licameli split from TrackPanel.cpp
|
|||
#ifndef __AUDACITY_COMMON_TRACK_PANEL_CELL__
|
||||
#define __AUDACITY_COMMON_TRACK_PANEL_CELL__
|
||||
|
||||
#include "../../Audacity.h"
|
||||
#include "../../TrackPanelCell.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -8,6 +8,7 @@ Paul Licameli split from TrackPanel.cpp
|
|||
|
||||
**********************************************************************/
|
||||
|
||||
#include "TrackView.h"
|
||||
#include "../../Track.h"
|
||||
|
||||
#include "../../TrackPanelMouseEvent.h"
|
||||
|
@ -19,6 +20,27 @@ Paul Licameli split from TrackPanel.cpp
|
|||
#include "BackgroundCell.h"
|
||||
#include "../../ProjectSettings.h"
|
||||
|
||||
TrackView::~TrackView()
|
||||
{
|
||||
}
|
||||
|
||||
TrackView &TrackView::Get( Track &track )
|
||||
{
|
||||
return *track.GetTrackView();
|
||||
}
|
||||
|
||||
const TrackView &TrackView::Get( const Track &track )
|
||||
{
|
||||
return *track.GetTrackView();
|
||||
}
|
||||
|
||||
std::vector<UIHandlePtr> TrackView::HitTest
|
||||
(const TrackPanelMouseState &st,
|
||||
const AudacityProject *pProject)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
std::vector<UIHandlePtr> Track::HitTest
|
||||
(const TrackPanelMouseState &st,
|
||||
const AudacityProject *pProject)
|
||||
|
@ -78,6 +100,24 @@ std::shared_ptr<TrackPanelCell> Track::ContextMenuDelegate()
|
|||
return TrackControls::Get( *this ).shared_from_this();
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackPanelCell> TrackView::ContextMenuDelegate()
|
||||
{
|
||||
return TrackControls::Get( *FindTrack() ).shared_from_this();
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackView> Track::GetTrackView()
|
||||
{
|
||||
if (!mpView)
|
||||
// create on demand
|
||||
mpView = DoGetView();
|
||||
return mpView;
|
||||
}
|
||||
|
||||
std::shared_ptr<const TrackView> Track::GetTrackView() const
|
||||
{
|
||||
return const_cast<Track*>(this)->GetTrackView();
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackPanelCell> Track::GetTrackControls()
|
||||
{
|
||||
if (!mpControls)
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
/**********************************************************************
|
||||
|
||||
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 TrackView /* not final */ : public CommonTrackCell
|
||||
{
|
||||
TrackView( const TrackView& ) = delete;
|
||||
TrackView &operator=( const TrackView& ) = delete;
|
||||
|
||||
public:
|
||||
explicit
|
||||
TrackView( const std::shared_ptr<Track> &pTrack )
|
||||
: CommonTrackCell{ pTrack } {}
|
||||
virtual ~TrackView() = 0;
|
||||
|
||||
static TrackView &Get( Track & );
|
||||
static const TrackView &Get( const Track & );
|
||||
|
||||
std::vector<UIHandlePtr> HitTest
|
||||
(const TrackPanelMouseState &, const AudacityProject *pProject)
|
||||
final override;
|
||||
|
||||
// Delegates the handling to the related TCP cell
|
||||
std::shared_ptr<TrackPanelCell> ContextMenuDelegate() override;
|
||||
|
||||
protected:
|
||||
Track *GetTrack() const;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue