mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-03 17:19:43 +02:00
Vertical ruler pop-up menus for wave tracks
Menu items for zooming in vertical ruler popup for wave tracks... pop-up menu for vertical ruler
This commit is contained in:
commit
e2851d1ccd
@ -344,6 +344,18 @@ enum {
|
|||||||
OnTimeTrackLinID,
|
OnTimeTrackLinID,
|
||||||
OnTimeTrackLogID,
|
OnTimeTrackLogID,
|
||||||
OnTimeTrackLogIntID,
|
OnTimeTrackLogIntID,
|
||||||
|
|
||||||
|
// Reserve an ample block of ids for waveform scale types
|
||||||
|
OnFirstWaveformScaleID,
|
||||||
|
OnLastWaveformScaleID = OnFirstWaveformScaleID + 9,
|
||||||
|
|
||||||
|
// Reserve an ample block of ids for spectrum scale types
|
||||||
|
OnFirstSpectrumScaleID,
|
||||||
|
OnLastSpectrumScaleID = OnFirstSpectrumScaleID + 19,
|
||||||
|
|
||||||
|
OnZoomInVerticalID,
|
||||||
|
OnZoomOutVerticalID,
|
||||||
|
OnZoomFitVerticalID,
|
||||||
};
|
};
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(TrackPanel, wxWindow)
|
BEGIN_EVENT_TABLE(TrackPanel, wxWindow)
|
||||||
@ -385,6 +397,13 @@ BEGIN_EVENT_TABLE(TrackPanel, wxWindow)
|
|||||||
EVT_MENU(OnTimeTrackLinID, TrackPanel::OnTimeTrackLin)
|
EVT_MENU(OnTimeTrackLinID, TrackPanel::OnTimeTrackLin)
|
||||||
EVT_MENU(OnTimeTrackLogID, TrackPanel::OnTimeTrackLog)
|
EVT_MENU(OnTimeTrackLogID, TrackPanel::OnTimeTrackLog)
|
||||||
EVT_MENU(OnTimeTrackLogIntID, TrackPanel::OnTimeTrackLogInt)
|
EVT_MENU(OnTimeTrackLogIntID, TrackPanel::OnTimeTrackLogInt)
|
||||||
|
|
||||||
|
EVT_MENU_RANGE(OnFirstWaveformScaleID, OnLastWaveformScaleID, TrackPanel::OnWaveformScaleType)
|
||||||
|
EVT_MENU_RANGE(OnFirstSpectrumScaleID, OnLastSpectrumScaleID, TrackPanel::OnSpectrumScaleType)
|
||||||
|
|
||||||
|
EVT_MENU(OnZoomInVerticalID, TrackPanel::OnZoomInVertical)
|
||||||
|
EVT_MENU(OnZoomOutVerticalID, TrackPanel::OnZoomOutVertical)
|
||||||
|
EVT_MENU(OnZoomFitVerticalID, TrackPanel::OnZoomFitVertical)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
/// Makes a cursor from an XPM, uses CursorId as a fallback.
|
/// Makes a cursor from an XPM, uses CursorId as a fallback.
|
||||||
@ -552,6 +571,8 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id,
|
|||||||
mLabelTrackInfoMenu = NULL;
|
mLabelTrackInfoMenu = NULL;
|
||||||
mTimeTrackMenu = NULL;
|
mTimeTrackMenu = NULL;
|
||||||
|
|
||||||
|
mRulerWaveformMenu = mRulerSpectrumMenu = NULL;
|
||||||
|
|
||||||
BuildMenus();
|
BuildMenus();
|
||||||
|
|
||||||
mTrackArtist = new TrackArtist();
|
mTrackArtist = new TrackArtist();
|
||||||
@ -764,6 +785,16 @@ void TrackPanel::BuildMenus(void)
|
|||||||
mLabelTrackInfoMenu->Append(OnCopySelectedTextID, _("&Copy"));
|
mLabelTrackInfoMenu->Append(OnCopySelectedTextID, _("&Copy"));
|
||||||
mLabelTrackInfoMenu->Append(OnPasteSelectedTextID, _("&Paste"));
|
mLabelTrackInfoMenu->Append(OnPasteSelectedTextID, _("&Paste"));
|
||||||
mLabelTrackInfoMenu->Append(OnDeleteSelectedLabelID, _("&Delete Label"));
|
mLabelTrackInfoMenu->Append(OnDeleteSelectedLabelID, _("&Delete Label"));
|
||||||
|
|
||||||
|
mRulerWaveformMenu = new wxMenu();
|
||||||
|
BuildVRulerMenuItems
|
||||||
|
(mRulerWaveformMenu, OnFirstWaveformScaleID,
|
||||||
|
WaveformSettings::GetScaleNames());
|
||||||
|
|
||||||
|
mRulerSpectrumMenu = new wxMenu();
|
||||||
|
BuildVRulerMenuItems
|
||||||
|
(mRulerSpectrumMenu, OnFirstSpectrumScaleID,
|
||||||
|
SpectrogramSettings::GetScaleNames());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrackPanel::BuildCommonDropMenuItems(wxMenu * menu)
|
void TrackPanel::BuildCommonDropMenuItems(wxMenu * menu)
|
||||||
@ -778,6 +809,19 @@ void TrackPanel::BuildCommonDropMenuItems(wxMenu * menu)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
void TrackPanel::BuildVRulerMenuItems
|
||||||
|
(wxMenu * menu, int firstId, const wxArrayString &names)
|
||||||
|
{
|
||||||
|
int id = firstId;
|
||||||
|
for (int ii = 0, nn = names.size(); ii < nn; ++ii)
|
||||||
|
menu->AppendRadioItem(id++, names[ii]);
|
||||||
|
menu->AppendSeparator();
|
||||||
|
menu->Append(OnZoomInVerticalID, _("Zoom In\tLeft-Click/Left-Drag"));
|
||||||
|
menu->Append(OnZoomOutVerticalID, _("Zoom Out\tShift-Left-Click"));
|
||||||
|
menu->Append(OnZoomFitVerticalID, _("Zoom to Fit\tShift-Right-Click"));
|
||||||
|
}
|
||||||
|
|
||||||
void TrackPanel::DeleteMenus(void)
|
void TrackPanel::DeleteMenus(void)
|
||||||
{
|
{
|
||||||
// Note that the submenus (mRateMenu, ...)
|
// Note that the submenus (mRateMenu, ...)
|
||||||
@ -806,6 +850,9 @@ void TrackPanel::DeleteMenus(void)
|
|||||||
delete mTimeTrackMenu;
|
delete mTimeTrackMenu;
|
||||||
mTimeTrackMenu = NULL;
|
mTimeTrackMenu = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete mRulerWaveformMenu;
|
||||||
|
delete mRulerSpectrumMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EXPERIMENTAL_OUTPUT_DISPLAY
|
#ifdef EXPERIMENTAL_OUTPUT_DISPLAY
|
||||||
@ -4610,11 +4657,24 @@ void TrackPanel::HandleVZoomButtonUp( wxMouseEvent & event )
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// don't do anything if track is not wave
|
// don't do anything if track is not wave
|
||||||
if (mCapturedTrack->GetKind() != Track::Wave)
|
if (mCapturedTrack->GetKind() != Track::Wave)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
WaveTrack *track = static_cast<WaveTrack*>(mCapturedTrack);
|
if (event.RightUp() &&
|
||||||
|
!(event.ShiftDown() || event.CmdDown())) {
|
||||||
|
OnVRulerMenu(mCapturedTrack, &event);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
HandleWaveTrackVZoom(static_cast<WaveTrack*>(mCapturedTrack),
|
||||||
|
event.ShiftDown(), event.RightUp());
|
||||||
|
mCapturedTrack = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrackPanel::HandleWaveTrackVZoom(WaveTrack *track, bool shiftDown, bool rightUp)
|
||||||
|
{
|
||||||
WaveTrack *partner = static_cast<WaveTrack *>(mTracks->GetLink(track));
|
WaveTrack *partner = static_cast<WaveTrack *>(mTracks->GetLink(track));
|
||||||
int height = track->GetHeight();
|
int height = track->GetHeight();
|
||||||
int ypos = mCapturedRect.y;
|
int ypos = mCapturedRect.y;
|
||||||
@ -4686,10 +4746,10 @@ void TrackPanel::HandleVZoomButtonUp( wxMouseEvent & event )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event.ShiftDown() || event.RightUp()) {
|
else if (shiftDown || rightUp) {
|
||||||
// Zoom OUT
|
// Zoom OUT
|
||||||
if (spectral) {
|
if (spectral) {
|
||||||
if (event.ShiftDown() && event.RightUp()) {
|
if (shiftDown && rightUp) {
|
||||||
// Zoom out full
|
// Zoom out full
|
||||||
min = spectrumLinear ? 0.0f : 1.0f;
|
min = spectrumLinear ? 0.0f : 1.0f;
|
||||||
max = halfrate;
|
max = halfrate;
|
||||||
@ -4711,7 +4771,7 @@ void TrackPanel::HandleVZoomButtonUp( wxMouseEvent & event )
|
|||||||
// Zoom out to -1.0...1.0 first, then, and only
|
// Zoom out to -1.0...1.0 first, then, and only
|
||||||
// then, if they click again, allow one more
|
// then, if they click again, allow one more
|
||||||
// zoom out.
|
// zoom out.
|
||||||
if (event.ShiftDown() && event.RightUp()) {
|
if (shiftDown && rightUp) {
|
||||||
// Zoom out full
|
// Zoom out full
|
||||||
min = -1.0;
|
min = -1.0;
|
||||||
max = 1.0;
|
max = 1.0;
|
||||||
@ -4802,9 +4862,8 @@ void TrackPanel::HandleVZoomButtonUp( wxMouseEvent & event )
|
|||||||
}
|
}
|
||||||
|
|
||||||
mZoomEnd = mZoomStart = 0;
|
mZoomEnd = mZoomStart = 0;
|
||||||
UpdateVRuler(mCapturedTrack);
|
UpdateVRuler(track);
|
||||||
Refresh(false);
|
Refresh(false);
|
||||||
mCapturedTrack = NULL;
|
|
||||||
MakeParentModifyState(true);
|
MakeParentModifyState(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8482,6 +8541,55 @@ void TrackPanel::OnTrackMenu(Track *t)
|
|||||||
Refresh(false);
|
Refresh(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TrackPanel::OnVRulerMenu(Track *t, wxMouseEvent *pEvent)
|
||||||
|
{
|
||||||
|
if (!t) {
|
||||||
|
t = GetFocusedTrack();
|
||||||
|
if (!t)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (t->GetKind() != Track::Wave)
|
||||||
|
return;
|
||||||
|
|
||||||
|
WaveTrack *const wt = static_cast<WaveTrack*>(t);
|
||||||
|
|
||||||
|
const int display = wt->GetDisplay();
|
||||||
|
wxMenu *theMenu;
|
||||||
|
if (display == WaveTrack::Waveform) {
|
||||||
|
theMenu = mRulerWaveformMenu;
|
||||||
|
const int id =
|
||||||
|
OnFirstWaveformScaleID + int(wt->GetWaveformSettings().scaleType);
|
||||||
|
theMenu->Check(id, true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
theMenu = mRulerSpectrumMenu;
|
||||||
|
const int id =
|
||||||
|
OnFirstSpectrumScaleID + int(wt->GetSpectrogramSettings().scaleType);
|
||||||
|
theMenu->Check(id, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
int x, y;
|
||||||
|
if (pEvent)
|
||||||
|
x = pEvent->m_x, y = pEvent->m_y;
|
||||||
|
else {
|
||||||
|
// If no event given, pop up the menu at the same height
|
||||||
|
// as for the track control menu
|
||||||
|
const wxRect r = FindTrackRect(wt, true);
|
||||||
|
wxRect titleRect;
|
||||||
|
mTrackInfo.GetTitleBarRect(r, titleRect);
|
||||||
|
x = GetVRulerOffset(), y = titleRect.y + titleRect.height + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// So that IsDragZooming() returns false, and if we zoom in, we do so
|
||||||
|
// centered where the mouse is now:
|
||||||
|
mZoomStart = mZoomEnd = pEvent->m_y;
|
||||||
|
|
||||||
|
mPopupMenuTarget = wt;
|
||||||
|
PopupMenu(theMenu, x, y);
|
||||||
|
mPopupMenuTarget = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void TrackPanel::OnTrackMute(bool shiftDown, Track *t)
|
void TrackPanel::OnTrackMute(bool shiftDown, Track *t)
|
||||||
{
|
{
|
||||||
if (!t) {
|
if (!t) {
|
||||||
@ -9266,6 +9374,55 @@ void TrackPanel::OnTimeTrackLogInt(wxCommandEvent & /*event*/)
|
|||||||
Refresh(false);
|
Refresh(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TrackPanel::OnWaveformScaleType(wxCommandEvent &evt)
|
||||||
|
{
|
||||||
|
WaveTrack *const wt = static_cast<WaveTrack *>(mPopupMenuTarget);
|
||||||
|
const WaveformSettings::ScaleType newScaleType =
|
||||||
|
WaveformSettings::ScaleType(
|
||||||
|
std::max(0,
|
||||||
|
std::min(int(WaveformSettings::stNumScaleTypes) - 1,
|
||||||
|
evt.GetId() - OnFirstWaveformScaleID
|
||||||
|
)));
|
||||||
|
if (wt->GetWaveformSettings().scaleType != newScaleType) {
|
||||||
|
wt->GetIndependentWaveformSettings().scaleType = newScaleType;
|
||||||
|
UpdateVRuler(wt); // Is this really needed?
|
||||||
|
MakeParentModifyState(true);
|
||||||
|
Refresh(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrackPanel::OnSpectrumScaleType(wxCommandEvent &evt)
|
||||||
|
{
|
||||||
|
WaveTrack *const wt = static_cast<WaveTrack *>(mPopupMenuTarget);
|
||||||
|
const SpectrogramSettings::ScaleType newScaleType =
|
||||||
|
SpectrogramSettings::ScaleType(
|
||||||
|
std::max(0,
|
||||||
|
std::min(int(SpectrogramSettings::stNumScaleTypes) - 1,
|
||||||
|
evt.GetId() - OnFirstSpectrumScaleID
|
||||||
|
)));
|
||||||
|
if (wt->GetSpectrogramSettings().scaleType != newScaleType) {
|
||||||
|
wt->GetIndependentSpectrogramSettings().scaleType = newScaleType;
|
||||||
|
UpdateVRuler(wt); // Is this really needed?
|
||||||
|
MakeParentModifyState(true);
|
||||||
|
Refresh(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrackPanel::OnZoomInVertical(wxCommandEvent &)
|
||||||
|
{
|
||||||
|
HandleWaveTrackVZoom(static_cast<WaveTrack*>(mPopupMenuTarget), false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrackPanel::OnZoomOutVertical(wxCommandEvent &)
|
||||||
|
{
|
||||||
|
HandleWaveTrackVZoom(static_cast<WaveTrack*>(mPopupMenuTarget), true, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrackPanel::OnZoomFitVertical(wxCommandEvent &)
|
||||||
|
{
|
||||||
|
HandleWaveTrackVZoom(static_cast<WaveTrack*>(mPopupMenuTarget), true, true);
|
||||||
|
}
|
||||||
|
|
||||||
/// Move a track up, down, to top or to bottom.
|
/// Move a track up, down, to top or to bottom.
|
||||||
|
|
||||||
void TrackPanel::OnMoveTrack(wxCommandEvent &event)
|
void TrackPanel::OnMoveTrack(wxCommandEvent &event)
|
||||||
|
@ -210,6 +210,7 @@ class AUDACITY_DLL_API TrackPanel:public wxPanel {
|
|||||||
virtual void OnTrackGainDec();
|
virtual void OnTrackGainDec();
|
||||||
virtual void OnTrackGainInc();
|
virtual void OnTrackGainInc();
|
||||||
virtual void OnTrackMenu(Track *t = NULL);
|
virtual void OnTrackMenu(Track *t = NULL);
|
||||||
|
virtual void OnVRulerMenu(Track *t, wxMouseEvent *pEvent = NULL);
|
||||||
virtual void OnTrackMute(bool shiftdown, Track *t = NULL);
|
virtual void OnTrackMute(bool shiftdown, Track *t = NULL);
|
||||||
virtual void OnTrackSolo(bool shiftdown, Track *t = NULL);
|
virtual void OnTrackSolo(bool shiftdown, Track *t = NULL);
|
||||||
virtual void OnTrackClose();
|
virtual void OnTrackClose();
|
||||||
@ -244,6 +245,7 @@ class AUDACITY_DLL_API TrackPanel:public wxPanel {
|
|||||||
* @param menu the menu to add the commands to.
|
* @param menu the menu to add the commands to.
|
||||||
*/
|
*/
|
||||||
virtual void BuildCommonDropMenuItems(wxMenu * menu);
|
virtual void BuildCommonDropMenuItems(wxMenu * menu);
|
||||||
|
static void BuildVRulerMenuItems(wxMenu * menu, int firstId, const wxArrayString &names);
|
||||||
virtual bool IsUnsafe();
|
virtual bool IsUnsafe();
|
||||||
virtual bool HandleLabelTrackMouseEvent(LabelTrack * lTrack, wxRect &r, wxMouseEvent & event);
|
virtual bool HandleLabelTrackMouseEvent(LabelTrack * lTrack, wxRect &r, wxMouseEvent & event);
|
||||||
virtual bool HandleTrackLocationMouseEvent(WaveTrack * track, wxRect &r, wxMouseEvent &event);
|
virtual bool HandleTrackLocationMouseEvent(WaveTrack * track, wxRect &r, wxMouseEvent &event);
|
||||||
@ -395,6 +397,7 @@ protected:
|
|||||||
virtual void HandleVZoomClick(wxMouseEvent & event);
|
virtual void HandleVZoomClick(wxMouseEvent & event);
|
||||||
virtual void HandleVZoomDrag(wxMouseEvent & event);
|
virtual void HandleVZoomDrag(wxMouseEvent & event);
|
||||||
virtual void HandleVZoomButtonUp(wxMouseEvent & event);
|
virtual void HandleVZoomButtonUp(wxMouseEvent & event);
|
||||||
|
virtual void HandleWaveTrackVZoom(WaveTrack *track, bool shiftDown, bool rightUp);
|
||||||
|
|
||||||
// Handle sample editing using the 'draw' tool.
|
// Handle sample editing using the 'draw' tool.
|
||||||
virtual bool IsSampleEditingPossible( wxMouseEvent & event, Track * t );
|
virtual bool IsSampleEditingPossible( wxMouseEvent & event, Track * t );
|
||||||
@ -466,6 +469,13 @@ protected:
|
|||||||
virtual void OnTimeTrackLog(wxCommandEvent &event);
|
virtual void OnTimeTrackLog(wxCommandEvent &event);
|
||||||
virtual void OnTimeTrackLogInt(wxCommandEvent &event);
|
virtual void OnTimeTrackLogInt(wxCommandEvent &event);
|
||||||
|
|
||||||
|
virtual void OnWaveformScaleType(wxCommandEvent &event);
|
||||||
|
virtual void OnSpectrumScaleType(wxCommandEvent &event);
|
||||||
|
|
||||||
|
virtual void OnZoomInVertical(wxCommandEvent &event);
|
||||||
|
virtual void OnZoomOutVertical(wxCommandEvent &event);
|
||||||
|
virtual void OnZoomFitVertical(wxCommandEvent &event);
|
||||||
|
|
||||||
virtual void SetMenuCheck( wxMenu & menu, int newId );
|
virtual void SetMenuCheck( wxMenu & menu, int newId );
|
||||||
virtual void SetRate(Track *pTrack, double rate);
|
virtual void SetRate(Track *pTrack, double rate);
|
||||||
virtual void OnRateChange(wxCommandEvent &event);
|
virtual void OnRateChange(wxCommandEvent &event);
|
||||||
@ -825,6 +835,9 @@ protected:
|
|||||||
wxMenu *mFormatMenu;
|
wxMenu *mFormatMenu;
|
||||||
wxMenu *mLabelTrackInfoMenu;
|
wxMenu *mLabelTrackInfoMenu;
|
||||||
|
|
||||||
|
wxMenu *mRulerWaveformMenu;
|
||||||
|
wxMenu *mRulerSpectrumMenu;
|
||||||
|
|
||||||
Track *mPopupMenuTarget;
|
Track *mPopupMenuTarget;
|
||||||
|
|
||||||
friend class TrackPanelAx;
|
friend class TrackPanelAx;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user