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

Remove Separator items from menu descriptions; use Section(...)

This commit is contained in:
Paul Licameli 2020-01-29 16:43:53 -05:00
parent c7fac7ae09
commit a84da3dee1
14 changed files with 237 additions and 170 deletions

View File

@ -138,8 +138,6 @@ ConditionalGroupItem::ConditionalGroupItem(
}
ConditionalGroupItem::~ConditionalGroupItem() {}
SeparatorItem::~SeparatorItem() {}
CommandItem::CommandItem(const CommandID &name_,
const TranslatableString &label_in_,
CommandFunctorPointer callback_,
@ -427,10 +425,6 @@ struct MenuItemVisitor : MenuVisitor
pCommandList->flags, pCommandList->isEffect);
}
else
if (dynamic_cast<SeparatorItem*>( pItem )) {
manager.AddSeparator();
}
else
if (const auto pSpecial =
dynamic_cast<SpecialItem*>( pItem )) {
const auto pCurrentMenu = manager.CurrentMenu();

View File

@ -633,13 +633,6 @@ namespace MenuTable {
Condition condition;
};
// Describes a separator between menu items
struct SeparatorItem final : SingleItem
{
SeparatorItem() : SingleItem{ wxEmptyString } {}
~SeparatorItem() override;
};
// usage:
// auto scope = FinderScope( findCommandHandler );
// return Items( ... );
@ -772,6 +765,17 @@ namespace MenuTable {
{ return std::make_unique< MenuItems >(
internalName, std::forward<Args>(args)... ); }
// Like Items, but insert a menu separator between the menu section and
// any other items or sections before or after it in the same (innermost,
// enclosing) menu.
// It's not necessary that the sisters of sections be other sections, but it
// might clarify the logical groupings.
template< typename... Args >
inline std::unique_ptr< MenuSection > Section(
const wxString &internalName, Args&&... args )
{ return std::make_unique< MenuSection >(
internalName, std::forward<Args>(args)... ); }
// Menu items can be constructed two ways, as for group items
// Items will appear in a main toolbar menu or in a sub-menu.
// The name is untranslated. Try to keep the name stable across Audacity
@ -830,9 +834,6 @@ namespace MenuTable {
return std::make_unique<MenuItem>(
internalName, title, std::move( items ) ); }
inline std::unique_ptr<SeparatorItem> Separator()
{ return std::make_unique<SeparatorItem>(); }
template< typename Handler >
inline std::unique_ptr<CommandItem> Command(
const CommandID &name,

View File

@ -1055,6 +1055,7 @@ MenuTable::BaseItemSharedPtr EditMenu()
static BaseItemSharedPtr menu{
( FinderScope{ findCommandHandler },
Menu( wxT("Edit"), XO("&Edit"),
Section( "",
Command( wxT("Undo"), XXO("&Undo"), FN(OnUndo),
AudioIONotBusyFlag() | UndoAvailableFlag(), wxT("Ctrl+Z") ),
@ -1065,10 +1066,10 @@ MenuTable::BaseItemSharedPtr EditMenu()
[](AudacityProject &project, wxMenu&) {
// Change names in the CommandManager as a side-effect
MenuManager::ModifyUndoMenuItems(project);
}),
Separator(),
})
),
Section( "",
// Basic Edit commands
/* i18n-hint: (verb)*/
Command( wxT("Cut"), XXO("Cu&t"), FN(OnCut),
@ -1085,11 +1086,12 @@ MenuTable::BaseItemSharedPtr EditMenu()
AudioIONotBusyFlag(), wxT("Ctrl+V") ),
/* i18n-hint: (verb)*/
Command( wxT("Duplicate"), XXO("Duplic&ate"), FN(OnDuplicate),
NotBusyTimeAndTracksFlags, wxT("Ctrl+D") ),
Separator(),
NotBusyTimeAndTracksFlags, wxT("Ctrl+D") )
),
Section( "",
Menu( wxT("RemoveSpecial"), XO("R&emove Special"),
Section( "",
/* i18n-hint: (verb) Do a special kind of cut*/
Command( wxT("SplitCut"), XXO("Spl&it Cut"), FN(OnSplitCut),
NotBusyTimeAndTracksFlags,
@ -1097,10 +1099,10 @@ MenuTable::BaseItemSharedPtr EditMenu()
/* i18n-hint: (verb) Do a special kind of DELETE*/
Command( wxT("SplitDelete"), XXO("Split D&elete"), FN(OnSplitDelete),
NotBusyTimeAndTracksFlags,
Options{ wxT("Ctrl+Alt+K") }.UseStrictFlags() ),
Separator(),
Options{ wxT("Ctrl+Alt+K") }.UseStrictFlags() )
),
Section( "",
/* i18n-hint: (verb)*/
Command( wxT("Silence"), XXO("Silence Audi&o"), FN(OnSilence),
AudioIONotBusyFlag() | TimeSelectedFlag() | WaveTracksSelectedFlag(),
@ -1109,28 +1111,31 @@ MenuTable::BaseItemSharedPtr EditMenu()
Command( wxT("Trim"), XXO("Tri&m Audio"), FN(OnTrim),
AudioIONotBusyFlag() | TimeSelectedFlag() | WaveTracksSelectedFlag(),
Options{ wxT("Ctrl+T") }.UseStrictFlags() )
)
)
),
Separator(),
Section( "",
//////////////////////////////////////////////////////////////////////////
Menu( wxT("Clip"), XO("Clip B&oundaries"),
Section( "",
/* i18n-hint: (verb) It's an item on a menu. */
Command( wxT("Split"), XXO("Sp&lit"), FN(OnSplit),
AudioIONotBusyFlag() | WaveTracksSelectedFlag(),
Options{ wxT("Ctrl+I") }.UseStrictFlags() ),
Command( wxT("SplitNew"), XXO("Split Ne&w"), FN(OnSplitNew),
AudioIONotBusyFlag() | TimeSelectedFlag() | WaveTracksSelectedFlag(),
Options{ wxT("Ctrl+Alt+I") }.UseStrictFlags() ),
Separator(),
Options{ wxT("Ctrl+Alt+I") }.UseStrictFlags() )
),
Section( "",
/* i18n-hint: (verb)*/
Command( wxT("Join"), XXO("&Join"), FN(OnJoin),
NotBusyTimeAndTracksFlags, wxT("Ctrl+J") ),
Command( wxT("Disjoin"), XXO("Detac&h at Silences"), FN(OnDisjoin),
NotBusyTimeAndTracksFlags, wxT("Ctrl+Alt+J") )
)
),
//////////////////////////////////////////////////////////////////////////
@ -1138,16 +1143,23 @@ MenuTable::BaseItemSharedPtr EditMenu()
LabelEditMenus(),
Command( wxT("EditMetaData"), XXO("&Metadata..."), FN(OnEditMetadata),
AudioIONotBusyFlag() ),
AudioIONotBusyFlag() )
//////////////////////////////////////////////////////////////////////////
#ifndef __WXMAC__
Separator(),
),
Section( "",
#else
,
#endif
Command( wxT("Preferences"), XXO("Pre&ferences..."), FN(OnPreferences),
AudioIONotBusyFlag(), prefKey )
)
) ) };
return menu;
}

