1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-18 17:10:05 +02:00

WaveTrackView does not depend on SpectrumView, WaveformView

This commit is contained in:
Paul Licameli 2019-07-09 10:18:43 -04:00
parent 22dbe69f5c
commit d7a0fa72db
6 changed files with 65 additions and 25 deletions

View File

@ -67,6 +67,11 @@ void SpectrumView::DoSetMinimized( bool minimized )
TrackView::DoSetMinimized( minimized ); TrackView::DoSetMinimized( minimized );
} }
WaveTrackViewConstants::Display SpectrumView::SubViewType() const
{
return WaveTrackViewConstants::Spectrum;
}
std::shared_ptr<TrackVRulerControls> SpectrumView::DoGetVRulerControls() std::shared_ptr<TrackVRulerControls> SpectrumView::DoGetVRulerControls()
{ {
return std::make_shared<SpectrumVRulerControls>( shared_from_this() ); return std::make_shared<SpectrumVRulerControls>( shared_from_this() );
@ -635,3 +640,9 @@ void SpectrumView::Draw(
} }
CommonTrackView::Draw( context, rect, iPass ); CommonTrackView::Draw( context, rect, iPass );
} }
static const WaveTrackSubViews::RegisteredFactory key{
[]( WaveTrackView &view ){
return std::make_shared< SpectrumView >( view.FindTrack() );
}
};

View File

