1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-15 15:49:36 +02:00

Specific types, const versions: getting track & vruler controls...

... See changes to classes CommonTrackPanelCell and Track; the rest follows
This commit is contained in:
Paul Licameli 2018-11-06 11:02:03 -05:00
parent 43899da80d
commit 6f31a9f7dc
21 changed files with 66 additions and 40 deletions

View File

@ -324,8 +324,8 @@ private:
std::weak_ptr<LabelTextHandle> mTextHandle;
protected:
std::shared_ptr<TrackControls> GetControls() override;
std::shared_ptr<TrackVRulerControls> GetVRulerControls() 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.
};

View File

@ -270,8 +270,8 @@ class AUDACITY_DLL_API NoteTrack final
std::weak_ptr<StretchHandle> mStretchHandle;
protected:
std::shared_ptr<TrackControls> GetControls() override;
std::shared_ptr<TrackVRulerControls> GetVRulerControls() override;
std::shared_ptr<TrackControls> DoGetControls() override;
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
};
#endif // USE_MIDI

View File

@ -160,8 +160,8 @@ class TimeTrack final : public Track {
friend class TrackFactory;
protected:
std::shared_ptr<TrackControls> GetControls() override;
std::shared_ptr<TrackVRulerControls> GetVRulerControls() override;
std::shared_ptr<TrackControls> DoGetControls() override;
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
};

View File

@ -372,7 +372,7 @@ void Track::SyncLockAdjust(double oldT1, double newT1)
}
}
std::shared_ptr<Track> Track::FindTrack()
std::shared_ptr<Track> Track::DoFindTrack()
{
return SharedPointer();
}

View File

@ -269,8 +269,7 @@ class AUDACITY_DLL_API Track /* not final */
final override;
// Delegates the handling to the related TCP cell
std::shared_ptr<TrackPanelCell> ContextMenuDelegate() override
{ return GetTrackControl(); }
std::shared_ptr<TrackPanelCell> ContextMenuDelegate() override;
public:
@ -284,11 +283,13 @@ class AUDACITY_DLL_API Track /* not final */
// Return another, associated TrackPanelCell object that implements the
// drop-down, close and minimize buttons, etc.
std::shared_ptr<TrackPanelCell> GetTrackControl();
std::shared_ptr<TrackControls> GetTrackControl();
std::shared_ptr<const TrackControls> GetTrackControl() const;
// Return another, associated TrackPanelCell object that implements the
// mouse actions for the vertical ruler
std::shared_ptr<TrackPanelCell> GetVRulerControl();
std::shared_ptr<TrackVRulerControls> GetVRulerControl();
std::shared_ptr<const TrackVRulerControls> GetVRulerControl() const;
// Return another, associated TrackPanelCell object that implements the
// click and drag to resize
@ -737,11 +738,11 @@ public:
bool IsSelectedLeader() const;
protected:
std::shared_ptr<Track> FindTrack() override;
std::shared_ptr<Track> DoFindTrack() override;
// These are called to create controls on demand:
virtual std::shared_ptr<TrackControls> GetControls() = 0;
virtual std::shared_ptr<TrackVRulerControls> GetVRulerControls() = 0;
virtual std::shared_ptr<TrackControls> DoGetControls() = 0;
virtual std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() = 0;
// These hold the controls:
std::shared_ptr<TrackControls> mpControls;

View File