View File

@ -162,8 +162,9 @@ MenuTable::BaseItemSharedPtr ExtraMenu()
// Table of menu factories.
// TODO: devise a registration system instead.
static BaseItemSharedPtr extraItems{ Items( wxEmptyString
, ExtraTransportMenu()
static BaseItemSharedPtr extraItems{ Items( wxEmptyString,
Section( "",
ExtraTransportMenu()
, ExtraToolsMenu()
, ExtraMixerMenu()
, ExtraEditMenu()
@ -171,10 +172,10 @@ MenuTable::BaseItemSharedPtr ExtraMenu()
, ExtraSeekMenu()
, ExtraDeviceMenu()
, ExtraSelectionMenu()
),
, MenuTable::Separator()
, ExtraGlobalCommands()
Section( "",
ExtraGlobalCommands()
, ExtraFocusMenu()
, ExtraCursorMenu()
, ExtraTrackMenu()
@ -183,6 +184,7 @@ MenuTable::BaseItemSharedPtr ExtraMenu()
// Delayed evaluation:
, ExtraMiscItems
)
) };
static const auto pred =

View File

@ -560,6 +560,7 @@ MenuTable::BaseItemSharedPtr FileMenu()
static BaseItemSharedPtr menu{
( FinderScope{ findCommandHandler },
Menu( wxT("File"), XO("&File"),
Section( "",
/*i18n-hint: "New" is an action (verb) to create a NEW project*/
Command( wxT("New"), XXO("&New"), FN(OnNew),
AudioIONotBusyFlag(), wxT("Ctrl+N") ),
@ -614,10 +615,10 @@ MenuTable::BaseItemSharedPtr FileMenu()
/////////////////////////////////////////////////////////////////////////////
Command( wxT("Close"), XXO("&Close"), FN(OnClose),
AudioIONotBusyFlag(), wxT("Ctrl+W") ),
Separator(),
AudioIONotBusyFlag(), wxT("Ctrl+W") )
),
Section( "",
Menu( wxT("Save"), XO("&Save Project"),
Command( wxT("Save"), XXO("&Save Project"), FN(OnSave),
AudioIONotBusyFlag() | UnsavedChangesFlag(), wxT("Ctrl+S") ),
@ -632,10 +633,10 @@ MenuTable::BaseItemSharedPtr FileMenu()
XXO("&Save Compressed Copy of Project..."),
FN(OnSaveCompressed), AudioIONotBusyFlag() )
#endif
)
),
Separator(),
Section( "",
Menu( wxT("Export"), XO("&Export"),
// Enable Export audio commands only when there are audio tracks.
Command( wxT("ExportMp3"), XXO("Export as MP&3"), FN(OnExportMp3),
@ -681,26 +682,25 @@ MenuTable::BaseItemSharedPtr FileMenu()
#endif // USE_MIDI
Command( wxT("ImportRaw"), XXO("&Raw Data..."), FN(OnImportRaw),
AudioIONotBusyFlag() )
)
),
Separator(),
/////////////////////////////////////////////////////////////////////////////
Section( "",
Command( wxT("PageSetup"), XXO("Pa&ge Setup..."), FN(OnPageSetup),
AudioIONotBusyFlag() | TracksExistFlag() ),
/* i18n-hint: (verb) It's item on a menu. */
Command( wxT("Print"), XXO("&Print..."), FN(OnPrint),
AudioIONotBusyFlag() | TracksExistFlag() ),
Separator(),
AudioIONotBusyFlag() | TracksExistFlag() )
),
Section( "",
// On the Mac, the Exit item doesn't actually go here...wxMac will
// pull it out
// and put it in the Audacity menu for us based on its ID.
/* i18n-hint: (verb) It's item on a menu. */
Command( wxT("Exit"), XXO("E&xit"), FN(OnExit),
AlwaysEnabledFlag, wxT("Ctrl+Q") )
)
) ) };
return menu;
}

