mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-09 16:41:14 +02:00
Define static accessor functions for VRulerControls and TrackControls...
... and use std::enable_shared_from_this Temporarily putting TrackControls.cpp back into the big s.c.c, now 59 files Future rewriting might even eliminate all mention of those classes in the definition of the Track classes.
This commit is contained in:
parent
2259f12acb
commit
18ba27a641
@ -287,13 +287,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<const TrackPanelCell> GetTrackControl() const;
|
||||
std::shared_ptr<TrackPanelCell> GetTrackControls();
|
||||
std::shared_ptr<const TrackPanelCell> GetTrackControls() const;
|
||||
|
||||
// Return another, associated TrackPanelCell object that implements the
|
||||
// mouse actions for the vertical ruler
|
||||
std::shared_ptr<TrackVRulerControls> GetVRulerControl();
|
||||
std::shared_ptr<const TrackVRulerControls> GetVRulerControl() const;
|
||||
std::shared_ptr<TrackVRulerControls> GetVRulerControls();
|
||||
std::shared_ptr<const TrackVRulerControls> GetVRulerControls() const;
|
||||
|
||||
// Return another, associated TrackPanelCell object that implements the
|
||||
// click and drag to resize
|
||||
|
@ -100,6 +100,7 @@ is time to refresh some aspect of the screen.
|
||||
|
||||
#include "toolbars/ControlToolBar.h"
|
||||
|
||||
#include "tracks/ui/TrackControls.h"
|
||||
#include "tracks/ui/TrackVRulerControls.h" // for inheritance relation
|
||||
|
||||
//This loads the appropriate set of cursors, depending on platform.
|
||||
@ -339,7 +340,7 @@ TrackPanel::~TrackPanel()
|
||||
|
||||
LWSlider *TrackPanel::GainSlider( const WaveTrack *wt )
|
||||
{
|
||||
auto pControls = wt->GetTrackControl();
|
||||
auto pControls = &TrackControls::Get( *wt );
|
||||
auto rect = FindRect( *pControls );
|
||||
wxRect sliderRect;
|
||||
TrackInfo::GetGainRect( rect.GetTopLeft(), sliderRect );
|
||||
@ -348,7 +349,7 @@ LWSlider *TrackPanel::GainSlider( const WaveTrack *wt )
|
||||
|
||||
LWSlider *TrackPanel::PanSlider( const WaveTrack *wt )
|
||||
{
|
||||
auto pControls = wt->GetTrackControl();
|
||||
auto pControls = &TrackControls::Get( *wt );
|
||||
auto rect = FindRect( *pControls );
|
||||
wxRect sliderRect;
|
||||
TrackInfo::GetPanRect( rect.GetTopLeft(), sliderRect );
|
||||
@ -358,7 +359,7 @@ LWSlider *TrackPanel::PanSlider( const WaveTrack *wt )
|
||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||
LWSlider *TrackPanel::VelocitySlider( const NoteTrack *nt )
|
||||
{
|
||||
auto pControls = nt->GetTrackControl();
|
||||
auto pControls = &TrackControls::Get( *nt );
|
||||
auto rect = FindRect( *pControls );
|
||||
wxRect sliderRect;
|
||||
TrackInfo::GetVelocityRect( rect.GetTopLeft(), sliderRect );
|
||||
@ -2194,7 +2195,8 @@ struct VRulerAndChannel final : TrackPanelGroup {
|
||||
Subdivision Children( const wxRect &rect ) override
|
||||
{
|
||||
return { Axis::X, Refinement{
|
||||
{ rect.GetLeft(), mpChannel->GetVRulerControl() },
|
||||
{ rect.GetLeft(),
|
||||
TrackVRulerControls::Get( *mpChannel ).shared_from_this() },
|
||||
{ mLeftOffset, mpChannel }
|
||||
} };
|
||||
}
|
||||
@ -2240,7 +2242,8 @@ struct LabeledChannelGroup final : TrackPanelGroup {
|
||||
: mpTrack{ pTrack }, mLeftOffset{ leftOffset } {}
|
||||
Subdivision Children( const wxRect &rect ) override
|
||||
{ return { Axis::X, Refinement{
|
||||
{ rect.GetLeft(), mpTrack->GetTrackControl() },
|
||||
{ rect.GetLeft(),
|
||||
TrackControls::Get( *mpTrack ).shared_from_this() },
|
||||
{ rect.GetLeft() + kTrackInfoWidth,
|
||||
std::make_shared< ChannelGroup >( mpTrack, mLeftOffset ) }
|
||||
} }; }
|
||||
|
@ -38,11 +38,7 @@ std::vector<UIHandlePtr> CommonTrackControls::HitTest
|
||||
UIHandlePtr result;
|
||||
std::vector<UIHandlePtr> results;
|
||||
|
||||
auto pTrack = FindTrack();
|
||||
// shared pointer to this:
|
||||
auto sThis =
|
||||
std::static_pointer_cast<TrackControls>( pTrack->GetTrackControl() );
|
||||
wxASSERT( this == sThis.get() );
|
||||
auto sThis = shared_from_this();
|
||||
|
||||
if (NULL != (result = CloseButtonHandle::HitTest(
|
||||
mCloseHandle, state, rect, this)))
|
||||
@ -62,7 +58,7 @@ std::vector<UIHandlePtr> CommonTrackControls::HitTest
|
||||
|
||||
if (results.empty()) {
|
||||
if (NULL != (result = TrackSelectHandle::HitAnywhere(
|
||||
mSelectHandle, pTrack)))
|
||||
mSelectHandle, FindTrack())))
|
||||
results.push_back(result);
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,8 @@ Paul Licameli split from TrackPanel.cpp
|
||||
#include "../../Audacity.h"
|
||||
#include "TrackControls.h"
|
||||
|
||||
#include "../../Track.h"
|
||||
|
||||
TrackControls::TrackControls( std::shared_ptr<Track> pTrack )
|
||||
: CommonTrackCell{ pTrack }
|
||||
{
|
||||
@ -19,3 +21,14 @@ TrackControls::TrackControls( std::shared_ptr<Track> pTrack )
|
||||
TrackControls::~TrackControls()
|
||||
{
|
||||
}
|
||||
|
||||
TrackControls &TrackControls::Get( Track &track )
|
||||
{
|
||||
return *static_cast<TrackControls*>( track.GetTrackControls().get() );
|
||||
}
|
||||
|
||||
const TrackControls &TrackControls::Get( const Track &track )
|
||||
{
|
||||
return *static_cast<const TrackControls*>( track.GetTrackControls().get() );
|
||||
}
|
||||
|
||||
|
@ -16,8 +16,12 @@ Paul Licameli split from TrackPanel.cpp
|
||||
class Track;
|
||||
|
||||
class TrackControls /* not final */ : public CommonTrackCell
|
||||
, public std::enable_shared_from_this< TrackControls >
|
||||
{
|
||||
public:
|
||||
static TrackControls &Get( Track &track );
|
||||
static const TrackControls &Get( const Track &track );
|
||||
|
||||
explicit
|
||||
TrackControls( std::shared_ptr<Track> pTrack );
|
||||
|
||||
|
@ -27,6 +27,16 @@ TrackVRulerControls::~TrackVRulerControls()
|
||||
{
|
||||
}
|
||||
|
||||
TrackVRulerControls &TrackVRulerControls::Get( Track &track )
|
||||
{
|
||||
return *track.GetVRulerControls();
|
||||
}
|
||||
|
||||
const TrackVRulerControls &TrackVRulerControls::Get( const Track &track )
|
||||
{
|
||||
return *track.GetVRulerControls();
|
||||
}
|
||||
|
||||
std::shared_ptr<Track> TrackVRulerControls::DoFindTrack()
|
||||
{
|
||||
return mwTrack.lock();
|
||||
|
@ -19,6 +19,7 @@ class wxDC;
|
||||
const int kGuard = 5; // 5 pixels to reduce risk of VZooming accidentally
|
||||
|
||||
class TrackVRulerControls /* not final */ : public CommonTrackPanelCell
|
||||
, public std::enable_shared_from_this< TrackVRulerControls >
|
||||
{
|
||||
public:
|
||||
explicit
|
||||
@ -26,6 +27,9 @@ public:
|
||||
|
||||
virtual ~TrackVRulerControls() = 0;
|
||||
|
||||
static TrackVRulerControls &Get( Track& );
|
||||
static const TrackVRulerControls &Get( const Track& );
|
||||
|
||||
// Define a default hit test method, just for message and cursor
|
||||
std::vector<UIHandlePtr> HitTest
|
||||
(const TrackPanelMouseState &state,
|
||||
|
@ -75,10 +75,10 @@ std::vector<UIHandlePtr> Track::HitTest
|
||||
|
||||
std::shared_ptr<TrackPanelCell> Track::ContextMenuDelegate()
|
||||
{
|
||||
return FindTrack()->GetTrackControl();
|
||||
return TrackControls::Get( *this ).shared_from_this();
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackPanelCell> Track::GetTrackControl()
|
||||
std::shared_ptr<TrackPanelCell> Track::GetTrackControls()
|
||||
{
|
||||
if (!mpControls)
|
||||
// create on demand
|
||||
@ -86,12 +86,12 @@ std::shared_ptr<TrackPanelCell> Track::GetTrackControl()
|
||||
return mpControls;
|
||||
}
|
||||
|
||||
std::shared_ptr<const TrackPanelCell> Track::GetTrackControl() const
|
||||
std::shared_ptr<const TrackPanelCell> Track::GetTrackControls() const
|
||||
{
|
||||
return const_cast< Track* >( this )->GetTrackControl();
|
||||
return const_cast< Track* >( this )->GetTrackControls();
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackVRulerControls> Track::GetVRulerControl()
|
||||
std::shared_ptr<TrackVRulerControls> Track::GetVRulerControls()
|
||||
{
|
||||
if (!mpVRulerContols)
|
||||
// create on demand
|
||||
@ -99,9 +99,9 @@ std::shared_ptr<TrackVRulerControls> Track::GetVRulerControl()
|
||||
return mpVRulerContols;
|
||||
}
|
||||
|
||||
std::shared_ptr<const TrackVRulerControls> Track::GetVRulerControl() const
|
||||
std::shared_ptr<const TrackVRulerControls> Track::GetVRulerControls() const
|
||||
{
|
||||
return const_cast< Track* >( this )->GetVRulerControl();
|
||||
return const_cast< Track* >( this )->GetVRulerControls();
|
||||
}
|
||||
|
||||
#include "../../TrackPanelResizeHandle.h"
|
||||
|
Loading…
x
Reference in New Issue
Block a user