1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-11-14 17:14:07 +01:00

Fix static initialization order problem for more ReservedCommandFlags

This commit is contained in:
Paul Licameli
2020-01-29 11:15:19 -05:00
parent 25afa10bc4
commit ef41b8f2ee
4 changed files with 65 additions and 63 deletions

View File

@@ -999,30 +999,30 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
MenuTable::BaseItemSharedPtr LabelEditMenus(); MenuTable::BaseItemSharedPtr LabelEditMenus();
const ReservedCommandFlag static const ReservedCommandFlag
CutCopyAvailableFlag { &CutCopyAvailableFlag() { static ReservedCommandFlag flag{
[](const AudacityProject &project){ [](const AudacityProject &project){
auto range = TrackList::Get( project ).Any<const LabelTrack>() auto range = TrackList::Get( project ).Any<const LabelTrack>()
+ [&](const LabelTrack *pTrack){ + [&](const LabelTrack *pTrack){
return LabelTrackView::Get( *pTrack ).IsTextSelected( return LabelTrackView::Get( *pTrack ).IsTextSelected(
// unhappy const_cast because track focus might be set // unhappy const_cast because track focus might be set
const_cast<AudacityProject&>(project) const_cast<AudacityProject&>(project)
); );
}; };
if ( !range.empty() ) if ( !range.empty() )
return true; return true;
if ( if (
TimeSelectedPred( project ) TimeSelectedPred( project )
&& &&
TracksSelectedPred( project ) TracksSelectedPred( project )
) )
return true; return true;
return false; return false;
}, },
cutCopyOptions() cutCopyOptions()
}; }; return flag; }
// Under /MenuBar // Under /MenuBar
MenuTable::BaseItemSharedPtr EditMenu() MenuTable::BaseItemSharedPtr EditMenu()
@@ -1072,14 +1072,14 @@ MenuTable::BaseItemSharedPtr EditMenu()
// Basic Edit commands // Basic Edit commands
/* i18n-hint: (verb)*/ /* i18n-hint: (verb)*/
Command( wxT("Cut"), XXO("Cu&t"), FN(OnCut), Command( wxT("Cut"), XXO("Cu&t"), FN(OnCut),
AudioIONotBusyFlag() | CutCopyAvailableFlag | NoAutoSelect(), AudioIONotBusyFlag() | CutCopyAvailableFlag() | NoAutoSelect(),
wxT("Ctrl+X") ), wxT("Ctrl+X") ),
Command( wxT("Delete"), XXO("&Delete"), FN(OnDelete), Command( wxT("Delete"), XXO("&Delete"), FN(OnDelete),
AudioIONotBusyFlag() | TracksSelectedFlag() | TimeSelectedFlag() | NoAutoSelect(), AudioIONotBusyFlag() | TracksSelectedFlag() | TimeSelectedFlag() | NoAutoSelect(),
wxT("Ctrl+K") ), wxT("Ctrl+K") ),
/* i18n-hint: (verb)*/ /* i18n-hint: (verb)*/
Command( wxT("Copy"), XXO("&Copy"), FN(OnCopy), Command( wxT("Copy"), XXO("&Copy"), FN(OnCopy),
AudioIONotBusyFlag() | CutCopyAvailableFlag, wxT("Ctrl+C") ), AudioIONotBusyFlag() | CutCopyAvailableFlag(), wxT("Ctrl+C") ),
/* i18n-hint: (verb)*/ /* i18n-hint: (verb)*/
Command( wxT("Paste"), XXO("&Paste"), FN(OnPaste), Command( wxT("Paste"), XXO("&Paste"), FN(OnPaste),
AudioIONotBusyFlag(), wxT("Ctrl+V") ), AudioIONotBusyFlag(), wxT("Ctrl+V") ),
@@ -1197,7 +1197,7 @@ RegisteredMenuItemEnabler selectAnyTracks{{
RegisteredMenuItemEnabler selectWaveTracks{{ RegisteredMenuItemEnabler selectWaveTracks{{
[]{ return WaveTracksExistFlag(); }, []{ return WaveTracksExistFlag(); },
[]{ return TimeSelectedFlag() | WaveTracksSelectedFlag() | CutCopyAvailableFlag; }, []{ return TimeSelectedFlag() | WaveTracksSelectedFlag() | CutCopyAvailableFlag(); },
canSelectAll, canSelectAll,
selectAll selectAll
}}; }};
@@ -1205,7 +1205,7 @@ RegisteredMenuItemEnabler selectWaveTracks{{
// Also enable select for the noise reduction case. // Also enable select for the noise reduction case.
RegisteredMenuItemEnabler selectWaveTracks2{{ RegisteredMenuItemEnabler selectWaveTracks2{{
[]{ return WaveTracksExistFlag(); }, []{ return WaveTracksExistFlag(); },
[]{ return NoiseReductionTimeSelectedFlag() | WaveTracksSelectedFlag() | CutCopyAvailableFlag; }, []{ return NoiseReductionTimeSelectedFlag() | WaveTracksSelectedFlag() | CutCopyAvailableFlag(); },
canSelectAll, canSelectAll,
selectAll selectAll
}}; }};

View File

@@ -19,28 +19,28 @@
namespace { namespace {
const ReservedCommandFlag const ReservedCommandFlag
LabelsSelectedFlag{ &LabelsSelectedFlag() { static ReservedCommandFlag flag{
[](const AudacityProject &project){ [](const AudacityProject &project){
// At least one label track selected, having at least one label // At least one label track selected, having at least one label
// completely within the time selection. // completely within the time selection.
const auto &selectedRegion = ViewInfo::Get( project ).selectedRegion; const auto &selectedRegion = ViewInfo::Get( project ).selectedRegion;
const auto &test = [&]( const LabelTrack *pTrack ){ const auto &test = [&]( const LabelTrack *pTrack ){
const auto &labels = pTrack->GetLabels(); const auto &labels = pTrack->GetLabels();
return std::any_of( labels.begin(), labels.end(), return std::any_of( labels.begin(), labels.end(),
[&](const LabelStruct &label){ [&](const LabelStruct &label){
return return
label.getT0() >= selectedRegion.t0() label.getT0() >= selectedRegion.t0()
&& &&
label.getT1() <= selectedRegion.t1() label.getT1() <= selectedRegion.t1()
; ;
} }
); );
}; };
auto range = TrackList::Get( project ).Selected<const LabelTrack>() auto range = TrackList::Get( project ).Selected<const LabelTrack>()
+ test; + test;
return !range.empty(); return !range.empty();
} }
}; }; return flag; }
//Adds label and returns index of label in labeltrack. //Adds label and returns index of label in labeltrack.
int DoAddLabel( int DoAddLabel(
@@ -595,7 +595,7 @@ MenuTable::BaseItemSharedPtr LabelEditMenus()
static const auto NotBusyLabelsAndWaveFlags = static const auto NotBusyLabelsAndWaveFlags =
AudioIONotBusyFlag() | AudioIONotBusyFlag() |
LabelsSelectedFlag | WaveTracksExistFlag() | TimeSelectedFlag(); LabelsSelectedFlag() | WaveTracksExistFlag() | TimeSelectedFlag();
// Returns TWO menus. // Returns TWO menus.
@@ -636,11 +636,11 @@ MenuTable::BaseItemSharedPtr LabelEditMenus()
Menu( wxT("Labeled"), XO("La&beled Audio"), Menu( wxT("Labeled"), XO("La&beled Audio"),
/* i18n-hint: (verb)*/ /* i18n-hint: (verb)*/
Command( wxT("CutLabels"), XXO("&Cut"), FN(OnCutLabels), Command( wxT("CutLabels"), XXO("&Cut"), FN(OnCutLabels),
AudioIONotBusyFlag() | LabelsSelectedFlag | WaveTracksExistFlag() | AudioIONotBusyFlag() | LabelsSelectedFlag() | WaveTracksExistFlag() |
TimeSelectedFlag() | IsNotSyncLockedFlag(), TimeSelectedFlag() | IsNotSyncLockedFlag(),
Options{ wxT("Alt+X"), XO("Label Cut") } ), Options{ wxT("Alt+X"), XO("Label Cut") } ),
Command( wxT("DeleteLabels"), XXO("&Delete"), FN(OnDeleteLabels), Command( wxT("DeleteLabels"), XXO("&Delete"), FN(OnDeleteLabels),
AudioIONotBusyFlag() | LabelsSelectedFlag | WaveTracksExistFlag() | AudioIONotBusyFlag() | LabelsSelectedFlag() | WaveTracksExistFlag() |
TimeSelectedFlag() | IsNotSyncLockedFlag(), TimeSelectedFlag() | IsNotSyncLockedFlag(),
Options{ wxT("Alt+K"), XO("Label Delete") } ), Options{ wxT("Alt+K"), XO("Label Delete") } ),
@@ -668,7 +668,7 @@ MenuTable::BaseItemSharedPtr LabelEditMenus()
/* i18n-hint: (verb)*/ /* i18n-hint: (verb)*/
Command( wxT("SplitLabels"), XXO("Spli&t"), FN(OnSplitLabels), Command( wxT("SplitLabels"), XXO("Spli&t"), FN(OnSplitLabels),
AudioIONotBusyFlag() | LabelsSelectedFlag | WaveTracksExistFlag(), AudioIONotBusyFlag() | LabelsSelectedFlag() | WaveTracksExistFlag(),
Options{ wxT("Alt+I"), XO("Label Split") } ), Options{ wxT("Alt+I"), XO("Label Split") } ),
/* i18n-hint: (verb)*/ /* i18n-hint: (verb)*/
Command( wxT("JoinLabels"), XXO("&Join"), FN(OnJoinLabels), Command( wxT("JoinLabels"), XXO("&Join"), FN(OnJoinLabels),

View File

@@ -770,12 +770,12 @@ MenuTable::BaseItemSharedPtr GenerateMenu()
return menu; return menu;
} }
const ReservedCommandFlag static const ReservedCommandFlag
IsRealtimeNotActiveFlag{ &IsRealtimeNotActiveFlag() { static ReservedCommandFlag flag{
[](const AudacityProject &){ [](const AudacityProject &){
return !RealtimeEffectManager::Get().RealtimeIsActive(); return !RealtimeEffectManager::Get().RealtimeIsActive();
} }
}; //lll }; return flag; } //lll
// Under /MenuBar // Under /MenuBar
MenuTable::BaseItemSharedPtr EffectMenu() MenuTable::BaseItemSharedPtr EffectMenu()
@@ -820,7 +820,7 @@ MenuTable::BaseItemSharedPtr EffectMenu()
{ return Items( wxEmptyString, PopulateEffectsMenu( { return Items( wxEmptyString, PopulateEffectsMenu(
EffectTypeProcess, EffectTypeProcess,
AudioIONotBusyFlag() | TimeSelectedFlag() | WaveTracksSelectedFlag(), AudioIONotBusyFlag() | TimeSelectedFlag() | WaveTracksSelectedFlag(),
IsRealtimeNotActiveFlag ) IsRealtimeNotActiveFlag() )
); } ); }
) ) }; ) ) };
@@ -856,7 +856,7 @@ MenuTable::BaseItemSharedPtr AnalyzeMenu()
{ return Items( wxEmptyString, PopulateEffectsMenu( { return Items( wxEmptyString, PopulateEffectsMenu(
EffectTypeAnalyze, EffectTypeAnalyze,
AudioIONotBusyFlag() | TimeSelectedFlag() | WaveTracksSelectedFlag(), AudioIONotBusyFlag() | TimeSelectedFlag() | WaveTracksSelectedFlag(),
IsRealtimeNotActiveFlag ) IsRealtimeNotActiveFlag() )
); } ); }
) ) }; ) ) };
return menu; return menu;