View File

@ -395,12 +395,14 @@ void OnMenuTree(const CommandContext &context)
needSeparator.back() = true;
}
else {
MaybeEmitSeparator();
Indent();
// using GET for alpha only diagnostic tool
info += item.name.GET();
Return();
indentation = wxString{ ' ', TAB * ++level };
needSeparator.push_back( false );
firstItem.push_back( true );
}
}
@ -414,32 +416,38 @@ void OnMenuTree(const CommandContext &context)
needSeparator.back() = true;
}
else {
firstItem.pop_back();
needSeparator.pop_back();
indentation = wxString{ ' ', TAB * --level };
}
}
void Visit( SingleItem &item, const Path& ) override
{
MaybeEmitSeparator();
// using GET for alpha only diagnostic tool
Indent();
info += item.name.GET();
Return();
}
void MaybeEmitSeparator()
{
static const wxString separatorName{ '=', 20 };
bool separate = false;
if ( !needSeparator.empty() ) {
separate = needSeparator.back();
separate = needSeparator.back() && !firstItem.back();
needSeparator.back() = false;
firstItem.back() = false;
}
if ( separate || dynamic_cast<SeparatorItem*>(&item) ) {
if ( separate ) {
Indent();
info += separatorName;
Return();
}
if ( !dynamic_cast<SeparatorItem*>(&item) ) {
// using GET for alpha only diagnostic tool
Indent();
info += item.name.GET();
Return();
}
}
void Indent() { info += indentation; }
@ -449,6 +457,7 @@ void OnMenuTree(const CommandContext &context)
wxString indentation;
wxString info;
std::vector<bool> firstItem;
std::vector<bool> needSeparator;
} visitor{ project };
@ -521,6 +530,7 @@ MenuTable::BaseItemSharedPtr HelpMenu()
static BaseItemSharedPtr menu{
( FinderScope{ findCommandHandler },
Menu( wxT("Help"), XO("&Help"),
Section( "",
// QuickFix menu item not in Audacity 2.3.1 whilst we discuss further.
#ifdef EXPERIMENTAL_DA
// DA: Has QuickFix menu item.
@ -529,16 +539,21 @@ MenuTable::BaseItemSharedPtr HelpMenu()
// DA: 'Getting Started' rather than 'Quick Help'.
Command( wxT("QuickHelp"), XXO("&Getting Started"), FN(OnQuickHelp) ),
// DA: Emphasise it is the Audacity Manual (No separate DA manual).
Command( wxT("Manual"), XXO("Audacity &Manual"), FN(OnManual) ),
Command( wxT("Manual"), XXO("Audacity &Manual"), FN(OnManual) )
#else
Command( wxT("QuickHelp"), XXO("&Quick Help..."), FN(OnQuickHelp),
AlwaysEnabledFlag ),
Command( wxT("Manual"), XXO("&Manual..."), FN(OnManual),
AlwaysEnabledFlag ),
AlwaysEnabledFlag )
#endif
),
Separator(),
#ifdef __WXMAC__
Items
#else
Section
#endif
( "",
Menu( wxT("Diagnostics"), XO("&Diagnostics"),
Command( wxT("DeviceInfo"), XXO("Au&dio Device Info..."),
FN(OnAudioDeviceInfo),
@ -565,10 +580,13 @@ MenuTable::BaseItemSharedPtr HelpMenu()
FN(OnMenuTree),
AlwaysEnabledFlag )
#endif
)
#ifndef __WXMAC__
),
#ifndef __WXMAC__
Separator(),
Section( "",
#else
,
#endif
// DA: Does not fully support update checking.
@ -579,6 +597,7 @@ MenuTable::BaseItemSharedPtr HelpMenu()
#endif
Command( wxT("About"), XXO("&About Audacity..."), FN(OnAbout),
AlwaysEnabledFlag )
)
) ) };
return menu;
}

View File

