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:
@@ -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
|
||||||
}};
|
}};
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user