View File

@@ -255,7 +255,9 @@ static const auto HasWaveDataPred =
}; };
static const ReservedCommandFlag static const ReservedCommandFlag
HasWaveDataFlag{ HasWaveDataPred }; // jkc &HasWaveDataFlag() { static ReservedCommandFlag flag{
HasWaveDataPred
}; return flag; } // jkc
namespace { namespace {
struct MenuItem { struct MenuItem {
@@ -278,12 +280,12 @@ namespace {
"Seeking" is normal speed playback but with skips, ... "Seeking" is normal speed playback but with skips, ...
*/ */
{ wxT("Scrub"), XO("&Scrub"), XO("Scrubbing"), { wxT("Scrub"), XO("&Scrub"), XO("Scrubbing"),
CaptureNotBusyFlag() | HasWaveDataFlag, CaptureNotBusyFlag() | HasWaveDataFlag(),
&Scrubber::OnScrub, false, &Scrubber::Scrubs, &Scrubber::OnScrub, false, &Scrubber::Scrubs,
}, },
{ wxT("Seek"), XO("See&k"), XO("Seeking"), { wxT("Seek"), XO("See&k"), XO("Seeking"),
CaptureNotBusyFlag() | HasWaveDataFlag, CaptureNotBusyFlag() | HasWaveDataFlag(),
&Scrubber::OnSeek, true, &Scrubber::Seeks, &Scrubber::OnSeek, true, &Scrubber::Seeks,
}, },