@ -604,10 +604,12 @@ MenuTable::BaseItemSharedPtr LabelEditMenus()
Items( wxEmptyString,
Menu( wxT("Labels"), XO("&Labels"),
Section( "",
Command( wxT("EditLabels"), XXO("&Edit Labels..."), FN(OnEditLabels),
AudioIONotBusyFlag() ),
AudioIONotBusyFlag() )
),
Separator(),
Section( "",
Command( wxT("AddLabel"), XXO("Add Label at &Selection"),
FN(OnAddLabel), AlwaysEnabledFlag, wxT("Ctrl+B") ),
@ -622,18 +624,21 @@ MenuTable::BaseItemSharedPtr LabelEditMenus()
),
Command( wxT("PasteNewLabel"), XXO("Paste Te&xt to New Label"),
FN(OnPasteNewLabel),
AudioIONotBusyFlag(), wxT("Ctrl+Alt+V") ),
AudioIONotBusyFlag(), wxT("Ctrl+Alt+V") )
Separator(),
),
Section( "",
Command( wxT("TypeToCreateLabel"),
XXO("&Type to Create a Label (on/off)"),
FN(OnToggleTypeToCreateLabel), AlwaysEnabledFlag, checkOff )
)
), // first menu
/////////////////////////////////////////////////////////////////////////////
Menu( wxT("Labeled"), XO("La&beled Audio"),
Section( "",
/* i18n-hint: (verb)*/
Command( wxT("CutLabels"), XXO("&Cut"), FN(OnCutLabels),
AudioIONotBusyFlag() | LabelsSelectedFlag() | WaveTracksExistFlag() |
@ -642,9 +647,10 @@ MenuTable::BaseItemSharedPtr LabelEditMenus()
Command( wxT("DeleteLabels"), XXO("&Delete"), FN(OnDeleteLabels),
AudioIONotBusyFlag() | LabelsSelectedFlag() | WaveTracksExistFlag() |
TimeSelectedFlag() | IsNotSyncLockedFlag(),
Options{ wxT("Alt+K"), XO("Label Delete") } ),
Options{ wxT("Alt+K"), XO("Label Delete") } )
),
Separator(),
Section( "",
/* i18n-hint: (verb) A special way to cut out a piece of audio*/
Command( wxT("SplitCutLabels"), XXO("&Split Cut"),
@ -652,9 +658,11 @@ MenuTable::BaseItemSharedPtr LabelEditMenus()
Options{ wxT("Alt+Shift+X"), XO("Label Split Cut") } ),
Command( wxT("SplitDeleteLabels"), XXO("Sp&lit Delete"),
FN(OnSplitDeleteLabels), NotBusyLabelsAndWaveFlags,
Options{ wxT("Alt+Shift+K"), XO("Label Split Delete") } ),
Options{ wxT("Alt+Shift+K"), XO("Label Split Delete") } )
Separator(),
),
Section( "",
Command( wxT("SilenceLabels"), XXO("Silence &Audio"),
FN(OnSilenceLabels), NotBusyLabelsAndWaveFlags,
@ -662,10 +670,10 @@ MenuTable::BaseItemSharedPtr LabelEditMenus()
/* i18n-hint: (verb)*/
Command( wxT("CopyLabels"), XXO("Co&py"), FN(OnCopyLabels),
NotBusyLabelsAndWaveFlags,
Options{ wxT("Alt+Shift+C"), XO("Label Copy") } ),
Separator(),
Options{ wxT("Alt+Shift+C"), XO("Label Copy") } )
),
Section( "",
/* i18n-hint: (verb)*/
Command( wxT("SplitLabels"), XXO("Spli&t"), FN(OnSplitLabels),
AudioIONotBusyFlag() | LabelsSelectedFlag() | WaveTracksExistFlag(),
@ -677,6 +685,7 @@ MenuTable::BaseItemSharedPtr LabelEditMenus()
Command( wxT("DisjoinLabels"), XXO("Detac&h at Silences"),
FN(OnDisjoinLabels), NotBusyLabelsAndWaveFlags,
wxT("Alt+Shift+J") )
)
) // second menu
) ) }; // two menus

View File

