1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-11-23 17:30:17 +01:00

Define virtual Track::PasteInto to simplfy Paste...

... Also making EditMenus not dependent on TimeTrack
This commit is contained in:
Paul Licameli
2021-01-29 00:25:33 -05:00
parent 8543d2dd30
commit 15313a27f7
10 changed files with 55 additions and 36 deletions

View File

@@ -11,7 +11,6 @@
#include "../ProjectSettings.h"
#include "../ProjectWindow.h"
#include "../SelectUtilities.h"
#include "../TimeTrack.h"
#include "../TrackPanel.h"
#include "../TrackPanelAx.h"
#include "../UndoManager.h"
@@ -76,8 +75,6 @@ bool DoPasteText(AudacityProject &project)
bool DoPasteNothingSelected(AudacityProject &project)
{
auto &tracks = TrackList::Get( project );
auto &trackFactory = WaveTrackFactory::Get( project );
auto &pSampleBlockFactory = trackFactory.GetSampleBlockFactory();
auto &selectedRegion = ViewInfo::Get( project ).selectedRegion;
auto &viewInfo = ViewInfo::Get( project );
auto &window = ProjectWindow::Get( project );
@@ -94,44 +91,18 @@ bool DoPasteNothingSelected(AudacityProject &project)
Track* pFirstNewTrack = NULL;
for (auto pClip : clipTrackRange) {
Track::Holder uNewTrack;
Track *pNewTrack;
pClip->TypeSwitch(
[&](const WaveTrack *wc) {
uNewTrack = wc->EmptyCopy( pSampleBlockFactory );
pNewTrack = uNewTrack.get();
},
#ifdef USE_MIDI
[&](const NoteTrack *) {
uNewTrack = std::make_shared<NoteTrack>(),
pNewTrack = uNewTrack.get();
},
#endif
[&](const LabelTrack *) {
uNewTrack = std::make_shared<LabelTrack>(),
pNewTrack = uNewTrack.get();
},
[&](const TimeTrack *) {
// Maintain uniqueness of the time track!
pNewTrack = *tracks.Any<TimeTrack>().begin();
if (!pNewTrack)
uNewTrack = std::make_shared<TimeTrack>( &viewInfo ),
pNewTrack = uNewTrack.get();
}
);
auto pNewTrack = pClip->PasteInto( project );
bool newTrack = (pNewTrack.use_count() == 1);
wxASSERT(pClip);
pNewTrack->Paste(0.0, pClip);
if (!pFirstNewTrack)
pFirstNewTrack = pNewTrack;
pFirstNewTrack = pNewTrack.get();
pNewTrack->SetSelected(true);
if (uNewTrack)
FinishCopy(pClip, uNewTrack, tracks);
if (newTrack)
FinishCopy(pClip, pNewTrack, tracks);
else
Track::FinishCopy(pClip, pNewTrack);
Track::FinishCopy(pClip, pNewTrack.get());
}
// Select some pasted samples, which is probably impossible to get right