mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-02 16:49:41 +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"
|
||||
|
||||
enum
|
||||
{
|
||||
OnCutSelectedTextID,
|
||||
OnCopySelectedTextID,
|
||||
OnPasteSelectedTextID,
|
||||
OnDeleteSelectedLabelID,
|
||||
};
|
||||
|
||||
wxFont LabelTrack::msFont;
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
@ -1822,6 +1837,10 @@ bool LabelTrack::OnKeyDown(SelectedRegion &newSel, wxKeyEvent & event)
|
||||
}
|
||||
break;
|
||||
|
||||
case WXK_WINDOWS_MENU:
|
||||
ShowContextMenu();
|
||||
break;
|
||||
|
||||
default:
|
||||
if (!IsGoodLabelEditKey(keyCode)) {
|
||||
event.Skip();
|
||||
@ -1977,6 +1996,94 @@ bool LabelTrack::OnChar(SelectedRegion &WXUNUSED(newSel), wxKeyEvent & event)
|
||||
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()
|
||||
{
|
||||
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.
|
||||
int mOldEdge;
|
||||
private:
|
||||
void ShowContextMenu();
|
||||
void OnContextMenu(wxCommandEvent & evt);
|
||||
|
||||
int mSelIndex; /// Keeps track of the currently selected label
|
||||
int mMouseOverLabelLeft; /// Keeps track of which left label the mouse is currently over.
|
||||
|
@ -331,10 +331,6 @@ enum {
|
||||
OnSwapChannelsID,
|
||||
|
||||
OnSetTimeTrackRangeID,
|
||||
OnCutSelectedTextID,
|
||||
OnCopySelectedTextID,
|
||||
OnPasteSelectedTextID,
|
||||
OnDeleteSelectedLabelID,
|
||||
|
||||
OnTimeTrackLinID,
|
||||
OnTimeTrackLogID,
|
||||
@ -384,11 +380,6 @@ BEGIN_EVENT_TABLE(TrackPanel, wxWindow)
|
||||
EVT_MENU(OnSplitStereoMonoID, TrackPanel::OnSplitStereoMono)
|
||||
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(OnTimeTrackLogID, TrackPanel::OnTimeTrackLog)
|
||||
EVT_MENU(OnTimeTrackLogIntID, TrackPanel::OnTimeTrackLogInt)
|
||||
@ -564,7 +555,6 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id,
|
||||
mWaveTrackMenu = NULL;
|
||||
mNoteTrackMenu = NULL;
|
||||
mLabelTrackMenu = NULL;
|
||||
mLabelTrackInfoMenu = NULL;
|
||||
mTimeTrackMenu = NULL;
|
||||
|
||||
mRulerWaveformMenu = mRulerSpectrumMenu = NULL;
|
||||
@ -776,12 +766,6 @@ void TrackPanel::BuildMenus(void)
|
||||
mTimeTrackMenu->Append(OnSetTimeTrackRangeID, _("Set Ra&nge..."));
|
||||
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();
|
||||
BuildVRulerMenuItems
|
||||
(mRulerWaveformMenu, OnFirstWaveformScaleID,
|
||||
@ -837,11 +821,6 @@ void TrackPanel::DeleteMenus(void)
|
||||
mLabelTrackMenu = NULL;
|
||||
}
|
||||
|
||||
if (mLabelTrackInfoMenu) {
|
||||
delete mLabelTrackInfoMenu;
|
||||
mLabelTrackInfoMenu = NULL;
|
||||
}
|
||||
|
||||
if (mTimeTrackMenu) {
|
||||
delete mTimeTrackMenu;
|
||||
mTimeTrackMenu = NULL;
|
||||
@ -6583,25 +6562,6 @@ bool TrackPanel::HandleLabelTrackMouseEvent(LabelTrack * lTrack, wxRect &r, wxMo
|
||||
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
|
||||
//that follows. Instead, redraw the track.
|
||||
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
|
||||
// We use this because the default implementation of
|
||||
// wxFontEnumerator::GetFacenames() has changed between wx2.6 and 2.8
|
||||
|
@ -486,10 +486,6 @@ protected:
|
||||
virtual void OnSplitStereoMono(wxCommandEvent &event);
|
||||
virtual void SplitStereo(bool stereo);
|
||||
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 SetTrackGain(Track * t, LWSlider * s);
|
||||
|
Loading…
x
Reference in New Issue
Block a user