@ -394,12 +394,18 @@ MenuTable::BaseItemPtrs PopulateEffectsMenu(
std::sort( defplugs.begin(), defplugs.end(), comp1 );
std::sort( optplugs.begin(), optplugs.end(), comp2 );
AddEffectMenuItems( result, defplugs, batchflags, realflags, true );
MenuTable::BaseItemPtrs section1;
AddEffectMenuItems( section1, defplugs, batchflags, realflags, true );
if (defplugs.size() && optplugs.size())
result.push_back( MenuTable::Separator() );
MenuTable::BaseItemPtrs section2;
AddEffectMenuItems( section2, optplugs, batchflags, realflags, false );
AddEffectMenuItems( result, optplugs, batchflags, realflags, false );
bool section = !section1.empty() && !section2.empty();
result.push_back( MenuTable::Items( "", std::move( section1 ) ) );
if ( section )
result.push_back( MenuTable::Section( "", std::move( section2 ) ) );
else
result.push_back( MenuTable::Items( "", std::move( section2 ) ) );
return result;
}
@ -752,13 +758,13 @@ MenuTable::BaseItemSharedPtr GenerateMenu()
( FinderScope{ findCommandHandler },
Menu( wxT("Generate"), XO("&Generate"),
#ifdef EXPERIMENTAL_EFFECT_MANAGEMENT
Section( "",
Command( wxT("ManageGenerators"), XXO("Add / Remove Plug-ins..."),
FN(OnManageGenerators), AudioIONotBusyFlag() ),
Separator(),
FN(OnManageGenerators), AudioIONotBusyFlag() )
),
#endif
Section( "",
// Delayed evaluation:
[](AudacityProject &)
{ return Items( wxEmptyString, PopulateEffectsMenu(
@ -766,6 +772,7 @@ MenuTable::BaseItemSharedPtr GenerateMenu()
AudioIONotBusyFlag(),
AudioIONotBusyFlag())
); }
)
) ) };
return menu;
}
@ -788,13 +795,13 @@ MenuTable::BaseItemSharedPtr EffectMenu()
( FinderScope{ findCommandHandler },
Menu( wxT("Effect"), XO("Effe&ct"),
#ifdef EXPERIMENTAL_EFFECT_MANAGEMENT
Section( "",
Command( wxT("ManageEffects"), XXO("Add / Remove Plug-ins..."),
FN(OnManageEffects), AudioIONotBusyFlag() ),
Separator(),
FN(OnManageEffects), AudioIONotBusyFlag() )
),
#endif
Section( "",
// Delayed evaluation:
[](AudacityProject &project)
{
@ -811,10 +818,10 @@ MenuTable::BaseItemSharedPtr EffectMenu()
AudioIONotBusyFlag() | TimeSelectedFlag() |
WaveTracksSelectedFlag() | HasLastEffectFlag(),
wxT("Ctrl+R"), findCommandHandler );
},
Separator(),
}
),
Section( "",
// Delayed evaluation:
[](AudacityProject &)
{ return Items( wxEmptyString, PopulateEffectsMenu(
@ -822,6 +829,7 @@ MenuTable::BaseItemSharedPtr EffectMenu()
AudioIONotBusyFlag() | TimeSelectedFlag() | WaveTracksSelectedFlag(),
IsRealtimeNotActiveFlag() )
); }
)
) ) };
return menu;
@ -838,13 +846,13 @@ MenuTable::BaseItemSharedPtr AnalyzeMenu()
( FinderScope{ findCommandHandler },
Menu( wxT("Analyze"), XO("&Analyze"),
#ifdef EXPERIMENTAL_EFFECT_MANAGEMENT
Section( "",
Command( wxT("ManageAnalyzers"), XXO("Add / Remove Plug-ins..."),
FN(OnManageAnalyzers), AudioIONotBusyFlag() ),
Separator(),
FN(OnManageAnalyzers), AudioIONotBusyFlag() )
),
#endif
Section( "",
Command( wxT("ContrastAnalyser"), XXO("Contrast..."), FN(OnContrast),
AudioIONotBusyFlag() | WaveTracksSelectedFlag() | TimeSelectedFlag(),
wxT("Ctrl+Shift+T") ),
@ -858,6 +866,7 @@ MenuTable::BaseItemSharedPtr AnalyzeMenu()
AudioIONotBusyFlag() | TimeSelectedFlag() | WaveTracksSelectedFlag(),
IsRealtimeNotActiveFlag() )
); }
)
) ) };
return menu;
}
@ -871,7 +880,7 @@ MenuTable::BaseItemSharedPtr ToolsMenu()
static BaseItemSharedPtr menu{
( FinderScope{ findCommandHandler },
Menu( wxT("Tools"), XO("T&ools"),
Section( "",
#ifdef EXPERIMENTAL_EFFECT_MANAGEMENT
Command( wxT("ManageTools"), XXO("Add / Remove Plug-ins..."),
FN(OnManageTools), AudioIONotBusyFlag() ),
@ -886,18 +895,20 @@ MenuTable::BaseItemSharedPtr ToolsMenu()
Menu( wxT("Macros"), XO("&Apply Macro"),
// Palette has no access key to ensure first letter navigation of
// sub menu
Section( "",
Command( wxT("ApplyMacrosPalette"), XXO("Palette..."),
FN(OnApplyMacrosPalette), AudioIONotBusyFlag() ),
Separator(),
FN(OnApplyMacrosPalette), AudioIONotBusyFlag() )
),
Section( "",
// Delayed evaluation:
[](AudacityProject&)
{ return Items( wxEmptyString, PopulateMacrosMenu( AudioIONotBusyFlag() ) ); }
)
)
),
Separator(),
Section( "",
Command( wxT("FancyScreenshot"), XXO("&Screenshot..."),
FN(OnScreenshot), AudioIONotBusyFlag() ),
@ -907,11 +918,11 @@ MenuTable::BaseItemSharedPtr ToolsMenu()
// TODO: What should we do here? Make benchmark a plug-in?
// Easy enough to do. We'd call it mod-self-test.
Command( wxT("Benchmark"), XXO("&Run Benchmark..."),
FN(OnBenchmark), AudioIONotBusyFlag() ),
FN(OnBenchmark), AudioIONotBusyFlag() )
//#endif
),
Separator(),
Section( "",
// Delayed evaluation:
[](AudacityProject&)
{ return Items( wxEmptyString, PopulateEffectsMenu(
@ -919,12 +930,11 @@ MenuTable::BaseItemSharedPtr ToolsMenu()
AudioIONotBusyFlag(),
AudioIONotBusyFlag() )
); }
)
#ifdef IS_ALPHA
,
Separator(),
Section( "",
Command( wxT("SimulateRecordingErrors"),
XXO("Simulate Recording Errors"),
FN(OnSimulateRecordingErrors),
@ -939,6 +949,7 @@ MenuTable::BaseItemSharedPtr ToolsMenu()
Options{}.CheckTest(
[](AudacityProject&){
return AudioIO::Get()->mDetectUpstreamDropouts; } ) )
)
#endif
) ) };
return menu;