@ -86,6 +86,9 @@ is time to refresh some aspect of the screen.
#include "toolbars/ControlToolBar.h"
#include "toolbars/ToolsToolBar.h"
#include "tracks/ui/TrackControls.h" // for inheritance relation
#include "tracks/ui/TrackVRulerControls.h" // for inheritance relation
//This loads the appropriate set of cursors, depending on platform.
#include "../images/Cursors.h"
@ -2016,7 +2019,7 @@ struct EmptyCell final : CommonTrackPanelCell {
std::vector< UIHandlePtr > HitTest(
const TrackPanelMouseState &, const AudacityProject *) override
{ return {}; }
virtual std::shared_ptr< Track > FindTrack() override { return {}; }
virtual std::shared_ptr< Track > DoFindTrack() override { return {}; }
static std::shared_ptr<EmptyCell> Instance()
{
static auto instance = std::make_shared< EmptyCell >();

View File

@ -27,7 +27,10 @@ public:
std::vector<UIHandlePtr> HitTest
(const TrackPanelMouseState &, const AudacityProject *) override;
std::shared_ptr<Track> FindTrack() override { return mpTrack.lock(); };
protected:
std::shared_ptr<Track> DoFindTrack() override
{ return mpTrack.lock(); };
private:
std::weak_ptr<Track> mpTrack;

View File

@ -480,7 +480,7 @@ void WaveTrack::DoSetMinimized(bool isMinimized){
if( bHalfWave )
{
// Show half wave on collapse, full on restore.
std::shared_ptr<TrackVRulerControls> pTvc = GetVRulerControls();
std::shared_ptr<TrackVRulerControls> pTvc = GetVRulerControl();
// An awkward workaround for a function that lives 'in the wrong place'.
// We use magic numbers, 0 and 1, to tell it to zoom reset or zoom half-wave.

View File

@ -657,8 +657,8 @@ private:
std::weak_ptr<EnvelopeHandle> mEnvelopeHandle;
protected:
std::shared_ptr<TrackControls> GetControls() override;
std::shared_ptr<TrackVRulerControls> GetVRulerControls() override;
std::shared_ptr<TrackControls> DoGetControls() override;
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
};
// This is meant to be a short-lived object, during whose lifetime,

View File

@ -42,12 +42,12 @@ std::vector<UIHandlePtr> LabelTrack::DetailedHitTest
return results;
}
std::shared_ptr<TrackControls> LabelTrack::GetControls()
std::shared_ptr<TrackControls> LabelTrack::DoGetControls()
{
return std::make_shared<LabelTrackControls>( SharedPointer() );
}
std::shared_ptr<TrackVRulerControls> LabelTrack::GetVRulerControls()
std::shared_ptr<TrackVRulerControls> LabelTrack::DoGetVRulerControls()
{
return std::make_shared<LabelTrackVRulerControls>( SharedPointer() );
}

View File

@ -41,12 +41,12 @@ std::vector<UIHandlePtr> NoteTrack::DetailedHitTest
return results;
}
std::shared_ptr<TrackControls> NoteTrack::GetControls()
std::shared_ptr<TrackControls> NoteTrack::DoGetControls()
{
return std::make_shared<NoteTrackControls>( SharedPointer() );
}
std::shared_ptr<TrackVRulerControls> NoteTrack::GetVRulerControls()
std::shared_ptr<TrackVRulerControls> NoteTrack::DoGetVRulerControls()
{
return std::make_shared<NoteTrackVRulerControls>( SharedPointer() );
}

View File

@ -101,12 +101,12 @@ std::vector<UIHandlePtr> WaveTrack::DetailedHitTest
return results;
}
std::shared_ptr<TrackControls> WaveTrack::GetControls()
std::shared_ptr<TrackControls> WaveTrack::DoGetControls()
{
return std::make_shared<WaveTrackControls>( SharedPointer() );
}
std::shared_ptr<TrackVRulerControls> WaveTrack::GetVRulerControls()
std::shared_ptr<TrackVRulerControls> WaveTrack::DoGetVRulerControls()
{
return std::make_shared<WaveTrackVRulerControls>( SharedPointer() );
}

View File

@ -30,12 +30,12 @@ std::vector<UIHandlePtr> TimeTrack::DetailedHitTest
return results;
}
std::shared_ptr<TrackControls> TimeTrack::GetControls()
std::shared_ptr<TrackControls> TimeTrack::DoGetControls()
{
return std::make_shared<TimeTrackControls>( SharedPointer() );
}
std::shared_ptr<TrackVRulerControls> TimeTrack::GetVRulerControls()
std::shared_ptr<TrackVRulerControls> TimeTrack::DoGetVRulerControls()
{
return std::make_shared<TimeTrackVRulerControls>( SharedPointer() );
}

View File

