mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-11 09:31:13 +02:00
Move label context menu handling to label track
Application key now brings up the context menu while editing labels as it should. This wasn't possible with the old keyboard handling.
This commit is contained in:
parent
a269670912
commit
7877615454
@ -61,6 +61,14 @@ for drawing different aspects of the label and its text box.
|
|||||||
|
|
||||||
#include "effects/TimeWarper.h"
|
#include "effects/TimeWarper.h"
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
OnCutSelectedTextID,
|
||||||
|
OnCopySelectedTextID,
|
||||||
|
OnPasteSelectedTextID,
|
||||||
|
OnDeleteSelectedLabelID,
|
||||||
|
};
|
||||||
|
|
||||||
wxFont LabelTrack::msFont;
|
wxFont LabelTrack::msFont;
|
||||||
|
|
||||||
// static member variables.
|
// static member variables.
|
||||||
@ -1586,6 +1594,13 @@ bool LabelTrack::HandleMouse(const wxMouseEvent & evt,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (evt.RightUp()) {
|
||||||
|
if ((mSelIndex != -1) && OverTextBox(GetLabel(mSelIndex), evt.m_x, evt.m_y)) {
|
||||||
|
// popup menu for editing
|
||||||
|
ShowContextMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1822,6 +1837,10 @@ bool LabelTrack::OnKeyDown(SelectedRegion &newSel, wxKeyEvent & event)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WXK_WINDOWS_MENU:
|
||||||
|
ShowContextMenu();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (!IsGoodLabelEditKey(keyCode)) {
|
if (!IsGoodLabelEditKey(keyCode)) {
|
||||||
event.Skip();
|
event.Skip();
|
||||||
@ -1977,6 +1996,94 @@ bool LabelTrack::OnChar(SelectedRegion &WXUNUSED(newSel), wxKeyEvent & event)
|
|||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LabelTrack::ShowContextMenu()
|
||||||
|
{
|
||||||
|
wxWindow *parent = wxWindow::FindFocus();
|
||||||
|
|
||||||
|
wxMenu *menu = new wxMenu();
|
||||||
|
menu->Bind(wxEVT_MENU, &LabelTrack::OnContextMenu, this);
|
||||||
|
|
||||||
|
menu->Append(OnCutSelectedTextID, _("Cu&t"));
|
||||||
|
menu->Append(OnCopySelectedTextID, _("&Copy"));
|
||||||
|
menu->Append(OnPasteSelectedTextID, _("&Paste"));
|
||||||
|
menu->Append(OnDeleteSelectedLabelID, _("&Delete Label"));
|
||||||
|
|
||||||
|
menu->Enable(OnCutSelectedTextID, IsTextSelected());
|
||||||
|
menu->Enable(OnCopySelectedTextID, IsTextSelected());
|
||||||
|
menu->Enable(OnPasteSelectedTextID, IsTextClipSupported());
|
||||||
|
menu->Enable(OnDeleteSelectedLabelID, true);
|
||||||
|
|
||||||
|
const LabelStruct *ls = GetLabel(mSelIndex);
|
||||||
|
|
||||||
|
wxClientDC dc(parent);
|
||||||
|
|
||||||
|
if (msFont.Ok())
|
||||||
|
{
|
||||||
|
dc.SetFont(msFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
int x;
|
||||||
|
if (mMouseXPos != -1)
|
||||||
|
{
|
||||||
|
x = mMouseXPos;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dc.GetTextExtent(ls->title.Left(mCurrentCursorPos), &x, NULL);
|
||||||
|
x += ls->xText;
|
||||||
|
}
|
||||||
|
|
||||||
|
parent->PopupMenu(menu, x, ls->y + (mIconHeight / 2) - 1);
|
||||||
|
|
||||||
|
// it's an invalid dragging event
|
||||||
|
SetWrongDragging(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LabelTrack::OnContextMenu(wxCommandEvent & evt)
|
||||||
|
{
|
||||||
|
AudacityProject *p = GetActiveProject();
|
||||||
|
|
||||||
|
switch (evt.GetId())
|
||||||
|
{
|
||||||
|
/// Cut selected text if cut menu item is selected
|
||||||
|
case OnCutSelectedTextID:
|
||||||
|
if (CutSelectedText())
|
||||||
|
{
|
||||||
|
p->PushState(_("Modified Label"),
|
||||||
|
_("Label Edit"),
|
||||||
|
PUSH_CONSOLIDATE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
/// Copy selected text if copy menu item is selected
|
||||||
|
case OnCopySelectedTextID:
|
||||||
|
CopySelectedText();
|
||||||
|
break;
|
||||||
|
|
||||||
|
/// paste selected text if paste menu item is selected
|
||||||
|
case OnPasteSelectedTextID:
|
||||||
|
if (PasteSelectedText(p->GetSel0(), p->GetSel1()))
|
||||||
|
{
|
||||||
|
p->PushState(_("Modified Label"),
|
||||||
|
_("Label Edit"),
|
||||||
|
true /* consolidate */);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
/// delete selected label
|
||||||
|
case OnDeleteSelectedLabelID:
|
||||||
|
int ndx = GetLabelIndex(p->GetSel0(), p->GetSel1());
|
||||||
|
if (ndx != -1)
|
||||||
|
{
|
||||||
|
DeleteLabel(ndx);
|
||||||
|
p->PushState(_("Deleted Label"),
|
||||||
|
_("Label Edit"),
|
||||||
|
true /* consolidate */);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void LabelTrack::RemoveSelectedText()
|
void LabelTrack::RemoveSelectedText()
|
||||||
{
|
{
|
||||||
wxString left = wxT("");
|
wxString left = wxT("");
|
||||||
|
@ -232,6 +232,8 @@ class AUDACITY_DLL_API LabelTrack : public Track
|
|||||||
//mOldEdge is useful for telling us when there has been a state change.
|
//mOldEdge is useful for telling us when there has been a state change.
|
||||||
int mOldEdge;
|
int mOldEdge;
|
||||||
private:
|
private:
|
||||||
|
void ShowContextMenu();
|
||||||
|
void OnContextMenu(wxCommandEvent & evt);
|
||||||
|
|
||||||
int mSelIndex; /// Keeps track of the currently selected label
|
int mSelIndex; /// Keeps track of the currently selected label
|
||||||
int mMouseOverLabelLeft; /// Keeps track of which left label the mouse is currently over.
|
int mMouseOverLabelLeft; /// Keeps track of which left label the mouse is currently over.
|
||||||
|
@ -331,10 +331,6 @@ enum {
|
|||||||
OnSwapChannelsID,
|
OnSwapChannelsID,
|
||||||
|
|
||||||
OnSetTimeTrackRangeID,
|
OnSetTimeTrackRangeID,
|
||||||
OnCutSelectedTextID,
|
|
||||||
OnCopySelectedTextID,
|
|
||||||
OnPasteSelectedTextID,
|
|
||||||
OnDeleteSelectedLabelID,
|
|
||||||
|
|
||||||
OnTimeTrackLinID,
|
OnTimeTrackLinID,
|
||||||
OnTimeTrackLogID,
|
OnTimeTrackLogID,
|
||||||
@ -384,11 +380,6 @@ BEGIN_EVENT_TABLE(TrackPanel, wxWindow)
|
|||||||
EVT_MENU(OnSplitStereoMonoID, TrackPanel::OnSplitStereoMono)
|
EVT_MENU(OnSplitStereoMonoID, TrackPanel::OnSplitStereoMono)
|
||||||
EVT_MENU(OnMergeStereoID, TrackPanel::OnMergeStereo)
|
EVT_MENU(OnMergeStereoID, TrackPanel::OnMergeStereo)
|
||||||
|
|
||||||
EVT_MENU(OnCutSelectedTextID, TrackPanel::OnCutSelectedText)
|
|
||||||
EVT_MENU(OnCopySelectedTextID, TrackPanel::OnCopySelectedText)
|
|
||||||
EVT_MENU(OnPasteSelectedTextID, TrackPanel::OnPasteSelectedText)
|
|
||||||
EVT_MENU(OnDeleteSelectedLabelID, TrackPanel::OnDeleteSelectedLabel)
|
|
||||||
|
|
||||||
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)
|
||||||
@ -564,7 +555,6 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id,
|
|||||||
mWaveTrackMenu = NULL;
|
mWaveTrackMenu = NULL;
|
||||||
mNoteTrackMenu = NULL;
|
mNoteTrackMenu = NULL;
|
||||||
mLabelTrackMenu = NULL;
|
mLabelTrackMenu = NULL;
|
||||||
mLabelTrackInfoMenu = NULL;
|
|
||||||
mTimeTrackMenu = NULL;
|
mTimeTrackMenu = NULL;
|
||||||
|
|
||||||
mRulerWaveformMenu = mRulerSpectrumMenu = NULL;
|
mRulerWaveformMenu = mRulerSpectrumMenu = NULL;
|
||||||
@ -776,12 +766,6 @@ void TrackPanel::BuildMenus(void)
|
|||||||
mTimeTrackMenu->Append(OnSetTimeTrackRangeID, _("Set Ra&nge..."));
|
mTimeTrackMenu->Append(OnSetTimeTrackRangeID, _("Set Ra&nge..."));
|
||||||
mTimeTrackMenu->AppendCheckItem(OnTimeTrackLogIntID, _("Logarithmic &Interpolation"));
|
mTimeTrackMenu->AppendCheckItem(OnTimeTrackLogIntID, _("Logarithmic &Interpolation"));
|
||||||
|
|
||||||
mLabelTrackInfoMenu = new wxMenu();
|
|
||||||
mLabelTrackInfoMenu->Append(OnCutSelectedTextID, _("Cu&t"));
|
|
||||||
mLabelTrackInfoMenu->Append(OnCopySelectedTextID, _("&Copy"));
|
|
||||||
mLabelTrackInfoMenu->Append(OnPasteSelectedTextID, _("&Paste"));
|
|
||||||
mLabelTrackInfoMenu->Append(OnDeleteSelectedLabelID, _("&Delete Label"));
|
|
||||||
|
|
||||||
mRulerWaveformMenu = new wxMenu();
|
mRulerWaveformMenu = new wxMenu();
|
||||||
BuildVRulerMenuItems
|
BuildVRulerMenuItems
|
||||||
(mRulerWaveformMenu, OnFirstWaveformScaleID,
|
(mRulerWaveformMenu, OnFirstWaveformScaleID,
|
||||||
@ -837,11 +821,6 @@ void TrackPanel::DeleteMenus(void)
|
|||||||
mLabelTrackMenu = NULL;
|
mLabelTrackMenu = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mLabelTrackInfoMenu) {
|
|
||||||
delete mLabelTrackInfoMenu;
|
|
||||||
mLabelTrackInfoMenu = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mTimeTrackMenu) {
|
if (mTimeTrackMenu) {
|
||||||
delete mTimeTrackMenu;
|
delete mTimeTrackMenu;
|
||||||
mTimeTrackMenu = NULL;
|
mTimeTrackMenu = NULL;
|
||||||
@ -6583,25 +6562,6 @@ bool TrackPanel::HandleLabelTrackMouseEvent(LabelTrack * lTrack, wxRect &r, wxMo
|
|||||||
PUSH_CONSOLIDATE);
|
PUSH_CONSOLIDATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (event.RightUp()) {
|
|
||||||
// popup menu for editing
|
|
||||||
RefreshTrack(lTrack);
|
|
||||||
|
|
||||||
if ((lTrack->getSelectedIndex() != -1) && lTrack->OverTextBox(lTrack->GetLabel(lTrack->getSelectedIndex()), event.m_x, event.m_y)) {
|
|
||||||
mPopupMenuTarget = lTrack;
|
|
||||||
mLabelTrackInfoMenu->Enable(OnCutSelectedTextID, lTrack->IsTextSelected());
|
|
||||||
mLabelTrackInfoMenu->Enable(OnCopySelectedTextID, lTrack->IsTextSelected());
|
|
||||||
mLabelTrackInfoMenu->Enable(OnPasteSelectedTextID, lTrack->IsTextClipSupported());
|
|
||||||
mLabelTrackInfoMenu->Enable(OnDeleteSelectedLabelID, true);
|
|
||||||
PopupMenu(mLabelTrackInfoMenu, event.m_x + 1, event.m_y + 1);
|
|
||||||
mPopupMenuTarget = NULL;
|
|
||||||
// it's an invalid dragging event
|
|
||||||
lTrack->SetWrongDragging(true);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//If we are adjusting a label on a labeltrack, do not do anything
|
//If we are adjusting a label on a labeltrack, do not do anything
|
||||||
//that follows. Instead, redraw the track.
|
//that follows. Instead, redraw the track.
|
||||||
if(mMouseCapture == IsAdjustingLabel)
|
if(mMouseCapture == IsAdjustingLabel)
|
||||||
@ -9451,54 +9411,6 @@ void TrackPanel::OnSetName(wxCommandEvent & WXUNUSED(event))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Cut selected text if cut menu item is selected
|
|
||||||
void TrackPanel::OnCutSelectedText(wxCommandEvent & WXUNUSED(event))
|
|
||||||
{
|
|
||||||
LabelTrack *lt = (LabelTrack *)mPopupMenuTarget;
|
|
||||||
if (lt->CutSelectedText()) {
|
|
||||||
MakeParentPushState(_("Modified Label"),
|
|
||||||
_("Label Edit"),
|
|
||||||
PUSH_CONSOLIDATE);
|
|
||||||
}
|
|
||||||
RefreshTrack(lt);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Copy selected text if copy menu item is selected
|
|
||||||
void TrackPanel::OnCopySelectedText(wxCommandEvent & WXUNUSED(event))
|
|
||||||
{
|
|
||||||
LabelTrack *lt = (LabelTrack *)mPopupMenuTarget;
|
|
||||||
lt->CopySelectedText();
|
|
||||||
RefreshTrack(lt);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// paste selected text if paste menu item is selected
|
|
||||||
void TrackPanel::OnPasteSelectedText(wxCommandEvent & WXUNUSED(event))
|
|
||||||
{
|
|
||||||
LabelTrack *lt = (LabelTrack *)mPopupMenuTarget;
|
|
||||||
if (lt->PasteSelectedText(mViewInfo->selectedRegion.t0(),
|
|
||||||
mViewInfo->selectedRegion.t1())) {
|
|
||||||
MakeParentPushState(_("Modified Label"),
|
|
||||||
_("Label Edit"),
|
|
||||||
true /* consolidate */);
|
|
||||||
}
|
|
||||||
RefreshTrack(lt);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// delete selected label
|
|
||||||
void TrackPanel::OnDeleteSelectedLabel(wxCommandEvent & WXUNUSED(event))
|
|
||||||
{
|
|
||||||
LabelTrack *lt = (LabelTrack *)mPopupMenuTarget;
|
|
||||||
int ndx = lt->GetLabelIndex(mViewInfo->selectedRegion.t0(),
|
|
||||||
mViewInfo->selectedRegion.t1());
|
|
||||||
if (ndx != -1) {
|
|
||||||
lt->DeleteLabel(ndx);
|
|
||||||
MakeParentPushState(_("Deleted Label"),
|
|
||||||
_("Label Edit"),
|
|
||||||
true /* consolidate */);
|
|
||||||
}
|
|
||||||
RefreshTrack(lt);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Small helper class to enumerate all fonts in the system
|
// Small helper class to enumerate all fonts in the system
|
||||||
// We use this because the default implementation of
|
// We use this because the default implementation of
|
||||||
// wxFontEnumerator::GetFacenames() has changed between wx2.6 and 2.8
|
// wxFontEnumerator::GetFacenames() has changed between wx2.6 and 2.8
|
||||||
|
@ -486,10 +486,6 @@ protected:
|
|||||||
virtual void OnSplitStereoMono(wxCommandEvent &event);
|
virtual void OnSplitStereoMono(wxCommandEvent &event);
|
||||||
virtual void SplitStereo(bool stereo);
|
virtual void SplitStereo(bool stereo);
|
||||||
virtual void OnMergeStereo(wxCommandEvent &event);
|
virtual void OnMergeStereo(wxCommandEvent &event);
|
||||||
virtual void OnCutSelectedText(wxCommandEvent &event);
|
|
||||||
virtual void OnCopySelectedText(wxCommandEvent &event);
|
|
||||||
virtual void OnPasteSelectedText(wxCommandEvent &event);
|
|
||||||
virtual void OnDeleteSelectedLabel(wxCommandEvent &event);
|
|
||||||
|
|
||||||
virtual void SetTrackPan(Track * t, LWSlider * s);
|
virtual void SetTrackPan(Track * t, LWSlider * s);
|
||||||
virtual void SetTrackGain(Track * t, LWSlider * s);
|
virtual void SetTrackGain(Track * t, LWSlider * s);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user