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

Fix bug 1536

The Edit buttons now enable/disable whenever their Menu counterparts
are enabled/disabled, but there are residual issues due to incorrect
behavior in "Select all if none selected" (noted in comments).
This commit is contained in:
Steve Daulton 2016-10-27 16:11:41 +01:00
parent edb99485da
commit d39dbc4162
2 changed files with 31 additions and 35 deletions

@ -1976,6 +1976,10 @@ void AudacityProject::UpdateMenus(bool /*checkActive*/)
{ {
mCommandManager.Enable(wxT("SplitCut"), false); mCommandManager.Enable(wxT("SplitCut"), false);
// FIXME: This Can't be right. We can only
// FIXME: get here if no tracks selected, so
// FIXME: there can't be a Wave track selected.
// wxASSERT(!(flags & WaveTracksSelectedFlag));
if (!(flags & WaveTracksSelectedFlag)) if (!(flags & WaveTracksSelectedFlag))
{ {
mCommandManager.Enable(wxT("Split"), false); mCommandManager.Enable(wxT("Split"), false);

@ -240,30 +240,34 @@ void EditToolBar::OnButton(wxCommandEvent &event)
AudacityProject *p = GetActiveProject(); AudacityProject *p = GetActiveProject();
if (!p) return; if (!p) return;
bool busy = gAudioIO->IsBusy();
int id = event.GetId(); int id = event.GetId();
// FIXME: Some "SelectAllIfNone()" do not work as expected
// due to bugs elsewhere (see: AudacityProject::UpdateMenus() )
switch (id) { switch (id) {
case ETBCutID: case ETBCutID:
if (!busy) p->OnCut(); p->SelectAllIfNone();
p->OnCut();
break; break;
case ETBCopyID: case ETBCopyID:
if (!busy) p->OnCopy(); p->SelectAllIfNone();
p->OnCopy();
break; break;
case ETBPasteID: case ETBPasteID:
if (!busy) p->OnPaste(); p->OnPaste();
break; break;
case ETBTrimID: case ETBTrimID:
if (!busy) p->OnTrim(); p->SelectAllIfNone();
p->OnTrim();
break; break;
case ETBSilenceID: case ETBSilenceID:
if (!busy) p->OnSilence(); p->SelectAllIfNone();
p->OnSilence();
break; break;
case ETBUndoID: case ETBUndoID:
if (!busy) p->OnUndo(); p->OnUndo();
break; break;
case ETBRedoID: case ETBRedoID:
if (!busy) p->OnRedo(); p->OnRedo();
break; break;
#ifdef EXPERIMENTAL_SYNC_LOCK #ifdef EXPERIMENTAL_SYNC_LOCK
case ETBSyncLockID: case ETBSyncLockID:
@ -301,40 +305,28 @@ void EditToolBar::OnButton(wxCommandEvent &event)
void EditToolBar::EnableDisableButtons() void EditToolBar::EnableDisableButtons()
{ {
AudacityProject *p = GetActiveProject(); CommandManager* cm = GetActiveProject()->GetCommandManager();
if (!p) return; if (!cm) return;
// Is anything selected? mButtons[ETBCutID]->SetEnabled(cm->GetEnabled("Cut"));
bool selection = false; mButtons[ETBCopyID]->SetEnabled(cm->GetEnabled("Copy"));
TrackListIterator iter(p->GetTracks()); mButtons[ETBTrimID]->SetEnabled(cm->GetEnabled("Trim"));
for (Track *t = iter.First(); t; t = iter.Next()) mButtons[ETBSilenceID]->SetEnabled(cm->GetEnabled("Silence"));
if (t->GetSelected()) {
selection = true;
break;
}
selection &= (p->GetSel0() < p->GetSel1());
mButtons[ETBCutID]->SetEnabled(selection); mButtons[ETBUndoID]->SetEnabled(cm->GetEnabled("Undo"));
mButtons[ETBCopyID]->SetEnabled(selection); mButtons[ETBRedoID]->SetEnabled(cm->GetEnabled("Redo"));
mButtons[ETBTrimID]->SetEnabled(selection);
mButtons[ETBSilenceID]->SetEnabled(selection);
mButtons[ETBUndoID]->SetEnabled(p->GetUndoManager()->UndoAvailable()); mButtons[ETBZoomInID]->SetEnabled(cm->GetEnabled("ZoomIn"));
mButtons[ETBRedoID]->SetEnabled(p->GetUndoManager()->RedoAvailable()); mButtons[ETBZoomOutID]->SetEnabled(cm->GetEnabled("ZoomOut"));
bool tracks = (!p->GetTracks()->IsEmpty());
mButtons[ETBZoomInID]->SetEnabled(tracks && (p->ZoomInAvailable()));
mButtons[ETBZoomOutID]->SetEnabled(tracks && (p->ZoomOutAvailable()) );
#if 0 // Disabled for version 1.2.0 since it doesn't work quite right... #if 0 // Disabled for version 1.2.0 since it doesn't work quite right...
mButtons[ETBZoomToggleID]->SetEnabled(tracks); mButtons[ETBZoomToggleID]->SetEnabled(true);
#endif #endif
mButtons[ETBZoomSelID]->SetEnabled(selection); mButtons[ETBZoomSelID]->SetEnabled(cm->GetEnabled("ZoomSel"));
mButtons[ETBZoomFitID]->SetEnabled(tracks); mButtons[ETBZoomFitID]->SetEnabled(cm->GetEnabled("FitInWindow"));
mButtons[ETBPasteID]->SetEnabled(p->Clipboard()); mButtons[ETBPasteID]->SetEnabled(cm->GetEnabled("Paste"));
#ifdef EXPERIMENTAL_SYNC_LOCK #ifdef EXPERIMENTAL_SYNC_LOCK
bool bSyncLockTracks; bool bSyncLockTracks;