View File

@ -1039,6 +1039,7 @@ MenuTable::BaseItemSharedPtr SelectMenu()
( FinderScope{ findCommandHandler },
/* i18n-hint: (verb) It's an item on a menu. */
Menu( wxT("Select"), XO("&Select"),
Section( "",
Command( wxT("SelectAll"), XXO("&All"), FN(OnSelectAll),
TracksExistFlag(),
Options{ wxT("Ctrl+A"), XO("Select All") } ),
@ -1066,6 +1067,7 @@ MenuTable::BaseItemSharedPtr SelectMenu()
//////////////////////////////////////////////////////////////////////////
Menu( wxT("Region"), XO("R&egion"),
Section( "",
Command( wxT("SetLeftSelection"), XXO("&Left at Playback Position"),
FN(OnSetLeftSelection), TracksExistFlag(),
Options{ wxT("["), XO("Set Selection Left at Play Position") } ),
@ -1080,10 +1082,10 @@ MenuTable::BaseItemSharedPtr SelectMenu()
Options{ wxT("Shift+K"), XO("Select Cursor to Track End") } ),
Command( wxT("SelTrackStartToEnd"), XXO("Track Start to En&d"),
FN(OnSelectTrackStartToEnd), AlwaysEnabledFlag,
Options{}.LongName( XO("Select Track Start to End") ) ),
Separator(),
Options{}.LongName( XO("Select Track Start to End") ) )
),
Section( "",
// GA: Audacity had 'Store Re&gion' here previously. There is no
// one-step way to restore the 'Saved Cursor Position' in Select Menu,
// so arguably using the word 'Selection' to do duty for both saving
@ -1094,6 +1096,7 @@ MenuTable::BaseItemSharedPtr SelectMenu()
// Audacity had 'Retrieve Regio&n' here previously.
Command( wxT("SelRestore"), XXO("Retrieve Selectio&n"),
FN(OnSelectionRestore), TracksExistFlag() )
)
),
//////////////////////////////////////////////////////////////////////////
@ -1114,12 +1117,12 @@ MenuTable::BaseItemSharedPtr SelectMenu()
//////////////////////////////////////////////////////////////////////////
ClipSelectMenu(),
ClipSelectMenu()
//////////////////////////////////////////////////////////////////////////
),
Separator(),
Section( "",
Command( wxT("SelCursorStoredCursor"),
XXO("Cursor to Stored &Cursor Position"),
FN(OnSelectCursorStoredCursor), TracksExistFlag(),
@ -1127,15 +1130,16 @@ MenuTable::BaseItemSharedPtr SelectMenu()
Command( wxT("StoreCursorPosition"), XXO("Store Cursor Pos&ition"),
FN(OnCursorPositionStore),
WaveTracksExistFlag() ),
WaveTracksExistFlag() )
// Save cursor position is used in some selections.
// Maybe there should be a restore for it?
),
Separator(),
Section( "",
Command( wxT("ZeroCross"), XXO("At &Zero Crossings"),
FN(OnZeroCrossing), TracksSelectedFlag(),
Options{ wxT("Z"), XO("Select Zero Crossing") } )
)
) ) };
return menu;
}

View File

@ -264,12 +264,13 @@ MenuTable::BaseItemSharedPtr ToolbarsMenu()
static BaseItemSharedPtr menu{
( FinderScope{ findCommandHandler },
Menu( wxT("Toolbars"), XO("&Toolbars"),
Section( "",
/* i18n-hint: (verb)*/
Command( wxT("ResetToolbars"), XXO("Reset Toolb&ars"),
FN(OnResetToolBars), AlwaysEnabledFlag ),
Separator(),
FN(OnResetToolBars), AlwaysEnabledFlag )
),
Section( "",
/* i18n-hint: Clicking this menu item shows the toolbar
with the big buttons on it (play record etc)*/
Command( wxT("ShowTransportTB"), XXO("&Transport Toolbar"),
@ -332,6 +333,7 @@ MenuTable::BaseItemSharedPtr ToolbarsMenu()
XXO("Spe&ctral Selection Toolbar"),
FN(OnShowSpectralSelectionToolBar), AlwaysEnabledFlag, checkOff )
#endif
)
) ) };
return menu;
}

View File

