mirror of
https://github.com/cookiengineer/audacity
synced 2025-12-15 17:11:20 +01:00
Fix other problems since commit f6e5696...
... Problem with static initialization order of ReservedCommandFlags, caused wrong enablement of menu items (at least on Mac), such as Plot Spectrum or Contrast enabled when there was no selection
This commit is contained in:
@@ -117,7 +117,6 @@ const CommandFlagOptions noiseReductionOptions{
|
||||
};
|
||||
|
||||
|
||||
const ReservedCommandFlag
|
||||
// The sequence of these definitions has a minor significance in determining
|
||||
// which user error message has precedence if more than one might apply, so
|
||||
// they should be kept in this sequence in one .cpp file if it is important
|
||||
@@ -125,7 +124,8 @@ const ReservedCommandFlag
|
||||
// then the precedence will be unspecified.
|
||||
// The ordering of the flags that only disable the default message is not
|
||||
// significant.
|
||||
AudioIONotBusyFlag{
|
||||
const ReservedCommandFlag&
|
||||
AudioIONotBusyFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project ){
|
||||
return !AudioIOBusyPred( project );
|
||||
},
|
||||
@@ -135,8 +135,9 @@ const ReservedCommandFlag
|
||||
} ,"FAQ:Errors:Audio Must Be Stopped"}
|
||||
.QuickTest()
|
||||
.Priority( 1 )
|
||||
}, //lll
|
||||
StereoRequiredFlag{
|
||||
}; return flag; }//lll
|
||||
const ReservedCommandFlag&
|
||||
StereoRequiredFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
// True iff at least one stereo track is selected, i.e., at least
|
||||
// one right channel is selected.
|
||||
@@ -149,44 +150,51 @@ const ReservedCommandFlag
|
||||
// This reason will not be shown, because the stereo-to-mono is greyed out if not allowed.
|
||||
XO("You must first select some stereo audio to perform this\naction. (You cannot use this with mono.)");
|
||||
} ,"Audacity_Selection"}
|
||||
}, //lda
|
||||
NoiseReductionTimeSelectedFlag{
|
||||
}; return flag; } //lda
|
||||
const ReservedCommandFlag&
|
||||
NoiseReductionTimeSelectedFlag() { static ReservedCommandFlag flag{
|
||||
TimeSelectedPred,
|
||||
noiseReductionOptions
|
||||
},
|
||||
TimeSelectedFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
TimeSelectedFlag() { static ReservedCommandFlag flag{
|
||||
TimeSelectedPred,
|
||||
cutCopyOptions()
|
||||
},
|
||||
WaveTracksSelectedFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
WaveTracksSelectedFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return !TrackList::Get( project ).Selected<const WaveTrack>().empty();
|
||||
},
|
||||
{ []( const TranslatableString& ) { return
|
||||
XO("You must first select some audio to perform this action.\n(Selecting other kinds of track won't work.)");
|
||||
} ,"Audacity_Selection"}
|
||||
},
|
||||
TracksExistFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
TracksExistFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return !TrackList::Get( project ).Any().empty();
|
||||
},
|
||||
CommandFlagOptions{}.DisableDefaultMessage()
|
||||
},
|
||||
TracksSelectedFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
TracksSelectedFlag() { static ReservedCommandFlag flag{
|
||||
TracksSelectedPred, // exclude TimeTracks
|
||||
{ []( const TranslatableString &Name ){ return
|
||||
// i18n-hint: %s will be replaced by the name of an action, such as "Remove Tracks".
|
||||
XO("\"%s\" requires one or more tracks to be selected.").Format( Name );
|
||||
},"Audacity_Selection" }
|
||||
},
|
||||
AnyTracksSelectedFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
AnyTracksSelectedFlag() { static ReservedCommandFlag flag{
|
||||
AnyTracksSelectedPred, // Allow TimeTracks
|
||||
{ []( const TranslatableString &Name ){ return
|
||||
// i18n-hint: %s will be replaced by the name of an action, such as "Remove Tracks".
|
||||
XO("\"%s\" requires one or more tracks to be selected.").Format( Name );
|
||||
},"Audacity_Selection" }
|
||||
},
|
||||
TrackPanelHasFocus{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
TrackPanelHasFocus() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
for (auto w = wxWindow::FindFocus(); w; w = w->GetParent()) {
|
||||
if (dynamic_cast<const NonKeystrokeInterceptingWindow*>(w))
|
||||
@@ -195,14 +203,15 @@ const ReservedCommandFlag
|
||||
return false;
|
||||
},
|
||||
CommandFlagOptions{}.DisableDefaultMessage()
|
||||
}; //lll
|
||||
}; return flag; }; //lll
|
||||
|
||||
const ReservedCommandFlag
|
||||
AudioIOBusyFlag{
|
||||
const ReservedCommandFlag&
|
||||
AudioIOBusyFlag() { static ReservedCommandFlag flag{
|
||||
AudioIOBusyPred,
|
||||
CommandFlagOptions{}.QuickTest()
|
||||
}, //lll
|
||||
CaptureNotBusyFlag{
|
||||
}; return flag; } //lll
|
||||
const ReservedCommandFlag&
|
||||
CaptureNotBusyFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &){
|
||||
auto gAudioIO = AudioIO::Get();
|
||||
return !(
|
||||
@@ -210,15 +219,16 @@ const ReservedCommandFlag
|
||||
gAudioIO->GetNumCaptureChannels() > 0
|
||||
);
|
||||
}
|
||||
};
|
||||
}; return flag; };
|
||||
|
||||
const ReservedCommandFlag
|
||||
LabelTracksExistFlag{
|
||||
const ReservedCommandFlag&
|
||||
LabelTracksExistFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return !TrackList::Get( project ).Any<const LabelTrack>().empty();
|
||||
}
|
||||
},
|
||||
UnsavedChangesFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
UnsavedChangesFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
auto &undoManager = UndoManager::Get( project );
|
||||
return
|
||||
@@ -227,23 +237,27 @@ const ReservedCommandFlag
|
||||
!ProjectFileIO::Get( project ).IsProjectSaved()
|
||||
;
|
||||
}
|
||||
},
|
||||
HasLastEffectFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
HasLastEffectFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return !MenuManager::Get( project ).mLastEffect.empty();
|
||||
}
|
||||
},
|
||||
UndoAvailableFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
UndoAvailableFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return ProjectHistory::Get( project ).UndoAvailable();
|
||||
}
|
||||
},
|
||||
RedoAvailableFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
RedoAvailableFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return ProjectHistory::Get( project ).RedoAvailable();
|
||||
}
|
||||
},
|
||||
ZoomInAvailableFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
ZoomInAvailableFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return
|
||||
ViewInfo::Get( project ).ZoomInAvailable()
|
||||
@@ -251,8 +265,9 @@ const ReservedCommandFlag
|
||||
!TrackList::Get( project ).Any().empty()
|
||||
;
|
||||
}
|
||||
},
|
||||
ZoomOutAvailableFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
ZoomOutAvailableFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return
|
||||
ViewInfo::Get( project ).ZoomOutAvailable()
|
||||
@@ -260,8 +275,9 @@ const ReservedCommandFlag
|
||||
!TrackList::Get( project ).Any().empty()
|
||||
;
|
||||
}
|
||||
},
|
||||
LabelsSelectedFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
LabelsSelectedFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
// At least one label track selected, having at least one label
|
||||
// completely within the time selection.
|
||||
@@ -282,46 +298,54 @@ const ReservedCommandFlag
|
||||
+ test;
|
||||
return !range.empty();
|
||||
}
|
||||
},
|
||||
PlayRegionLockedFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
PlayRegionLockedFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return ViewInfo::Get(project).playRegion.Locked();
|
||||
}
|
||||
}, //msmeyer
|
||||
PlayRegionNotLockedFlag{
|
||||
}; return flag; } //msmeyer
|
||||
const ReservedCommandFlag&
|
||||
PlayRegionNotLockedFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
const auto &playRegion = ViewInfo::Get(project).playRegion;
|
||||
return !playRegion.Locked() && !playRegion.Empty();
|
||||
}
|
||||
}, //msmeyer
|
||||
WaveTracksExistFlag{
|
||||
}; return flag; } //msmeyer
|
||||
const ReservedCommandFlag&
|
||||
WaveTracksExistFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return !TrackList::Get( project ).Any<const WaveTrack>().empty();
|
||||
}
|
||||
},
|
||||
}; return flag; }
|
||||
#ifdef USE_MIDI
|
||||
NoteTracksExistFlag{
|
||||
const ReservedCommandFlag&
|
||||
NoteTracksExistFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return !TrackList::Get( project ).Any<const NoteTrack>().empty();
|
||||
}
|
||||
}, //gsw
|
||||
NoteTracksSelectedFlag{
|
||||
}; return flag; } //gsw
|
||||
const ReservedCommandFlag&
|
||||
NoteTracksSelectedFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return !TrackList::Get( project ).Selected<const NoteTrack>().empty();
|
||||
}
|
||||
}, //gsw
|
||||
}; return flag; } //gsw
|
||||
#endif
|
||||
IsNotSyncLockedFlag{
|
||||
const ReservedCommandFlag&
|
||||
IsNotSyncLockedFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return !ProjectSettings::Get( project ).IsSyncLocked();
|
||||
}
|
||||
}, //awd
|
||||
IsSyncLockedFlag{
|
||||
}; return flag; } //awd
|
||||
const ReservedCommandFlag&
|
||||
IsSyncLockedFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
return ProjectSettings::Get( project ).IsSyncLocked();
|
||||
}
|
||||
}, //awd
|
||||
NotMinimizedFlag{
|
||||
}; return flag; } //awd
|
||||
const ReservedCommandFlag&
|
||||
NotMinimizedFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
const wxWindow *focus = FindProjectFrame( &project );
|
||||
if (focus) {
|
||||
@@ -333,14 +357,16 @@ const ReservedCommandFlag
|
||||
);
|
||||
},
|
||||
CommandFlagOptions{}.QuickTest()
|
||||
}, // prl
|
||||
PausedFlag{
|
||||
}; return flag; } // prl
|
||||
const ReservedCommandFlag&
|
||||
PausedFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject&){
|
||||
return AudioIOBase::Get()->IsPaused();
|
||||
},
|
||||
CommandFlagOptions{}.QuickTest()
|
||||
},
|
||||
PlayableTracksExistFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
PlayableTracksExistFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
auto &tracks = TrackList::Get( project );
|
||||
return
|
||||
@@ -351,8 +377,9 @@ const ReservedCommandFlag
|
||||
!tracks.Any<const WaveTrack>().empty()
|
||||
;
|
||||
}
|
||||
},
|
||||
AudioTracksSelectedFlag{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
AudioTracksSelectedFlag() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &project){
|
||||
auto &tracks = TrackList::Get( project );
|
||||
return
|
||||
@@ -364,8 +391,10 @@ const ReservedCommandFlag
|
||||
!tracks.Selected<const WaveTrack>().empty()
|
||||
;
|
||||
}
|
||||
},
|
||||
NoAutoSelect{
|
||||
}; return flag; }
|
||||
const ReservedCommandFlag&
|
||||
NoAutoSelect() { static ReservedCommandFlag flag{
|
||||
[](const AudacityProject &){ return true; }
|
||||
} // jkc
|
||||
}; return flag; } // jkc
|
||||
;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user