@ -91,7 +91,7 @@ std::vector<UIHandlePtr> BackgroundCell::HitTest
return results;
}
std::shared_ptr<Track> BackgroundCell::FindTrack()
std::shared_ptr<Track> BackgroundCell::DoFindTrack()
{
return {};
}

View File

@ -36,7 +36,7 @@ protected:
(const TrackPanelMouseState &state,
const AudacityProject *) override;
std::shared_ptr<Track> FindTrack() override;
std::shared_ptr<Track> DoFindTrack() override;
private:
AudacityProject *mpProject;

View File

@ -31,9 +31,13 @@ public:
HitTestPreview DefaultPreview
(const TrackPanelMouseState &, const AudacityProject *) override;
virtual std::shared_ptr<Track> FindTrack() = 0;
std::shared_ptr<Track> FindTrack() { return DoFindTrack(); }
std::shared_ptr<const Track> FindTrack() const
{ return const_cast<CommonTrackPanelCell*>(this)->DoFindTrack(); }
protected:
virtual std::shared_ptr<Track> DoFindTrack() = 0;
unsigned HandleWheelRotation
(const TrackPanelMouseEvent &event,
AudacityProject *pProject) override;

View File

@ -35,7 +35,7 @@ TrackControls::~TrackControls()
{
}
std::shared_ptr<Track> TrackControls::FindTrack()
std::shared_ptr<Track> TrackControls::DoFindTrack()
{
return mwTrack.lock();
}

View File

@ -30,8 +30,6 @@ public:
virtual ~TrackControls() = 0;
std::shared_ptr<Track> FindTrack() override;
// This is passed to the InitMenu() methods of the PopupMenuTable
// objects returned by GetMenuExtension:
struct InitMenuData
@ -43,6 +41,8 @@ public:
};
protected:
std::shared_ptr<Track> DoFindTrack() override;
// An override is supplied for derived classes to call through but it is
// still marked pure virtual
virtual std::vector<UIHandlePtr> HitTest

View File

@ -78,22 +78,37 @@ std::vector<UIHandlePtr> Track::HitTest
return results;
}
std::shared_ptr<TrackPanelCell> Track::GetTrackControl()
std::shared_ptr<TrackPanelCell> Track::ContextMenuDelegate()
{
return FindTrack()->GetTrackControl();
}
std::shared_ptr<TrackControls> Track::GetTrackControl()
{
if (!mpControls)
// create on demand
mpControls = GetControls();
mpControls = DoGetControls();
return mpControls;
}
std::shared_ptr<TrackPanelCell> Track::GetVRulerControl()
std::shared_ptr<const TrackControls> Track::GetTrackControl() const
{
return const_cast< Track* >( this )->GetTrackControl();
}
std::shared_ptr<TrackVRulerControls> Track::GetVRulerControl()
{
if (!mpVRulerContols)
// create on demand
mpVRulerContols = GetVRulerControls();
mpVRulerContols = DoGetVRulerControls();
return mpVRulerContols;
}
std::shared_ptr<const TrackVRulerControls> Track::GetVRulerControl() const
{
return const_cast< Track* >( this )->GetVRulerControl();
}
#include "../../TrackPanelResizeHandle.h"
std::shared_ptr<TrackPanelCell> Track::GetResizer()
{

View File

@ -27,7 +27,7 @@ TrackVRulerControls::~TrackVRulerControls()
{
}
std::shared_ptr<Track> TrackVRulerControls::FindTrack()
std::shared_ptr<Track> TrackVRulerControls::DoFindTrack()
{
return mwTrack.lock();
}

View File

@ -27,8 +27,6 @@ public:
virtual ~TrackVRulerControls() = 0;
std::shared_ptr<Track> FindTrack() override;
// Define a default hit test method, just for message and cursor
std::vector<UIHandlePtr> HitTest
(const TrackPanelMouseState &state,
@ -39,6 +37,8 @@ public:
int zoomStart, int zoomEnd);
protected:
std::shared_ptr<Track> DoFindTrack() override;
Track *GetTrack() const;
std::weak_ptr<Track> mwTrack;