@ -1287,6 +1287,7 @@ MenuTable::BaseItemSharedPtr TracksMenu()
static BaseItemSharedPtr menu{
( FinderScope{ findCommandHandler },
Menu( wxT("Tracks"), XO("&Tracks"),
Section( "",
Menu( wxT("Add"), XO("Add &New"),
Command( wxT("NewMonoTrack"), XXO("&Mono Track"), FN(OnNewWaveTrack),
AudioIONotBusyFlag(), wxT("Ctrl+Shift+N") ),
@ -1296,12 +1297,12 @@ MenuTable::BaseItemSharedPtr TracksMenu()
FN(OnNewLabelTrack), AudioIONotBusyFlag() ),
Command( wxT("NewTimeTrack"), XXO("&Time Track"),
FN(OnNewTimeTrack), AudioIONotBusyFlag() )
)
),
//////////////////////////////////////////////////////////////////////////
Separator(),
Section( "",
Menu( wxT("Mix"), XO("Mi&x"),
// Delayed evaluation
// Stereo to Mono is an oddball command that is also subject to control
@ -1329,15 +1330,15 @@ MenuTable::BaseItemSharedPtr TracksMenu()
),
Command( wxT("Resample"), XXO("&Resample..."), FN(OnResample),
AudioIONotBusyFlag() | WaveTracksSelectedFlag() ),
Separator(),
AudioIONotBusyFlag() | WaveTracksSelectedFlag() )
),
Section( "",
Command( wxT("RemoveTracks"), XXO("Remo&ve Tracks"), FN(OnRemoveTracks),
AudioIONotBusyFlag() | AnyTracksSelectedFlag() ),
Separator(),
AudioIONotBusyFlag() | AnyTracksSelectedFlag() )
),
Section( "",
Menu( wxT("Mute"), XO("M&ute/Unmute"),
Command( wxT("MuteAllTracks"), XXO("&Mute All Tracks"),
FN(OnMuteAllTracks), AudioIONotBusyFlag(), wxT("Ctrl+U") ),
@ -1359,35 +1360,35 @@ MenuTable::BaseItemSharedPtr TracksMenu()
Command( wxT("PanCenter"), XXO("&Center"), FN(OnPanCenter),
TracksSelectedFlag(),
Options{}.LongName( XO("Pan Center") ) )
)
),
Separator(),
//////////////////////////////////////////////////////////////////////////
Section( "",
Menu( wxT("Align"), XO("&Align Tracks"), // XO("Just Move Tracks"),
Section( "",
// Mutual alignment of tracks independent of selection or zero
CommandGroup(wxT("Align"),
{
{ wxT("EndToEnd"), XO("&Align End to End") },
{ wxT("Together"), XO("Align &Together") },
},
FN(OnAlignNoSync), AudioIONotBusyFlag() | TracksSelectedFlag()),
Separator(),
FN(OnAlignNoSync), AudioIONotBusyFlag() | TracksSelectedFlag())
),
Section( "",
// Alignment commands using selection or zero
CommandGroup(wxT("Align"),
alignLabels(),
FN(OnAlign), AudioIONotBusyFlag() | TracksSelectedFlag()),
Separator(),
FN(OnAlign), AudioIONotBusyFlag() | TracksSelectedFlag())
),
Section( "",
Command( wxT("MoveSelectionWithTracks"),
XXO("&Move Selection with Tracks (on/off)"),
FN(OnMoveSelectionWithTracks),
AlwaysEnabledFlag,
Options{}.CheckTest( wxT("/GUI/MoveSelectionWithTracks"), false ) )
)
),
#if 0
@ -1419,17 +1420,19 @@ MenuTable::BaseItemSharedPtr TracksMenu()
)
//////////////////////////////////////////////////////////////////////////
)
#ifdef EXPERIMENTAL_SYNC_LOCK
,
Separator(),
Section( "",
Command( wxT("SyncLock"), XXO("Sync-&Lock Tracks (on/off)"),
FN(OnSyncLock), AlwaysEnabledFlag,
Options{}.CheckTest( wxT("/GUI/SyncLockTracks"), false ) )
)
#endif
) ) };
return menu;
}

View File

@ -986,6 +986,7 @@ MenuTable::BaseItemSharedPtr TransportMenu()
/* i18n-hint: 'Transport' is the name given to the set of controls that
play, record, pause etc. */
Menu( wxT("Transport"), XO("Tra&nsport"),
Section( "",
Menu( wxT("Play"), XO("Pl&aying"),
/* i18n-hint: (verb) Start or Stop audio playback*/
Command( wxT("PlayStop"), XXO("Pl&ay/Stop"), FN(OnPlayStop),
@ -1040,25 +1041,24 @@ MenuTable::BaseItemSharedPtr TransportMenu()
// Scrubbing sub-menu
Scrubber::Menu(),
CursorMenu(),
Separator(),
//////////////////////////////////////////////////////////////////////////
CursorMenu()
),
Section( "",
Menu( wxT("PlayRegion"), XO("Pla&y Region"),
Command( wxT("LockPlayRegion"), XXO("&Lock"), FN(OnLockPlayRegion),
PlayRegionNotLockedFlag() ),
Command( wxT("UnlockPlayRegion"), XXO("&Unlock"),
FN(OnUnlockPlayRegion), PlayRegionLockedFlag() )
)
),
Separator(),
Section( "",
Command( wxT("RescanDevices"), XXO("R&escan Audio Devices"),
FN(OnRescanDevices), AudioIONotBusyFlag() | CanStopAudioStreamFlag() ),
Menu( wxT("Options"), XO("Transport &Options"),
Section( "",
// Sound Activated recording options
Command( wxT("SoundActivationLevel"),
XXO("Sound Activation Le&vel..."), FN(OnSoundActivated),
@ -1066,9 +1066,10 @@ MenuTable::BaseItemSharedPtr TransportMenu()
Command( wxT("SoundActivation"),
XXO("Sound A&ctivated Recording (on/off)"),
FN(OnToggleSoundActivated),
AudioIONotBusyFlag() | CanStopAudioStreamFlag(), checkOff ),
Separator(),
AudioIONotBusyFlag() | CanStopAudioStreamFlag(), checkOff )
),
Section( "",
Command( wxT("PinnedHead"), XXO("Pinned Play/Record &Head (on/off)"),
FN(OnTogglePinnedHead),
// Switching of scrolling on and off is permitted
@ -1091,6 +1092,8 @@ MenuTable::BaseItemSharedPtr TransportMenu()
AudioIONotBusyFlag() | CanStopAudioStreamFlag(), checkOff )
#endif
)
)
)
) ) };
return menu;
}

