mirror of
https://github.com/cookiengineer/audacity
synced 2026-01-10 06:37:06 +01:00
Hold safer shared_ptrs to tracks in MixerBoard
This commit is contained in:
@@ -165,7 +165,7 @@ END_EVENT_TABLE()
|
|||||||
|
|
||||||
MixerTrackCluster::MixerTrackCluster(wxWindow* parent,
|
MixerTrackCluster::MixerTrackCluster(wxWindow* parent,
|
||||||
MixerBoard* grandParent, AudacityProject* project,
|
MixerBoard* grandParent, AudacityProject* project,
|
||||||
PlayableTrack* pTrack,
|
const std::shared_ptr<PlayableTrack> &pTrack,
|
||||||
const wxPoint& pos /*= wxDefaultPosition*/,
|
const wxPoint& pos /*= wxDefaultPosition*/,
|
||||||
const wxSize& size /*= wxDefaultSize*/)
|
const wxSize& size /*= wxDefaultSize*/)
|
||||||
: wxPanelWrapper(parent, -1, pos, size)
|
: wxPanelWrapper(parent, -1, pos, size)
|
||||||
@@ -230,7 +230,7 @@ MixerTrackCluster::MixerTrackCluster(wxWindow* parent,
|
|||||||
// musical instrument image
|
// musical instrument image
|
||||||
ctrlPos.x += kLeftSideStackWidth + kInset; // + kInset to center it in right side stack
|
ctrlPos.x += kLeftSideStackWidth + kInset; // + kInset to center it in right side stack
|
||||||
ctrlSize.Set(MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH, MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH);
|
ctrlSize.Set(MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH, MUSICAL_INSTRUMENT_HEIGHT_AND_WIDTH);
|
||||||
wxBitmap* bitmap = mMixerBoard->GetMusicalInstrumentBitmap(mTrack);
|
wxBitmap* bitmap = mMixerBoard->GetMusicalInstrumentBitmap(mTrack.get());
|
||||||
wxASSERT(bitmap);
|
wxASSERT(bitmap);
|
||||||
mBitmapButton_MusicalInstrument =
|
mBitmapButton_MusicalInstrument =
|
||||||
safenew wxBitmapButton(this, ID_BITMAPBUTTON_MUSICAL_INSTRUMENT, *bitmap,
|
safenew wxBitmapButton(this, ID_BITMAPBUTTON_MUSICAL_INSTRUMENT, *bitmap,
|
||||||
@@ -329,7 +329,7 @@ MixerTrackCluster::MixerTrackCluster(wxWindow* parent,
|
|||||||
|
|
||||||
WaveTrack *MixerTrackCluster::GetWave() const
|
WaveTrack *MixerTrackCluster::GetWave() const
|
||||||
{
|
{
|
||||||
return dynamic_cast< WaveTrack * >( mTrack );
|
return dynamic_cast< WaveTrack * >( mTrack.get() );
|
||||||
}
|
}
|
||||||
|
|
||||||
WaveTrack *MixerTrackCluster::GetRight() const
|
WaveTrack *MixerTrackCluster::GetRight() const
|
||||||
@@ -344,7 +344,7 @@ WaveTrack *MixerTrackCluster::GetRight() const
|
|||||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||||
NoteTrack *MixerTrackCluster::GetNote() const
|
NoteTrack *MixerTrackCluster::GetNote() const
|
||||||
{
|
{
|
||||||
return dynamic_cast< NoteTrack * >( mTrack );
|
return dynamic_cast< NoteTrack * >( mTrack.get() );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -405,7 +405,7 @@ void MixerTrackCluster::HandleSliderGain(const bool bWantPushState /*= false*/)
|
|||||||
GetRight()->SetGain(fValue);
|
GetRight()->SetGain(fValue);
|
||||||
|
|
||||||
// Update the TrackPanel correspondingly.
|
// Update the TrackPanel correspondingly.
|
||||||
mProject->RefreshTPTrack(mTrack);
|
mProject->RefreshTPTrack(mTrack.get());
|
||||||
if (bWantPushState)
|
if (bWantPushState)
|
||||||
mProject->TP_PushState(_("Moved gain slider"), _("Gain"), UndoPush::CONSOLIDATE );
|
mProject->TP_PushState(_("Moved gain slider"), _("Gain"), UndoPush::CONSOLIDATE );
|
||||||
}
|
}
|
||||||
@@ -418,7 +418,7 @@ void MixerTrackCluster::HandleSliderVelocity(const bool bWantPushState /*= false
|
|||||||
GetNote()->SetVelocity(fValue);
|
GetNote()->SetVelocity(fValue);
|
||||||
|
|
||||||
// Update the TrackPanel correspondingly.
|
// Update the TrackPanel correspondingly.
|
||||||
mProject->RefreshTPTrack(mTrack);
|
mProject->RefreshTPTrack(mTrack.get());
|
||||||
if (bWantPushState)
|
if (bWantPushState)
|
||||||
mProject->TP_PushState(_("Moved velocity slider"), _("Velocity"), UndoPush::CONSOLIDATE);
|
mProject->TP_PushState(_("Moved velocity slider"), _("Velocity"), UndoPush::CONSOLIDATE);
|
||||||
}
|
}
|
||||||
@@ -433,7 +433,7 @@ void MixerTrackCluster::HandleSliderPan(const bool bWantPushState /*= false*/)
|
|||||||
GetRight()->SetPan(fValue);
|
GetRight()->SetPan(fValue);
|
||||||
|
|
||||||
// Update the TrackPanel correspondingly.
|
// Update the TrackPanel correspondingly.
|
||||||
mProject->RefreshTPTrack(mTrack);
|
mProject->RefreshTPTrack(mTrack.get());
|
||||||
|
|
||||||
if (bWantPushState)
|
if (bWantPushState)
|
||||||
mProject->TP_PushState(_("Moved pan slider"), _("Pan"), UndoPush::CONSOLIDATE );
|
mProject->TP_PushState(_("Moved pan slider"), _("Pan"), UndoPush::CONSOLIDATE );
|
||||||
@@ -465,7 +465,7 @@ void MixerTrackCluster::UpdateName()
|
|||||||
mStaticText_TrackName->SetToolTip(newName);
|
mStaticText_TrackName->SetToolTip(newName);
|
||||||
#endif
|
#endif
|
||||||
mBitmapButton_MusicalInstrument->SetBitmapLabel(
|
mBitmapButton_MusicalInstrument->SetBitmapLabel(
|
||||||
*(mMixerBoard->GetMusicalInstrumentBitmap(mTrack)));
|
*(mMixerBoard->GetMusicalInstrumentBitmap(mTrack.get())));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MixerTrackCluster::UpdateMute()
|
void MixerTrackCluster::UpdateMute()
|
||||||
@@ -683,7 +683,7 @@ wxColour MixerTrackCluster::GetTrackColor()
|
|||||||
|
|
||||||
void MixerTrackCluster::HandleSelect(bool bShiftDown, bool bControlDown)
|
void MixerTrackCluster::HandleSelect(bool bShiftDown, bool bControlDown)
|
||||||
{
|
{
|
||||||
mProject->HandleListSelection( mTrack, bShiftDown, bControlDown, true
|
mProject->HandleListSelection( mTrack.get(), bShiftDown, bControlDown, true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -758,7 +758,7 @@ void MixerTrackCluster::OnSlider_Pan(wxCommandEvent& WXUNUSED(event))
|
|||||||
|
|
||||||
void MixerTrackCluster::OnButton_Mute(wxCommandEvent& WXUNUSED(event))
|
void MixerTrackCluster::OnButton_Mute(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
mProject->HandleTrackMute(mTrack, mToggleButton_Mute->WasShiftDown());
|
mProject->HandleTrackMute(mTrack.get(), mToggleButton_Mute->WasShiftDown());
|
||||||
mToggleButton_Mute->SetAlternateIdx(mTrack->GetSolo() ? 1 : 0);
|
mToggleButton_Mute->SetAlternateIdx(mTrack->GetSolo() ? 1 : 0);
|
||||||
|
|
||||||
// Update the TrackPanel correspondingly.
|
// Update the TrackPanel correspondingly.
|
||||||
@@ -770,12 +770,12 @@ void MixerTrackCluster::OnButton_Mute(wxCommandEvent& WXUNUSED(event))
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
// Update only the changed track.
|
// Update only the changed track.
|
||||||
mProject->RefreshTPTrack(mTrack);
|
mProject->RefreshTPTrack(mTrack.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MixerTrackCluster::OnButton_Solo(wxCommandEvent& WXUNUSED(event))
|
void MixerTrackCluster::OnButton_Solo(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
mProject->HandleTrackSolo(mTrack, mToggleButton_Solo->WasShiftDown());
|
mProject->HandleTrackSolo(mTrack.get(), mToggleButton_Solo->WasShiftDown());
|
||||||
bool bIsSolo = mTrack->GetSolo();
|
bool bIsSolo = mTrack->GetSolo();
|
||||||
mToggleButton_Mute->SetAlternateIdx(bIsSolo ? 1 : 0);
|
mToggleButton_Mute->SetAlternateIdx(bIsSolo ? 1 : 0);
|
||||||
|
|
||||||
@@ -996,13 +996,14 @@ void MixerBoard::UpdateTrackClusters()
|
|||||||
while (pTrack) {
|
while (pTrack) {
|
||||||
if (auto pPlayableTrack = dynamic_cast<PlayableTrack*>(pTrack))
|
if (auto pPlayableTrack = dynamic_cast<PlayableTrack*>(pTrack))
|
||||||
{
|
{
|
||||||
|
auto spTrack = Track::Pointer<PlayableTrack>( pPlayableTrack );
|
||||||
if (nClusterIndex < nClusterCount)
|
if (nClusterIndex < nClusterCount)
|
||||||
{
|
{
|
||||||
// Already showing it.
|
// Already showing it.
|
||||||
// Track clusters are maintained in the same order as the WaveTracks.
|
// Track clusters are maintained in the same order as the WaveTracks.
|
||||||
// Track pointers can change for the "same" track for different states
|
// Track pointers can change for the "same" track for different states
|
||||||
// on the undo stack, so update the pointers and display name.
|
// on the undo stack, so update the pointers and display name.
|
||||||
mMixerTrackClusters[nClusterIndex]->mTrack = pPlayableTrack;
|
mMixerTrackClusters[nClusterIndex]->mTrack = spTrack;
|
||||||
// Assume linked track is wave or null
|
// Assume linked track is wave or null
|
||||||
mMixerTrackClusters[nClusterIndex]->UpdateForStateChange();
|
mMixerTrackClusters[nClusterIndex]->UpdateForStateChange();
|
||||||
}
|
}
|
||||||
@@ -1018,7 +1019,7 @@ void MixerBoard::UpdateTrackClusters()
|
|||||||
wxSize clusterSize(kMixerTrackClusterWidth, nClusterHeight);
|
wxSize clusterSize(kMixerTrackClusterWidth, nClusterHeight);
|
||||||
pMixerTrackCluster =
|
pMixerTrackCluster =
|
||||||
safenew MixerTrackCluster(mScrolledWindow, this, mProject,
|
safenew MixerTrackCluster(mScrolledWindow, this, mProject,
|
||||||
pPlayableTrack,
|
spTrack,
|
||||||
clusterPos, clusterSize);
|
clusterPos, clusterSize);
|
||||||
if (pMixerTrackCluster)
|
if (pMixerTrackCluster)
|
||||||
mMixerTrackClusters.Add(pMixerTrackCluster);
|
mMixerTrackClusters.Add(pMixerTrackCluster);
|
||||||
@@ -1404,7 +1405,7 @@ int MixerBoard::FindMixerTrackCluster(const PlayableTrack* pTrack,
|
|||||||
*hMixerTrackCluster = NULL;
|
*hMixerTrackCluster = NULL;
|
||||||
for (unsigned int i = 0; i < mMixerTrackClusters.GetCount(); i++)
|
for (unsigned int i = 0; i < mMixerTrackClusters.GetCount(); i++)
|
||||||
{
|
{
|
||||||
if (mMixerTrackClusters[i]->mTrack == pTrack)
|
if (mMixerTrackClusters[i]->mTrack.get() == pTrack)
|
||||||
{
|
{
|
||||||
*hMixerTrackCluster = mMixerTrackClusters[i];
|
*hMixerTrackCluster = mMixerTrackClusters[i];
|
||||||
return i;
|
return i;
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ class MixerTrackCluster final : public wxPanelWrapper
|
|||||||
public:
|
public:
|
||||||
MixerTrackCluster(wxWindow* parent,
|
MixerTrackCluster(wxWindow* parent,
|
||||||
MixerBoard* grandParent, AudacityProject* project,
|
MixerBoard* grandParent, AudacityProject* project,
|
||||||
PlayableTrack* pTrack,
|
const std::shared_ptr<PlayableTrack> &pTrack,
|
||||||
const wxPoint& pos = wxDefaultPosition,
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
const wxSize& size = wxDefaultSize);
|
const wxSize& size = wxDefaultSize);
|
||||||
virtual ~MixerTrackCluster() {}
|
virtual ~MixerTrackCluster() {}
|
||||||
@@ -134,7 +134,7 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PlayableTrack * mTrack;
|
std::shared_ptr<PlayableTrack> mTrack;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MixerBoard* mMixerBoard;
|
MixerBoard* mMixerBoard;
|
||||||
|
|||||||
Reference in New Issue
Block a user