mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-14 17:14:07 +01:00
Move code for Time track menu items
This commit is contained in:
committed by
Paul Licameli
parent
0e5e7b1c05
commit
516d812f3a
@@ -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 <wx/numdlg.h>
|
||||
|
||||
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<TrackControls::InitMenuData*>(pUserData);
|
||||
TimeTrack *const pTrack = static_cast<TimeTrack*>(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<TimeTrack*>(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<TimeTrack*>(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<TimeTrack*>(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<TimeTrack*>(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 *)
|
||||
|
||||
Reference in New Issue
Block a user