From 516d812f3ad453082d97c2f2cd5b0ce4c065cef9 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Fri, 31 Jul 2015 14:50:49 -0400 Subject: [PATCH] Move code for Time track menu items --- src/TrackPanel.cpp | 102 ------------------ src/TrackPanel.h | 6 +- src/tracks/timetrack/ui/TimeTrackControls.cpp | 99 +++++++++++++++++ 3 files changed, 100 insertions(+), 107 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 1af586502..9326dd4c1 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -178,7 +178,6 @@ is time to refresh some aspect of the screen. #include "Prefs.h" #include "RefreshCode.h" #include "ShuttleGui.h" -#include "TimeTrack.h" #include "TrackArtist.h" #include "TrackPanelAx.h" #include "UndoManager.h" @@ -327,12 +326,6 @@ enum { OnMergeStereoID, OnSwapChannelsID, - OnSetTimeTrackRangeID, - - OnTimeTrackLinID, - OnTimeTrackLogID, - OnTimeTrackLogIntID, - // Reserve an ample block of ids for waveform scale types OnFirstWaveformScaleID, OnLastWaveformScaleID = OnFirstWaveformScaleID + 9, @@ -358,7 +351,6 @@ BEGIN_EVENT_TABLE(TrackPanel, OverlayPanel) EVT_KILL_FOCUS(TrackPanel::OnKillFocus) EVT_CONTEXT_MENU(TrackPanel::OnContextMenu) EVT_MENU(OnSetFontID, TrackPanel::OnSetFont) - EVT_MENU(OnSetTimeTrackRangeID, TrackPanel::OnSetTimeTrackRange) EVT_MENU_RANGE(OnUpOctaveID, OnDownOctaveID, TrackPanel::OnChangeOctave) EVT_MENU_RANGE(OnChannelLeftID, OnChannelMonoID, @@ -373,10 +365,6 @@ BEGIN_EVENT_TABLE(TrackPanel, OverlayPanel) EVT_MENU(OnSplitStereoMonoID, TrackPanel::OnSplitStereoMono) EVT_MENU(OnMergeStereoID, TrackPanel::OnMergeStereo) - EVT_MENU(OnTimeTrackLinID, TrackPanel::OnTimeTrackLin) - EVT_MENU(OnTimeTrackLogID, TrackPanel::OnTimeTrackLog) - EVT_MENU(OnTimeTrackLogIntID, TrackPanel::OnTimeTrackLogInt) - EVT_MENU_RANGE(OnFirstWaveformScaleID, OnLastWaveformScaleID, TrackPanel::OnWaveformScaleType) EVT_MENU_RANGE(OnFirstSpectrumScaleID, OnLastSpectrumScaleID, TrackPanel::OnSpectrumScaleType) @@ -491,7 +479,6 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id, mNoteTrackMenu = NULL; mLabelTrackMenu = NULL; - mTimeTrackMenu = NULL; mTrackArtist = std::make_unique(); @@ -655,15 +642,6 @@ void TrackPanel::BuildMenus(void) mLabelTrackMenu = std::make_unique(); mLabelTrackMenu->Append(OnSetFontID, _("&Font...")); - /* build the pop-down menu used on time warping tracks */ - mTimeTrackMenu = std::make_unique(); - mTimeTrackMenu->AppendRadioItem(OnTimeTrackLinID, wxT("&Linear scale")); - mTimeTrackMenu->AppendRadioItem(OnTimeTrackLogID, _("L&ogarithmic scale")); - - mTimeTrackMenu->AppendSeparator(); - mTimeTrackMenu->Append(OnSetTimeTrackRangeID, _("&Range...")); - mTimeTrackMenu->AppendCheckItem(OnTimeTrackLogIntID, _("Logarithmic &Interpolation")); - /* mRulerWaveformMenu = std::make_unique(); BuildVRulerMenuItems @@ -703,7 +681,6 @@ void TrackPanel::DeleteMenus(void) mWaveTrackMenu.reset(); mNoteTrackMenu.reset(); mLabelTrackMenu.reset(); - mTimeTrackMenu.reset(); mRulerWaveformMenu.reset(); mRulerSpectrumMenu.reset(); } @@ -5954,13 +5931,6 @@ void TrackPanel::OnTrackMenu(Track *t) Track *next = mTracks->GetNext(t); wxMenu *theMenu = NULL; - if (t->GetKind() == Track::Time) { - theMenu = mTimeTrackMenu.get(); - - TimeTrack *tt = (TimeTrack*) t; - - theMenu->Check(OnTimeTrackLogIntID, tt->GetInterpolateLog()); - } if (t->GetKind() == Track::Wave) { theMenu = mWaveTrackMenu.get(); @@ -6755,78 +6725,6 @@ void TrackPanel::OnRateOther(wxCommandEvent &event) Refresh(false); } -void TrackPanel::OnSetTimeTrackRange(wxCommandEvent & /*event*/) -{ - TimeTrack *t = (TimeTrack*)mPopupMenuTarget; - - if (t) { - long lower = (long) (t->GetRangeLower() * 100.0 + 0.5); - long upper = (long) (t->GetRangeUpper() * 100.0 + 0.5); - - // MB: these lower/upper limits match the maximum allowed range of the time track - // envelope, but this is not strictly required - lower = wxGetNumberFromUser(_("Change lower speed limit (%) to:"), - _("Lower speed limit"), - _("Lower speed limit"), - lower, - 10, - 1000); - - upper = wxGetNumberFromUser(_("Change upper speed limit (%) to:"), - _("Upper speed limit"), - _("Upper speed limit"), - upper, - lower+1, - 1000); - - if( lower >= 10 && upper <= 1000 && lower < upper ) { - t->SetRangeLower((double)lower / 100.0); - t->SetRangeUpper((double)upper / 100.0); - MakeParentPushState(wxString::Format(_("Set range to '%ld' - '%ld'"), - lower, - upper), - /* i18n-hint: (verb)*/ - - _("Set Range")); - Refresh(false); - } - } -} - -void TrackPanel::OnTimeTrackLin(wxCommandEvent & /*event*/) -{ - // Come here only from the time track menu - const auto t = static_cast(mPopupMenuTarget); - t->SetDisplayLog(false); - UpdateVRuler(t); - MakeParentPushState(_("Set time track display to linear"), _("Set Display")); - Refresh(false); -} - -void TrackPanel::OnTimeTrackLog(wxCommandEvent & /*event*/) -{ - // Come here only from the time track menu - const auto t = static_cast(mPopupMenuTarget); - t->SetDisplayLog(true); - UpdateVRuler(t); - MakeParentPushState(_("Set time track display to logarithmic"), _("Set Display")); - Refresh(false); -} - -void TrackPanel::OnTimeTrackLogInt(wxCommandEvent & /*event*/) -{ - // Come here only from the time track menu - const auto t = static_cast(mPopupMenuTarget); - if(t->GetInterpolateLog()) { - t->SetInterpolateLog(false); - MakeParentPushState(_("Set time track interpolation to linear"), _("Set Interpolation")); - } else { - t->SetInterpolateLog(true); - MakeParentPushState(_("Set time track interpolation to logarithmic"), _("Set Interpolation")); - } - Refresh(false); -} - void TrackPanel::OnWaveformScaleType(wxCommandEvent &evt) { // Get here only from vertical ruler menu for wave tracks diff --git a/src/TrackPanel.h b/src/TrackPanel.h index 2b1f5301d..f2fcf0179 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -495,10 +495,6 @@ protected: virtual void OnChannelChange(wxCommandEvent &event); virtual void OnSpectrogramSettings(wxCommandEvent &event); virtual void OnSetDisplay (wxCommandEvent &event); - virtual void OnSetTimeTrackRange (wxCommandEvent &event); - virtual void OnTimeTrackLin(wxCommandEvent &event); - virtual void OnTimeTrackLog(wxCommandEvent &event); - virtual void OnTimeTrackLogInt(wxCommandEvent &event); virtual void OnWaveformScaleType(wxCommandEvent &event); virtual void OnSpectrumScaleType(wxCommandEvent &event); @@ -800,7 +796,7 @@ protected: size_t mChannelItemsInsertionPoint {}; std::unique_ptr - mNoteTrackMenu, mTimeTrackMenu, mLabelTrackMenu, + mNoteTrackMenu, mLabelTrackMenu, mRulerWaveformMenu, mRulerSpectrumMenu; // These sub-menus are owned by parent menus, diff --git a/src/tracks/timetrack/ui/TimeTrackControls.cpp b/src/tracks/timetrack/ui/TimeTrackControls.cpp index 3116c9e9d..070bdaed7 100644 --- a/src/tracks/timetrack/ui/TimeTrackControls.cpp +++ b/src/tracks/timetrack/ui/TimeTrackControls.cpp @@ -11,8 +11,11 @@ Paul Licameli split from TrackPanel.cpp #include "../../../Audacity.h" #include "TimeTrackControls.h" #include "../../../HitTestResult.h" +#include "../../../Project.h" +#include "../../../RefreshCode.h" #include "../../../TimeTrack.h" #include "../../../widgets/PopupMenuTable.h" +#include TimeTrackControls::TimeTrackControls() { @@ -35,6 +38,14 @@ HitTestResult TimeTrackControls::HitTest return TrackControls::HitTest(event, pProject); } +enum +{ + OnTimeTrackLinID = 30000, + OnTimeTrackLogID, + OnTimeTrackLogIntID, + OnSetTimeTrackRangeID, +}; + class TimeTrackMenuTable : public PopupMenuTable { TimeTrackMenuTable() : mpData(NULL) {} @@ -47,6 +58,9 @@ private: void InitMenu(Menu *pMenu, void *pUserData) override { mpData = static_cast(pUserData); + TimeTrack *const pTrack = static_cast(mpData->pTrack); + + pMenu->Check(OnTimeTrackLogIntID, pTrack->GetInterpolateLog()); } void DestroyMenu() override @@ -55,6 +69,11 @@ private: } TrackControls::InitMenuData *mpData; + + void OnSetTimeTrackRange(wxCommandEvent & /*event*/); + void OnTimeTrackLin(wxCommandEvent & /*event*/); + void OnTimeTrackLog(wxCommandEvent & /*event*/); + void OnTimeTrackLogInt(wxCommandEvent & /*event*/); }; TimeTrackMenuTable &TimeTrackMenuTable::Instance() @@ -63,7 +82,87 @@ TimeTrackMenuTable &TimeTrackMenuTable::Instance() return instance; } +void TimeTrackMenuTable::OnSetTimeTrackRange(wxCommandEvent & /*event*/) +{ + TimeTrack *const pTrack = static_cast(mpData->pTrack); + if (pTrack) { + long lower = (long)(pTrack->GetRangeLower() * 100.0 + 0.5); + long upper = (long)(pTrack->GetRangeUpper() * 100.0 + 0.5); + + // MB: these lower/upper limits match the maximum allowed range of the time track + // envelope, but this is not strictly required + lower = wxGetNumberFromUser(_("Change lower speed limit (%) to:"), + _("Lower speed limit"), + _("Lower speed limit"), + lower, + 10, + 1000); + + upper = wxGetNumberFromUser(_("Change upper speed limit (%) to:"), + _("Upper speed limit"), + _("Upper speed limit"), + upper, + lower + 1, + 1000); + + if (lower >= 10 && upper <= 1000 && lower < upper) { + AudacityProject *const project = ::GetActiveProject(); + pTrack->SetRangeLower((double)lower / 100.0); + pTrack->SetRangeUpper((double)upper / 100.0); + project->PushState(wxString::Format(_("Set range to '%ld' - '%ld'"), + lower, + upper), + /* i18n-hint: (verb)*/ + _("Set Range")); + mpData->result = RefreshCode::RefreshAll; + } + } +} + +void TimeTrackMenuTable::OnTimeTrackLin(wxCommandEvent & /*event*/) +{ + TimeTrack *const pTrack = static_cast(mpData->pTrack); + pTrack->SetDisplayLog(false); + AudacityProject *const project = ::GetActiveProject(); + project->PushState(_("Set time track display to linear"), _("Set Display")); + + using namespace RefreshCode; + mpData->result = RefreshAll | UpdateVRuler; +} + +void TimeTrackMenuTable::OnTimeTrackLog(wxCommandEvent & /*event*/) +{ + TimeTrack *const pTrack = static_cast(mpData->pTrack); + pTrack->SetDisplayLog(true); + AudacityProject *const project = ::GetActiveProject(); + project->PushState(_("Set time track display to logarithmic"), _("Set Display")); + + using namespace RefreshCode; + mpData->result = RefreshAll | UpdateVRuler; +} + +void TimeTrackMenuTable::OnTimeTrackLogInt(wxCommandEvent & /*event*/) +{ + TimeTrack *const pTrack = static_cast(mpData->pTrack); + AudacityProject *const project = ::GetActiveProject(); + if (pTrack->GetInterpolateLog()) { + pTrack->SetInterpolateLog(false); + project->PushState(_("Set time track interpolation to linear"), _("Set Interpolation")); + } + else { + pTrack->SetInterpolateLog(true); + project->PushState(_("Set time track interpolation to logarithmic"), _("Set Interpolation")); + } + mpData->result = RefreshCode::RefreshAll; +} + BEGIN_POPUP_MENU(TimeTrackMenuTable) + POPUP_MENU_SEPARATOR() + POPUP_MENU_ITEM(OnTimeTrackLinID, _("&Linear scale"), OnTimeTrackLin) + POPUP_MENU_ITEM(OnTimeTrackLogID, _("L&ogarithmic scale"), OnTimeTrackLog) + POPUP_MENU_SEPARATOR() + POPUP_MENU_ITEM(OnSetTimeTrackRangeID, _("&Range..."), OnSetTimeTrackRange) + POPUP_MENU_CHECK_ITEM(OnTimeTrackLogIntID, _("Logarithmic &Interpolation"), OnTimeTrackLogInt) END_POPUP_MENU() PopupMenuTable *TimeTrackControls::GetMenuExtension(Track *)