From 298bb3fde82646ab3bb52ea5a2c419260c949052 Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Tue, 11 Apr 2017 12:02:16 -0700 Subject: [PATCH] NoteTrack: Implement Silence and InsertSilence Additionally, fix the UI portions of these, and fix Trim for note tracks (the code already existed, but due to flags would not work). As PRL requested, this is gated only behind USE_MIDI. --- src/Menus.cpp | 20 +++++++++++++------- src/NoteTrack.cpp | 21 +++++++++++++++++---- src/commands/CommandFlag.h | 1 + 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 62a959891..42db9138e 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -470,12 +470,12 @@ void AudacityProject::CreateMenusAndCommands() /* i18n-hint: (verb)*/ c->AddItem(wxT("Silence"), _("Silence Audi&o"), FN(OnSilence), wxT("Ctrl+L"), - AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag, - AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag); + AudioIONotBusyFlag | TimeSelectedFlag | AudioTracksSelectedFlag, + AudioIONotBusyFlag | TimeSelectedFlag | AudioTracksSelectedFlag); /* i18n-hint: (verb)*/ c->AddItem(wxT("Trim"), _("Tri&m Audio"), FN(OnTrim), wxT("Ctrl+T"), - AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag, - AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag); + AudioIONotBusyFlag | TimeSelectedFlag | AudioTracksSelectedFlag, + AudioIONotBusyFlag | TimeSelectedFlag | AudioTracksSelectedFlag); c->EndSubMenu(); c->AddSeparator(); @@ -1986,6 +1986,7 @@ CommandFlag AudacityProject::GetUpdateFlags(bool checkActive) } else { flags |= WaveTracksSelectedFlag; + flags |= AudioTracksSelectedFlag; } } if( t->GetEndTime() > t->GetStartTime() ) @@ -2003,6 +2004,7 @@ CommandFlag AudacityProject::GetUpdateFlags(bool checkActive) if (nt->GetSelected()) { flags |= TracksSelectedFlag; flags |= NoteTracksSelectedFlag; + flags |= AudioTracksSelectedFlag; // even if not EXPERIMENTAL_MIDI_OUT } } #endif @@ -2225,9 +2227,12 @@ void AudacityProject::UpdateMenus(bool checkActive) { mCommandManager.Enable(wxT("ExportSel"), false); mCommandManager.Enable(wxT("SplitNew"), false); - mCommandManager.Enable(wxT("Trim"), false); mCommandManager.Enable(wxT("SplitDelete"), false); } + if (!(flags & TimeSelectedFlag) | !(flags & AudioTracksSelectedFlag)) + { + mCommandManager.Enable(wxT("Trim"), false); + } } #if 0 @@ -5057,10 +5062,11 @@ void AudacityProject::OnJoin() void AudacityProject::OnSilence() { - SelectedTrackListOfKindIterator iter(Track::Wave, GetTracks()); + TrackListIterator iter(GetTracks()); for (Track *n = iter.First(); n; n = iter.Next()) - n->Silence(mViewInfo.selectedRegion.t0(), mViewInfo.selectedRegion.t1()); + if (n->GetSelected() && (nullptr != dynamic_cast(n))) + n->Silence(mViewInfo.selectedRegion.t0(), mViewInfo.selectedRegion.t1()); PushState(wxString:: Format(_("Silenced selected tracks for %.2f seconds at %.2f"), diff --git a/src/NoteTrack.cpp b/src/NoteTrack.cpp index 64463c54b..e94ed16bb 100644 --- a/src/NoteTrack.cpp +++ b/src/NoteTrack.cpp @@ -516,14 +516,27 @@ void NoteTrack::Paste(double t, const Track *src) mSeq->paste(t - GetOffset(), other->mSeq.get()); } -void NoteTrack::Silence(double, double) +void NoteTrack::Silence(double t0, double t1) { - // to do + if (t1 < t0) + THROW_INCONSISTENCY_EXCEPTION; + + auto len = t1 - t0; + + mSeq->convert_to_seconds(); + // XXX: do we want to set the all param? + // If it's set, then it seems like notes are silenced if they start or end in the range, + // otherwise only if they start in the range. --Poke + mSeq->silence(t0 - GetOffset(), len, false); } -void NoteTrack::InsertSilence(double, double) +void NoteTrack::InsertSilence(double t, double len) { - // to do + if (len <= 0) + THROW_INCONSISTENCY_EXCEPTION; + + mSeq->convert_to_seconds(); + mSeq->insert_silence(t - GetOffset(), len); } // Call this function to manipulate the underlying sequence data. This is diff --git a/src/commands/CommandFlag.h b/src/commands/CommandFlag.h index 6ae14d055..6dc04c48b 100644 --- a/src/commands/CommandFlag.h +++ b/src/commands/CommandFlag.h @@ -55,6 +55,7 @@ enum CommandFlag : unsigned long long NotPausedFlag = 0x400000000ULL, // jkc HasWaveDataFlag = 0x800000000ULL, // jkc PlayableTracksExistFlag = 0x1000000000ULL, + AudioTracksSelectedFlag = 0x2000000000ULL, NoFlagsSpecifed = ~0ULL };