View File

@ -445,7 +445,9 @@ MenuTable::BaseItemSharedPtr ViewMenu()
static BaseItemSharedPtr menu{
( FinderScope{ findCommandHandler },
Menu( wxT("View"), XO("&View"),
Section( "",
Menu( wxT("Zoom"), XO("&Zoom"),
Section( "",
Command( wxT("ZoomIn"), XXO("Zoom &In"), FN(OnZoomIn),
ZoomInAvailableFlag(), wxT("Ctrl+1") ),
Command( wxT("ZoomNormal"), XXO("Zoom &Normal"), FN(OnZoomNormal),
@ -455,11 +457,13 @@ MenuTable::BaseItemSharedPtr ViewMenu()
Command( wxT("ZoomSel"), XXO("&Zoom to Selection"), FN(OnZoomSel),
TimeSelectedFlag(), wxT("Ctrl+E") ),
Command( wxT("ZoomToggle"), XXO("Zoom &Toggle"), FN(OnZoomToggle),
TracksExistFlag(), wxT("Shift+Z") ),
Separator(),
TracksExistFlag(), wxT("Shift+Z") )
),
Section( "",
Command( wxT("AdvancedVZoom"), XXO("Advanced &Vertical Zooming"),
FN(OnAdvancedVZoom), AlwaysEnabledFlag,
Options{}.CheckTest( wxT("/GUI/VerticalZooming"), false ) )
)
),
Menu( wxT("TrackSize"), XO("T&rack Size"),
@ -480,10 +484,10 @@ MenuTable::BaseItemSharedPtr ViewMenu()
Command( wxT("SkipSelEnd"), XXO("Selection En&d"), FN(OnGoSelEnd),
TimeSelectedFlag(),
Options{ wxT("Ctrl+]"), XO("Skip to Selection End") } )
)
),
Separator(),
Section( "",
// History window should be available either for UndoAvailableFlag
// or RedoAvailableFlag,
// but we can't make the AddItem flags and mask have both,
@ -528,16 +532,16 @@ MenuTable::BaseItemSharedPtr ViewMenu()
Command( wxT("Karaoke"), XXO("&Karaoke..."), FN(OnKaraoke),
LabelTracksExistFlag() ),
Command( wxT("MixerBoard"), XXO("&Mixer Board..."), FN(OnMixerBoard),
PlayableTracksExistFlag() ),
Separator(),
PlayableTracksExistFlag() )
),
Section( "",
//////////////////////////////////////////////////////////////////////////
ToolbarsMenu(),
Separator(),
ToolbarsMenu()
),
Section( "",
Command( wxT("ShowExtraMenus"), XXO("&Extra Menus (on/off)"),
FN(OnShowExtraMenus), AlwaysEnabledFlag,
Options{}.CheckTest( wxT("/GUI/ShowExtraMenus"), false ) ),
@ -549,6 +553,7 @@ MenuTable::BaseItemSharedPtr ViewMenu()
Command( wxT("ShowEffectsRack"), XXO("Show Effects Rack"),
FN(OnShowEffectsRack), AlwaysEnabledFlag, checkOff )
#endif
)
) ) };
return menu;

View File

@ -128,6 +128,7 @@ MenuTable::BaseItemSharedPtr WindowMenu()
static BaseItemSharedPtr menu{
( FinderScope{ findCommandHandler },
Menu( wxT("Window"), XO("&Window"),
Section( "",
/* i18n-hint: Standard Macintosh Window menu item: Make (the current
* window) shrink to an icon on the dock */
Command( wxT("MacMinimize"), XXO("&Minimize"), FN(OnMacMinimize),
@ -135,14 +136,15 @@ MenuTable::BaseItemSharedPtr WindowMenu()
/* i18n-hint: Standard Macintosh Window menu item: Make (the current
* window) full sized */
Command( wxT("MacZoom"), XXO("&Zoom"),
FN(OnMacZoom), NotMinimizedFlag() ),
Separator(),
FN(OnMacZoom), NotMinimizedFlag() )
),
Section( "",
/* i18n-hint: Standard Macintosh Window menu item: Make all project
* windows un-hidden */
Command( wxT("MacBringAllToFront"), XXO("&Bring All to Front"),
FN(OnMacBringAllToFront), AlwaysEnabledFlag )
)
) ) };
return menu;
}