1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-02 00:29:41 +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

@ -97,15 +97,6 @@ WaveTrack::WaveTrack(const std::shared_ptr<DirManager> &projDirManager, sampleFo
}
}
// Force creation always:
WaveformSettings &settings = GetIndependentWaveformSettings();
mDisplay = TracksPrefs::ViewModeChoice();
if (mDisplay == WaveTrackViewConstants::obsoleteWaveformDBDisplay) {
mDisplay = WaveTrackViewConstants::Waveform;
settings.scaleType = WaveformSettings::stLogarithmic;
}
mLegacyProjectFileOffset = 0;
mFormat = format;
@ -161,7 +152,6 @@ void WaveTrack::Init(const WaveTrack &orig)
mOldGain[1] = 0.0;
SetDefaultName(orig.GetDefaultName());
SetName(orig.GetName());
mDisplay = orig.mDisplay;
mDisplayMin = orig.mDisplayMin;
mDisplayMax = orig.mDisplayMax;
mSpectrumMin = orig.mSpectrumMin;
@ -196,7 +186,6 @@ void WaveTrack::Merge(const Track &orig)
{
orig.TypeSwitch( [&](const WaveTrack *pwt) {
const WaveTrack &wt = *pwt;
mDisplay = wt.mDisplay;
mGain = wt.mGain;
mPan = wt.mPan;
mDisplayMin = wt.mDisplayMin;

View File

@ -17,7 +17,6 @@
#include <wx/longlong.h>
#include "WaveTrackLocation.h"
#include "tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h"
class ProgressDialog;
@ -523,17 +522,12 @@ private:
// Set the unique autosave ID
void SetAutoSaveIdent(int id);
using WaveTrackDisplay = WaveTrackViewConstants::Display;
int GetLastScaleType() const { return mLastScaleType; }
void SetLastScaleType() const;
int GetLastdBRange() const { return mLastdBRange; }
void SetLastdBRange() const;
WaveTrackDisplay GetDisplay() const { return mDisplay; }
void SetDisplay(WaveTrackDisplay display) { mDisplay = display; }
void GetDisplayBounds(float *min, float *max) const;
void SetDisplayBounds(float min, float max) const;
void GetSpectrumBounds(float *min, float *max) const;
@ -568,7 +562,6 @@ private:
mutable float mSpectrumMin;
mutable float mSpectrumMax;
WaveTrackDisplay mDisplay;
mutable int mLastScaleType; // last scale type choice
mutable int mLastdBRange;
mutable std::vector <Location> mDisplayLocationsCache;

View File

@ -44,7 +44,8 @@ SetTrackAudioCommand and SetTrackVisualsCommand.
#include "../prefs/SpectrogramSettings.h"
#include "../Shuttle.h"
#include "../ShuttleGui.h"
#include "../tracks/ui/TrackView.h"
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h"
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h"
#include "CommandContext.h"
SetTrackBase::SetTrackBase(){
@ -353,7 +354,7 @@ bool SetTrackVisualsCommand::ApplyInner(const CommandContext & context, Track *
TrackView::Get( *t ).SetHeight( mHeight );
if( wt && bHasDisplayType )
wt->SetDisplay(
WaveTrackView::Get( *wt ).SetDisplay(
(mDisplayType == kWaveform) ?
WaveTrackViewConstants::Waveform
: WaveTrackViewConstants::Spectrum

View File

@ -68,6 +68,8 @@ greater use in future.
#include "../widgets/ProgressDialog.h"
#include "../ondemand/ODManager.h"
#include "TimeWarper.h"
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h"
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h"
#include "../widgets/HelpSystem.h"
#include "../widgets/NumericTextCtrl.h"
#include "../widgets/AudacityMessageBox.h"
@ -2360,7 +2362,8 @@ void Effect::Preview(bool dryOnly)
mixLeft->Offset(-mixLeft->GetStartTime());
mixLeft->SetSelected(true);
mixLeft->SetDisplay(WaveTrackViewConstants::NoDisplay);
WaveTrackView::Get( *mixLeft )
.SetDisplay(WaveTrackViewConstants::NoDisplay);
auto pLeft = mTracks->Add( mixLeft );
Track *pRight{};
if (mixRight) {
@ -2375,8 +2378,8 @@ void Effect::Preview(bool dryOnly)
if (src->GetSelected() || mPreviewWithNotSelected) {
auto dest = src->Copy(mT0, t1);
dest->SetSelected(src->GetSelected());
static_cast<WaveTrack*>(dest.get())
->SetDisplay(WaveTrackViewConstants::NoDisplay);
WaveTrackView::Get( *static_cast<WaveTrack*>(dest.get()) )
.SetDisplay(WaveTrackViewConstants::NoDisplay);
mTracks->Add( dest );
}
}

View File

@ -73,6 +73,8 @@ effects from this one class.
#include "../../wxFileNameWrapper.h"
#include "../../prefs/GUIPrefs.h"
#include "../../prefs/WaveformSettings.h"
#include "../../tracks/playabletrack/wavetrack/ui/WaveTrackView.h"
#include "../../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h"
#include "../../widgets/NumericTextCtrl.h"
#include "../../widgets/ProgressDialog.h"
@ -542,7 +544,8 @@ bool NyquistEffect::Init()
for ( auto t :
TrackList::Get( *project ).Selected< const WaveTrack >() ) {
if (t->GetDisplay() != WaveTrackViewConstants::Spectrum ||
if (WaveTrackView::Get(*t).GetDisplay()
!= WaveTrackViewConstants::Spectrum ||
!(t->GetSpectrogramSettings().SpectralSelectionEnabled())) {
bAllowSpectralEditing = false;
break;
@ -1066,7 +1069,7 @@ bool NyquistEffect::ProcessOne()
[&](const WaveTrack *wt) {
type = wxT("wave");
spectralEditp = mCurTrack[0]->GetSpectrogramSettings().SpectralSelectionEnabled()? wxT("T") : wxT("NIL");
switch (wt->GetDisplay())
switch ( WaveTrackView::Get( *wt ).GetDisplay() )
{
case Waveform:
view = (mCurTrack[0]->GetWaveformSettings().scaleType == 0) ? wxT("\"Waveform\"") : wxT("\"Waveform (dB)\"");

View File

@ -21,6 +21,8 @@
#include "../commands/CommandManager.h"
#include "../toolbars/ControlToolBar.h"
#include "../tracks/ui/SelectHandle.h"
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h"
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h"
// private helper classes and functions
namespace {
@ -33,7 +35,7 @@ void DoNextPeakFrequency(AudacityProject &project, bool up)
// Find the first selected wave track that is in a spectrogram view.
const WaveTrack *pTrack {};
for ( auto wt : tracks.Selected< const WaveTrack >() ) {
const int display = wt->GetDisplay();
const auto display = WaveTrackView::Get( *wt ).GetDisplay();
if (display == WaveTrackViewConstants::Spectrum) {
pTrack = wt;
break;

View File

@ -31,6 +31,7 @@
#include "../TrackPanel.h"
#include "../WaveTrack.h"
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h"
#include <algorithm>
@ -48,7 +49,7 @@ SpectrumPrefs::SpectrumPrefs(wxWindow * parent, wxWindowID winid, WaveTrack *wt)
wt->GetSpectrumBounds(&mOrigMin, &mOrigMax);
mTempSettings.maxFreq = mOrigMax;
mTempSettings.minFreq = mOrigMin;
mOrigDisplay = mWt->GetDisplay();
mOrigDisplay = WaveTrackView::Get( *mWt ).GetDisplay();
}
else {
mTempSettings = mOrigSettings = SpectrogramSettings::defaults();
@ -423,7 +424,7 @@ void SpectrumPrefs::Rollback()
if (mWt && isOpenPage) {
auto channels = TrackList::Channels(mWt);
for (auto channel : channels)
channel->SetDisplay(mOrigDisplay);
WaveTrackView::Get( *channel ).SetDisplay( mOrigDisplay );
}
if (isOpenPage) {
@ -470,7 +471,8 @@ void SpectrumPrefs::Preview()
if (mWt && isOpenPage) {
for (auto channel : TrackList::Channels(mWt))
channel->SetDisplay(WaveTrackViewConstants::Spectrum);
WaveTrackView::Get( *channel )
.SetDisplay( WaveTrackViewConstants::Spectrum );
}
if (isOpenPage) {

View File

@ -27,6 +27,8 @@ Paul Licameli
#include "../TrackPanel.h"
#include "../ShuttleGui.h"
#include "../WaveTrack.h"
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h"
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h"
WaveformPrefs::WaveformPrefs(wxWindow * parent, wxWindowID winid, WaveTrack *wt)
/* i18n-hint: A waveform is a visual representation of vibration */
@ -184,7 +186,8 @@ bool WaveformPrefs::Commit()
if (mWt && isOpenPage) {
for (auto channel : TrackList::Channels(mWt))
channel->SetDisplay(WaveTrackViewConstants::Waveform);
WaveTrackView::Get( *channel )
.SetDisplay( WaveTrackViewConstants::Waveform );
}
if (isOpenPage) {

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"