1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-15 15:49:36 +02:00

Label context menu can bring up the edit dialog

This commit is contained in:
Paul Licameli 2016-06-24 01:50:54 -04:00
parent 28c31903e9
commit 53e30e5533
5 changed files with 54 additions and 17 deletions

View File

@ -88,6 +88,8 @@ END_EVENT_TABLE()
LabelDialog::LabelDialog(wxWindow *parent, LabelDialog::LabelDialog(wxWindow *parent,
TrackFactory &factory, TrackFactory &factory,
TrackList *tracks, TrackList *tracks,
LabelTrack *selectedTrack,
int index,
ViewInfo &viewinfo, ViewInfo &viewinfo,
double rate, double rate,
const wxString & format) const wxString & format)
@ -98,8 +100,10 @@ LabelDialog::LabelDialog(wxWindow *parent,
wxSize(800, 600), wxSize(800, 600),
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER),
mFactory(factory), mFactory(factory),
mTracks(tracks), mTracks(tracks)
mViewInfo(&viewinfo), , mSelectedTrack(selectedTrack)
, mIndex(index)
, mViewInfo(&viewinfo),
mRate(rate), mRate(rate),
mFormat(format) mFormat(format)
{ {
@ -302,9 +306,10 @@ bool LabelDialog::TransferDataFromWindow()
Track *t; Track *t;
int tndx = 0; int tndx = 0;
// Clear all label tracks of labels // Clear label tracks of labels
for (t = iter.First(); t; t = iter.Next()) { for (t = iter.First(); t; t = iter.Next()) {
if (t->GetKind() == Track::Label) { if (t->GetKind() == Track::Label &&
(!mSelectedTrack || mSelectedTrack == t)) {
LabelTrack *lt = (LabelTrack *)t; LabelTrack *lt = (LabelTrack *)t;
tndx++; tndx++;
@ -343,8 +348,8 @@ bool LabelDialog::TransferDataFromWindow()
return false; return false;
// Add the label to it // Add the label to it
((LabelTrack *) t)->AddLabel(rd.selectedRegion, rd.title); static_cast<LabelTrack *>(t)->AddLabel(rd.selectedRegion, rd.title);
((LabelTrack *) t)->Unselect(); static_cast<LabelTrack *>(t)->Unselect();
} }
return true; return true;
@ -380,9 +385,8 @@ void LabelDialog::FindAllLabels()
// Add labels from all label tracks // Add labels from all label tracks
for (t = iter.First(); t; t = iter.Next()) { for (t = iter.First(); t; t = iter.Next()) {
if (t->GetKind() == Track::Label) { if (t->GetKind() == Track::Label)
AddLabels((LabelTrack *) t); AddLabels(static_cast<LabelTrack *>(t));
}
} }
FindInitialRow(); FindInitialRow();
@ -402,13 +406,16 @@ void LabelDialog::AddLabels(LabelTrack *t)
// Add a NEW track name // Add a NEW track name
TrackName(tndx, t->GetName()); TrackName(tndx, t->GetName());
// Add each label in the track // If editor was invoked for one label, add that one only, else add all.
if (!mSelectedTrack || mSelectedTrack == t) {
for (i = 0; i < t->GetNumLabels(); i++) { for (i = 0; i < t->GetNumLabels(); i++) {
const LabelStruct *ls = t->GetLabel(i); const LabelStruct *ls = t->GetLabel(i);
if (mIndex < 0 || mIndex == i)
mData.push_back(RowData(tndx, ls->title, ls->selectedRegion)); mData.push_back(RowData(tndx, ls->title, ls->selectedRegion));
} }
} }
}
void LabelDialog::FindInitialRow() void LabelDialog::FindInitialRow()
{ {
@ -569,7 +576,7 @@ void LabelDialog::OnImport(wxCommandEvent & WXUNUSED(event))
auto lt = mFactory.NewLabelTrack(); auto lt = mFactory.NewLabelTrack();
lt->Import(f); lt->Import(f);
// Add the labesls to our collection // Add the labels to our collection
AddLabels(lt.get()); AddLabels(lt.get());
// Done with the temporary track // Done with the temporary track

View File

@ -37,6 +37,14 @@ class LabelDialog final : public wxDialog
LabelDialog(wxWindow *parent, LabelDialog(wxWindow *parent,
TrackFactory &factory, TrackFactory &factory,
TrackList *tracks, TrackList *tracks,
// if NULL edit all tracks, else this one only:
LabelTrack *selectedTrack,
// This is nonnegative only if selectedTrack is not NULL
// and is the unique label to edit
int index,
ViewInfo &viewinfo, ViewInfo &viewinfo,
double rate, double rate,
const wxString & format); const wxString & format);
@ -78,6 +86,8 @@ class LabelDialog final : public wxDialog
TrackFactory &mFactory; TrackFactory &mFactory;
TrackList *mTracks; TrackList *mTracks;
LabelTrack *mSelectedTrack {};
int mIndex { -1 };
ViewInfo *mViewInfo; ViewInfo *mViewInfo;
wxArrayString mTrackNames; wxArrayString mTrackNames;
double mRate; double mRate;

View File

@ -69,6 +69,7 @@ enum
OnCopySelectedTextID, OnCopySelectedTextID,
OnPasteSelectedTextID, OnPasteSelectedTextID,
OnDeleteSelectedLabelID, OnDeleteSelectedLabelID,
OnEditSelectedLabelID,
}; };
wxFont LabelTrack::msFont; wxFont LabelTrack::msFont;
@ -2029,11 +2030,13 @@ void LabelTrack::ShowContextMenu()
menu.Append(OnCopySelectedTextID, _("&Copy")); menu.Append(OnCopySelectedTextID, _("&Copy"));
menu.Append(OnPasteSelectedTextID, _("&Paste")); menu.Append(OnPasteSelectedTextID, _("&Paste"));
menu.Append(OnDeleteSelectedLabelID, _("&Delete Label")); menu.Append(OnDeleteSelectedLabelID, _("&Delete Label"));
menu.Append(OnEditSelectedLabelID, _("&Edit..."));
menu.Enable(OnCutSelectedTextID, IsTextSelected()); menu.Enable(OnCutSelectedTextID, IsTextSelected());
menu.Enable(OnCopySelectedTextID, IsTextSelected()); menu.Enable(OnCopySelectedTextID, IsTextSelected());
menu.Enable(OnPasteSelectedTextID, IsTextClipSupported()); menu.Enable(OnPasteSelectedTextID, IsTextClipSupported());
menu.Enable(OnDeleteSelectedLabelID, true); menu.Enable(OnDeleteSelectedLabelID, true);
menu.Enable(OnEditSelectedLabelID, true);
const LabelStruct *ls = GetLabel(mSelIndex); const LabelStruct *ls = GetLabel(mSelIndex);
@ -2094,7 +2097,7 @@ void LabelTrack::OnContextMenu(wxCommandEvent & evt)
break; break;
/// DELETE selected label /// DELETE selected label
case OnDeleteSelectedLabelID: case OnDeleteSelectedLabelID: {
int ndx = GetLabelIndex(p->GetSel0(), p->GetSel1()); int ndx = GetLabelIndex(p->GetSel0(), p->GetSel1());
if (ndx != -1) if (ndx != -1)
{ {
@ -2103,6 +2106,14 @@ void LabelTrack::OnContextMenu(wxCommandEvent & evt)
_("Label Edit"), _("Label Edit"),
UndoPush::CONSOLIDATE); UndoPush::CONSOLIDATE);
} }
}
break;
case OnEditSelectedLabelID: {
int ndx = GetLabelIndex(p->GetSel0(), p->GetSel1());
if (ndx != -1)
p->DoEditLabels(this, ndx);
}
break; break;
} }
} }

