1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-10-21 22:12:58 +02:00

Move display type from WaveTrack to WaveTrackView

This commit is contained in:
Paul Licameli
2019-07-09 10:29:29 -04:00
parent c28e47bd38
commit 6ccca16a75
13 changed files with 76 additions and 40 deletions

View File

@@ -15,6 +15,7 @@ Paul Licameli split from WaveTrackView.cpp
#include "SpectrumVRulerControls.h"
#include "WaveTrackView.h"
#include "WaveTrackViewConstants.h"
#include "../../../../AColor.h"
#include "../../../../Prefs.h"

View File

@@ -16,7 +16,7 @@ Paul Licameli split from TrackPanel.cpp
#include "../../ui/PlayableTrackButtonHandles.h"
#include "WaveTrackSliderHandles.h"
#include "../../../ui/TrackView.h"
#include "WaveTrackView.h"
#include "../../../../AudioIOBase.h"
#include "../../../../CellularPanel.h"
#include "../../../../Menus.h"
@@ -599,7 +599,7 @@ void WaveTrackMenuTable::InitMenu(Menu *pMenu, void *pUserData)
std::vector<int> checkedIds;
const int display = pTrack->GetDisplay();
const auto display = WaveTrackView::Get( *pTrack ).GetDisplay();
checkedIds.push_back(
display == WaveTrackViewConstants::Waveform
? (pTrack->GetWaveformSettings().isLinear()
@@ -702,7 +702,9 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
#endif
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpTrack);
if( pTrack && pTrack->GetDisplay() != WaveTrackViewConstants::Spectrum ){
if( pTrack &&
WaveTrackView::Get( *pTrack ).GetDisplay()
!= WaveTrackViewConstants::Spectrum ){
POPUP_MENU_SEPARATOR()
POPUP_MENU_SUB_MENU(OnWaveColorID, _("&Wave Color"), WaveColorMenuTable)
}
@@ -723,7 +725,7 @@ void WaveTrackMenuTable::OnSetDisplay(wxCommandEvent & event)
const auto pTrack = static_cast<WaveTrack*>(mpData->pTrack);
bool linear = false;
WaveTrack::WaveTrackDisplay id;
WaveTrackView::WaveTrackDisplay id;
switch (idInt) {
default:
case OnWaveformID:
@@ -734,14 +736,15 @@ void WaveTrackMenuTable::OnSetDisplay(wxCommandEvent & event)
id = Spectrum; break;
}
const bool wrongType = pTrack->GetDisplay() != id;
const bool wrongType = WaveTrackView::Get( *pTrack ).GetDisplay() != id;
const bool wrongScale =
(id == Waveform &&
pTrack->GetWaveformSettings().isLinear() != linear);
if (wrongType || wrongScale) {
for (auto channel : TrackList::Channels(pTrack)) {
channel->SetLastScaleType();
channel->SetDisplay(WaveTrack::WaveTrackDisplay(id));
WaveTrackView::Get( *channel )
.SetDisplay(WaveTrackView::WaveTrackDisplay(id));
if (wrongScale)
channel->GetIndependentWaveformSettings().scaleType = linear
? WaveformSettings::stLinear
@@ -876,8 +879,8 @@ void WaveTrackMenuTable::OnMergeStereo(wxCommandEvent &)
// Set NEW track heights and minimized state
auto
&view = TrackView::Get( *pTrack ),
&partnerView = TrackView::Get( *partner );
&view = WaveTrackView::Get( *pTrack ),
&partnerView = WaveTrackView::Get( *partner );
view.SetMinimized(false);
partnerView.SetMinimized(false);
int AverageHeight = (view.GetHeight() + partnerView.GetHeight()) / 2;
@@ -886,6 +889,8 @@ void WaveTrackMenuTable::OnMergeStereo(wxCommandEvent &)
view.SetMinimized(bBothMinimizedp);
partnerView.SetMinimized(bBothMinimizedp);
partnerView.SetDisplay( view.GetDisplay() );
//On Demand - join the queues together.
if (ODManager::IsInstanceCreated())
if (!ODManager::Instance()

View File

@@ -22,6 +22,8 @@ Paul Licameli split from TrackPanel.cpp
#include "../../../../TrackPanelMouseEvent.h"
#include "../../../../ViewInfo.h"
#include "../../../../prefs/SpectrogramSettings.h"
#include "../../../../prefs/WaveformSettings.h"
#include "../../../../prefs/TracksPrefs.h"
#include "../../../ui/TimeShiftHandle.h"
@@ -39,12 +41,34 @@ WaveTrackView::WaveTrackView( const std::shared_ptr<Track> &pTrack )
: CommonTrackView{ pTrack }
{
WaveTrackSubViews::BuildAll();
mDisplay = TracksPrefs::ViewModeChoice();
// Force creation always:
WaveformSettings &settings = static_cast< WaveTrack* >( pTrack.get() )
->GetIndependentWaveformSettings();
if (mDisplay == WaveTrackViewConstants::obsoleteWaveformDBDisplay) {
mDisplay = WaveTrackViewConstants::Waveform;
settings.scaleType = WaveformSettings::stLogarithmic;
}
}
WaveTrackView::~WaveTrackView()
{
}
void WaveTrackView::CopyTo( Track &track ) const
{
TrackView::CopyTo( track );
auto &other = TrackView::Get( track );
if ( const auto pOther = dynamic_cast< WaveTrackView* >( &other ) ) {
// only one field is important to preserve in undo/redo history
pOther->mDisplay = mDisplay;
}
}
std::vector<UIHandlePtr> WaveTrackView::DetailedHitTest
(const TrackPanelMouseState &st,
const AudacityProject *pProject, int currentTool, bool bMultiTool)
@@ -87,8 +111,7 @@ WaveTrackView::DoDetailedHitTest
auto WaveTrackView::GetSubViews( const wxRect &rect ) -> Refinement
{
auto wt = static_cast<WaveTrack*>( FindTrack().get() );
auto display = wt->GetDisplay();
auto display = mDisplay;
std::shared_ptr<TrackView> pSubView;
WaveTrackSubViews::ForEach( [&,display]( WaveTrackSubView &subView ){
if ( subView.SubViewType() == display )

View File

@@ -44,6 +44,9 @@ public:
WaveTrackView( const std::shared_ptr<Track> &pTrack );
~WaveTrackView() override;
// Preserve some view state too for undo/redo purposes
void CopyTo( Track &track ) const override;
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
// CommonTrackView implementation
@@ -58,6 +61,11 @@ public:
const std::shared_ptr<WaveTrack> &wt,
CommonTrackView &view);
using WaveTrackDisplay = WaveTrackViewConstants::Display;
WaveTrackDisplay GetDisplay() const { return mDisplay; }
void SetDisplay(WaveTrackDisplay display) { mDisplay = display; }
private:
// TrackPanelDrawable implementation
void Draw(
@@ -74,6 +82,8 @@ private:
protected:
void DoSetMinimized( bool minimized ) override;
WaveTrackDisplay mDisplay;
};
// Helper for drawing routines

View File

@@ -15,6 +15,7 @@ Paul Licameli split from WaveTrackView.cpp
#include "WaveformVRulerControls.h"
#include "WaveTrackView.h"
#include "WaveTrackViewConstants.h"
#include "CutlineHandle.h"
#include "SampleHandle.h"