@ -11,19 +11,21 @@ Paul Licameli split from WaveTrackView.h
#ifndef __AUDACITY_SPECTRUM_VIEW__ #ifndef __AUDACITY_SPECTRUM_VIEW__
#define __AUDACITY_SPECTRUM_VIEW__ #define __AUDACITY_SPECTRUM_VIEW__
#include "../../../ui/CommonTrackView.h" // to inherit #include "WaveTrackView.h" // to inherit
class WaveTrack; class WaveTrack;
class SpectrumView final : public CommonTrackView class SpectrumView final : public WaveTrackSubView
{ {
SpectrumView( const SpectrumView& ) = delete; SpectrumView( const SpectrumView& ) = delete;
SpectrumView &operator=( const SpectrumView& ) = delete; SpectrumView &operator=( const SpectrumView& ) = delete;
public: public:
using CommonTrackView::CommonTrackView; using WaveTrackSubView::WaveTrackSubView;
~SpectrumView() override; ~SpectrumView() override;
virtual WaveTrackViewConstants::Display SubViewType() const override;
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override; std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;

View File

@ -17,9 +17,6 @@ Paul Licameli split from TrackPanel.cpp
#include "../../../../WaveClip.h" #include "../../../../WaveClip.h"
#include "../../../../WaveTrack.h" #include "../../../../WaveTrack.h"
#include "SpectrumView.h"
#include "WaveformView.h"
#include "../../../../TrackArtist.h" #include "../../../../TrackArtist.h"
#include "../../../../TrackPanelDrawingContext.h" #include "../../../../TrackPanelDrawingContext.h"
#include "../../../../TrackPanelMouseEvent.h" #include "../../../../TrackPanelMouseEvent.h"
@ -30,9 +27,8 @@ Paul Licameli split from TrackPanel.cpp
WaveTrackView::WaveTrackView( const std::shared_ptr<Track> &pTrack ) WaveTrackView::WaveTrackView( const std::shared_ptr<Track> &pTrack )
: CommonTrackView{ pTrack } : CommonTrackView{ pTrack }
, mWaveformView{ std::make_shared< WaveformView >( pTrack ) }
, mSpectrumView{ std::make_shared< SpectrumView >( pTrack ) }
{ {
WaveTrackSubViews::BuildAll();
} }
WaveTrackView::~WaveTrackView() WaveTrackView::~WaveTrackView()
@ -82,12 +78,18 @@ WaveTrackView::DoDetailedHitTest
auto WaveTrackView::GetSubViews( const wxRect &rect ) -> Refinement auto WaveTrackView::GetSubViews( const wxRect &rect ) -> Refinement
{ {
auto wt = static_cast<WaveTrack*>( FindTrack().get() ); auto wt = static_cast<WaveTrack*>( FindTrack().get() );
auto display = wt->GetDisplay();
std::shared_ptr<TrackView> pSubView;
WaveTrackSubViews::ForEach( [&,display]( WaveTrackSubView &subView ){
if ( subView.SubViewType() == display )
pSubView = subView.shared_from_this();
} );
if ( !pSubView )
return {};
return { return {
{ {
rect.GetTop(), rect.GetTop(),
wt->GetDisplay() == WaveTrackViewConstants::Waveform pSubView
? mWaveformView
: mSpectrumView
} }
}; };
} }
@ -95,11 +97,10 @@ auto WaveTrackView::GetSubViews( const wxRect &rect ) -> Refinement
void WaveTrackView::DoSetMinimized( bool minimized ) void WaveTrackView::DoSetMinimized( bool minimized )
{ {
// May come here. Invoke also on sub-views. // May come here. Invoke also on sub-views.
if ( mWaveformView )
mWaveformView->DoSetMinimized( minimized );
if ( mSpectrumView )
mSpectrumView->DoSetMinimized( minimized );
TrackView::DoSetMinimized( minimized ); TrackView::DoSetMinimized( minimized );
WaveTrackSubViews::ForEach( [minimized](WaveTrackSubView &subView){
subView.DoSetMinimized( minimized );
} );
} }
using DoGetWaveTrackView = DoGetView::Override< WaveTrack >; using DoGetWaveTrackView = DoGetView::Override< WaveTrack >;
@ -305,10 +306,9 @@ ClipParameters::ClipParameters
void WaveTrackView::Reparent( const std::shared_ptr<Track> &parent ) void WaveTrackView::Reparent( const std::shared_ptr<Track> &parent )
{ {
CommonTrackView::Reparent( parent ); CommonTrackView::Reparent( parent );
if ( mWaveformView ) WaveTrackSubViews::ForEach( [&parent](WaveTrackSubView &subView){
mWaveformView->Reparent( parent ); subView.Reparent( parent );
if ( mSpectrumView ) } );
mSpectrumView->Reparent( parent );
} }
void WaveTrackView::Draw( void WaveTrackView::Draw(

View File

@ -12,10 +12,26 @@ Paul Licameli split from class WaveTrack
#define __AUDACITY_WAVE_TRACK_VIEW__ #define __AUDACITY_WAVE_TRACK_VIEW__
#include "../../../ui/CommonTrackView.h" #include "../../../ui/CommonTrackView.h"
#include "../../../../ClientData.h"
namespace WaveTrackViewConstants{ enum Display : int; }
class WaveTrack; class WaveTrack;
class WaveTrackSubView : public CommonTrackView
{
public:
using CommonTrackView::CommonTrackView;
virtual WaveTrackViewConstants::Display SubViewType() const = 0;
};
class WaveTrackView final : public CommonTrackView class WaveTrackView;
using WaveTrackSubViews = ClientData::Site<
WaveTrackView, WaveTrackSubView, ClientData::SkipCopying, std::shared_ptr
>;
class WaveTrackView final
: public CommonTrackView
, public WaveTrackSubViews
{ {
WaveTrackView( const WaveTrackView& ) = delete; WaveTrackView( const WaveTrackView& ) = delete;
WaveTrackView &operator=( const WaveTrackView& ) = delete; WaveTrackView &operator=( const WaveTrackView& ) = delete;
@ -55,8 +71,6 @@ private:
protected: protected:
void DoSetMinimized( bool minimized ) override; void DoSetMinimized( bool minimized ) override;
std::shared_ptr< CommonTrackView > mWaveformView, mSpectrumView;
}; };
// Helper for drawing routines // Helper for drawing routines

View File

@ -125,6 +125,11 @@ void WaveformView::DoSetMinimized( bool minimized )
TrackView::DoSetMinimized( minimized ); TrackView::DoSetMinimized( minimized );
} }
WaveTrackViewConstants::Display WaveformView::SubViewType() const
{
return WaveTrackViewConstants::Waveform;
}
std::shared_ptr<TrackVRulerControls> WaveformView::DoGetVRulerControls() std::shared_ptr<TrackVRulerControls> WaveformView::DoGetVRulerControls()
{ {
return std::make_shared<WaveformVRulerControls>( shared_from_this() ); return std::make_shared<WaveformVRulerControls>( shared_from_this() );
@ -1074,3 +1079,9 @@ void WaveformView::Draw(
} }
CommonTrackView::Draw( context, rect, iPass ); CommonTrackView::Draw( context, rect, iPass );
} }
static const WaveTrackSubViews::RegisteredFactory key{
[]( WaveTrackView &view ){
return std::make_shared< WaveformView >( view.FindTrack() );
}
};

View File

@ -11,22 +11,24 @@ Paul Licameli split from WaveTrackView.h
#ifndef __AUDACITY_WAVEFORM_VIEW__ #ifndef __AUDACITY_WAVEFORM_VIEW__
#define __AUDACITY_WAVEFORM_VIEW__ #define __AUDACITY_WAVEFORM_VIEW__
#include "../../../ui/CommonTrackView.h" // to inherit #include "WaveTrackView.h" // to inherit
class WaveTrack; class WaveTrack;
class CutlineHandle; class CutlineHandle;
class SampleHandle; class SampleHandle;
class EnvelopeHandle; class EnvelopeHandle;
class WaveformView final : public CommonTrackView class WaveformView final : public WaveTrackSubView
{ {
WaveformView( const WaveformView& ) = delete; WaveformView( const WaveformView& ) = delete;
WaveformView &operator=( const WaveformView& ) = delete; WaveformView &operator=( const WaveformView& ) = delete;
public: public:
using CommonTrackView::CommonTrackView; using WaveTrackSubView::WaveTrackSubView;
~WaveformView() override; ~WaveformView() override;
virtual WaveTrackViewConstants::Display SubViewType() const override;
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override; std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;