mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-02 17:09:26 +02:00
WaveTrackSubView has a back-pointer to the WaveTrackView
This commit is contained in:
parent
e3d9fd95ab
commit
d26b55ee3c
@ -649,6 +649,6 @@ void SpectrumView::Draw(
|
|||||||
|
|
||||||
static const WaveTrackSubViews::RegisteredFactory key{
|
static const WaveTrackSubViews::RegisteredFactory key{
|
||||||
[]( WaveTrackView &view ){
|
[]( WaveTrackView &view ){
|
||||||
return std::make_shared< SpectrumView >( view.FindTrack() );
|
return std::make_shared< SpectrumView >( view );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -53,22 +53,13 @@ const WaveTrackView &WaveTrackView::Get( const WaveTrack &track )
|
|||||||
WaveTrackView::WaveTrackView( const std::shared_ptr<Track> &pTrack )
|
WaveTrackView::WaveTrackView( const std::shared_ptr<Track> &pTrack )
|
||||||
: CommonTrackView{ pTrack }
|
: CommonTrackView{ pTrack }
|
||||||
{
|
{
|
||||||
WaveTrackSubViews::BuildAll();
|
|
||||||
|
|
||||||
auto display = TracksPrefs::ViewModeChoice();
|
|
||||||
|
|
||||||
// Force creation always:
|
|
||||||
WaveformSettings &settings = static_cast< WaveTrack* >( pTrack.get() )
|
|
||||||
->GetIndependentWaveformSettings();
|
|
||||||
|
|
||||||
if (display == WaveTrackViewConstants::obsoleteWaveformDBDisplay) {
|
|
||||||
display = WaveTrackViewConstants::Waveform;
|
|
||||||
settings.scaleType = WaveformSettings::stLogarithmic;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mPlacements.resize( WaveTrackSubViews::size() );
|
WaveTrackSubView::WaveTrackSubView( WaveTrackView &waveTrackView )
|
||||||
|
: CommonTrackView( waveTrackView.FindTrack() )
|
||||||
SetDisplay( display );
|
{
|
||||||
|
mwWaveTrackView = std::static_pointer_cast<WaveTrackView>(
|
||||||
|
waveTrackView.shared_from_this() );
|
||||||
}
|
}
|
||||||
|
|
||||||
WaveTrackView::~WaveTrackView()
|
WaveTrackView::~WaveTrackView()
|
||||||
@ -128,6 +119,8 @@ WaveTrackView::DoDetailedHitTest
|
|||||||
|
|
||||||
auto WaveTrackView::GetDisplays() const -> std::vector<WaveTrackDisplay>
|
auto WaveTrackView::GetDisplays() const -> std::vector<WaveTrackDisplay>
|
||||||
{
|
{
|
||||||
|
BuildSubViews();
|
||||||
|
|
||||||
// Collect the display types of visible views and sort them by position
|
// Collect the display types of visible views and sort them by position
|
||||||
using Pair = std::pair< int, WaveTrackDisplay >;
|
using Pair = std::pair< int, WaveTrackDisplay >;
|
||||||
std::vector< Pair > pairs;
|
std::vector< Pair > pairs;
|
||||||
@ -146,6 +139,12 @@ auto WaveTrackView::GetDisplays() const -> std::vector<WaveTrackDisplay>
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WaveTrackView::SetDisplay(WaveTrackDisplay display)
|
void WaveTrackView::SetDisplay(WaveTrackDisplay display)
|
||||||
|
{
|
||||||
|
BuildSubViews();
|
||||||
|
DoSetDisplay( display );
|
||||||
|
}
|
||||||
|
|
||||||
|
void WaveTrackView::DoSetDisplay(WaveTrackDisplay display)
|
||||||
{
|
{
|
||||||
size_t ii = 0;
|
size_t ii = 0;
|
||||||
WaveTrackSubViews::ForEach( [&,display]( WaveTrackSubView &subView ){
|
WaveTrackSubViews::ForEach( [&,display]( WaveTrackSubView &subView ){
|
||||||
@ -159,6 +158,8 @@ void WaveTrackView::SetDisplay(WaveTrackDisplay display)
|
|||||||
|
|
||||||
auto WaveTrackView::GetSubViews( const wxRect &rect ) -> Refinement
|
auto WaveTrackView::GetSubViews( const wxRect &rect ) -> Refinement
|
||||||
{
|
{
|
||||||
|
BuildSubViews();
|
||||||
|
|
||||||
Refinement results;
|
Refinement results;
|
||||||
|
|
||||||
// Collect the visible views in the right sequence
|
// Collect the visible views in the right sequence
|
||||||
@ -209,6 +210,8 @@ auto WaveTrackView::GetSubViews( const wxRect &rect ) -> Refinement
|
|||||||
std::vector< std::shared_ptr< WaveTrackSubView > >
|
std::vector< std::shared_ptr< WaveTrackSubView > >
|
||||||
WaveTrackView::GetAllSubViews()
|
WaveTrackView::GetAllSubViews()
|
||||||
{
|
{
|
||||||
|
BuildSubViews();
|
||||||
|
|
||||||
std::vector< std::shared_ptr< WaveTrackSubView > > results;
|
std::vector< std::shared_ptr< WaveTrackSubView > > results;
|
||||||
WaveTrackSubViews::ForEach( [&]( WaveTrackSubView &subView ){
|
WaveTrackSubViews::ForEach( [&]( WaveTrackSubView &subView ){
|
||||||
results.push_back( std::static_pointer_cast<WaveTrackSubView>(
|
results.push_back( std::static_pointer_cast<WaveTrackSubView>(
|
||||||
@ -219,6 +222,8 @@ WaveTrackView::GetAllSubViews()
|
|||||||
|
|
||||||
void WaveTrackView::DoSetMinimized( bool minimized )
|
void WaveTrackView::DoSetMinimized( bool minimized )
|
||||||
{
|
{
|
||||||
|
BuildSubViews();
|
||||||
|
|
||||||
// May come here. Invoke also on sub-views.
|
// May come here. Invoke also on sub-views.
|
||||||
TrackView::DoSetMinimized( minimized );
|
TrackView::DoSetMinimized( minimized );
|
||||||
WaveTrackSubViews::ForEach( [minimized](WaveTrackSubView &subView){
|
WaveTrackSubViews::ForEach( [minimized](WaveTrackSubView &subView){
|
||||||
@ -428,12 +433,41 @@ ClipParameters::ClipParameters
|
|||||||
|
|
||||||
void WaveTrackView::Reparent( const std::shared_ptr<Track> &parent )
|
void WaveTrackView::Reparent( const std::shared_ptr<Track> &parent )
|
||||||
{
|
{
|
||||||
|
// BuildSubViews(); // not really needed
|
||||||
CommonTrackView::Reparent( parent );
|
CommonTrackView::Reparent( parent );
|
||||||
WaveTrackSubViews::ForEach( [&parent](WaveTrackSubView &subView){
|
WaveTrackSubViews::ForEach( [&parent](WaveTrackSubView &subView){
|
||||||
subView.Reparent( parent );
|
subView.Reparent( parent );
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WaveTrackView::BuildSubViews() const
|
||||||
|
{
|
||||||
|
if ( WaveTrackSubViews::size() == 0) {
|
||||||
|
// On-demand steps that can't happen in the constructor
|
||||||
|
auto pThis = const_cast<WaveTrackView*>( this );
|
||||||
|
pThis->BuildAll();
|
||||||
|
pThis->mPlacements.resize( WaveTrackSubViews::size() );
|
||||||
|
bool minimized = GetMinimized();
|
||||||
|
pThis->WaveTrackSubViews::ForEach( [&]( WaveTrackSubView &subView ){
|
||||||
|
subView.DoSetMinimized( minimized );
|
||||||
|
} );
|
||||||
|
|
||||||
|
auto pTrack = pThis->FindTrack();
|
||||||
|
auto display = TracksPrefs::ViewModeChoice();
|
||||||
|
|
||||||
|
// Force creation always:
|
||||||
|
WaveformSettings &settings = static_cast< WaveTrack* >( pTrack.get() )
|
||||||
|
->GetIndependentWaveformSettings();
|
||||||
|
|
||||||
|
if (display == WaveTrackViewConstants::obsoleteWaveformDBDisplay) {
|
||||||
|
display = WaveTrackViewConstants::Waveform;
|
||||||
|
settings.scaleType = WaveformSettings::stLogarithmic;
|
||||||
|
}
|
||||||
|
|
||||||
|
pThis->DoSetDisplay( display );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void WaveTrackView::Draw(
|
void WaveTrackView::Draw(
|
||||||
TrackPanelDrawingContext &context,
|
TrackPanelDrawingContext &context,
|
||||||
const wxRect &rect, unsigned iPass )
|
const wxRect &rect, unsigned iPass )
|
||||||
|
@ -16,10 +16,13 @@ Paul Licameli split from class WaveTrack
|
|||||||
namespace WaveTrackViewConstants{ enum Display : int; }
|
namespace WaveTrackViewConstants{ enum Display : int; }
|
||||||
|
|
||||||
class WaveTrack;
|
class WaveTrack;
|
||||||
|
class WaveTrackView;
|
||||||
|
|
||||||
class WaveTrackSubView : public CommonTrackView
|
class WaveTrackSubView : public CommonTrackView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using CommonTrackView::CommonTrackView;
|
explicit
|
||||||
|
WaveTrackSubView( WaveTrackView &waveTrackView );
|
||||||
|
|
||||||
virtual WaveTrackViewConstants::Display SubViewType() const = 0;
|
virtual WaveTrackViewConstants::Display SubViewType() const = 0;
|
||||||
|
|
||||||
@ -31,6 +34,8 @@ public:
|
|||||||
const AudacityProject *pProject, int currentTool, bool bMultiTool,
|
const AudacityProject *pProject, int currentTool, bool bMultiTool,
|
||||||
const std::shared_ptr<WaveTrack> &wt,
|
const std::shared_ptr<WaveTrack> &wt,
|
||||||
CommonTrackView &view);
|
CommonTrackView &view);
|
||||||
|
private:
|
||||||
|
std::weak_ptr<WaveTrackView> mwWaveTrackView;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct WaveTrackSubViewPlacement {
|
struct WaveTrackSubViewPlacement {
|
||||||
@ -91,6 +96,9 @@ public:
|
|||||||
std::vector< std::shared_ptr< WaveTrackSubView > > GetAllSubViews();
|
std::vector< std::shared_ptr< WaveTrackSubView > > GetAllSubViews();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void BuildSubViews() const;
|
||||||
|
void DoSetDisplay(WaveTrackDisplay display);
|
||||||
|
|
||||||
// TrackPanelDrawable implementation
|
// TrackPanelDrawable implementation
|
||||||
void Draw(
|
void Draw(
|
||||||
TrackPanelDrawingContext &context,
|
TrackPanelDrawingContext &context,
|
||||||
|
@ -1084,6 +1084,6 @@ void WaveformView::Draw(
|
|||||||
|
|
||||||
static const WaveTrackSubViews::RegisteredFactory key{
|
static const WaveTrackSubViews::RegisteredFactory key{
|
||||||
[]( WaveTrackView &view ){
|
[]( WaveTrackView &view ){
|
||||||
return std::make_shared< WaveformView >( view.FindTrack() );
|
return std::make_shared< WaveformView >( view );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user