View File

@ -6551,11 +6551,14 @@ void AudacityProject::OnAddLabelPlaying()
} }
} }
void AudacityProject::OnEditLabels() void AudacityProject::DoEditLabels(LabelTrack *lt, int index)
{ {
wxString format = GetSelectionFormat(); wxString format = GetSelectionFormat();
LabelDialog dlg(this, *GetTrackFactory(), mTracks, mViewInfo, mRate, format); LabelDialog dlg(this, *GetTrackFactory(), mTracks,
lt, index,
mViewInfo, mRate,
format);
if (dlg.ShowModal() == wxID_OK) { if (dlg.ShowModal() == wxID_OK) {
PushState(_("Edited labels"), _("Label")); PushState(_("Edited labels"), _("Label"));
@ -6563,6 +6566,11 @@ void AudacityProject::OnEditLabels()
} }
} }
void AudacityProject::OnEditLabels()
{
DoEditLabels();
}
void AudacityProject::OnApplyChain() void AudacityProject::OnApplyChain()
{ {
BatchProcessDialog dlg(this); BatchProcessDialog dlg(this);

View File

@ -365,6 +365,7 @@ void OnRemoveTracks();
void OnSyncLock(); void OnSyncLock();
void OnAddLabel(); void OnAddLabel();
void OnAddLabelPlaying(); void OnAddLabelPlaying();
void DoEditLabels(LabelTrack *lt = nullptr, int index = -1);
void OnEditLabels(); void OnEditLabels();
// Effect Menu // Effect Menu