mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-14 15:20:29 +02:00
Simplify the FN macros in src/menus/*.cpp...
... Eliminate repetitious passing of the finder function into each of the calls to Command and CommandGroup.
This commit is contained in:
parent
702b8b1e9d
commit
512c27d422
@ -113,7 +113,7 @@ void ModNullCallback::OnFuncSecond(const CommandContext &)
|
||||
}
|
||||
ModNullCallback * pModNullCallback=NULL;
|
||||
|
||||
#define ModNullFN(X) ident, static_cast<CommandFunctorPointer>(&ModNullCallback:: X)
|
||||
#define ModNullFN(X) static_cast<CommandFunctorPointer>((&ModNullCallback:: X))
|
||||
|
||||
extern "C" {
|
||||
|
||||
@ -163,12 +163,12 @@ int ModuleDispatch(ModuleDispatchTypes type)
|
||||
c->AddItem(
|
||||
_T("A New Command"), // internal name
|
||||
XO("1st Experimental Command..."), //displayed name
|
||||
ModNullFN( OnFuncFirst ),
|
||||
ident, ModNullFN( OnFuncFirst ),
|
||||
AudioIONotBusyFlag );
|
||||
c->AddItem(
|
||||
_T("Another New Command"),
|
||||
_T("Another New Command"),
|
||||
XO("2nd Experimental Command"),
|
||||
ModNullFN( OnFuncSecond ),
|
||||
ident, ModNullFN( OnFuncSecond ),
|
||||
AudioIONotBusyFlag );
|
||||
c->ClearCurrentMenu();
|
||||
}
|
||||
|
@ -134,10 +134,10 @@ SeparatorItem::~SeparatorItem() {}
|
||||
|
||||
CommandItem::CommandItem(const CommandID &name_,
|
||||
const TranslatableString &label_in_,
|
||||
CommandHandlerFinder finder_,
|
||||
CommandFunctorPointer callback_,
|
||||
CommandFlag flags_,
|
||||
const CommandManager::Options &options_)
|
||||
const CommandManager::Options &options_,
|
||||
CommandHandlerFinder finder_)
|
||||
: name{ name_ }, label_in{ label_in_ }
|
||||
, finder{ finder_ }, callback{ callback_ }
|
||||
, flags{ flags_ }, options{ options_ }
|
||||
@ -146,10 +146,10 @@ CommandItem::~CommandItem() {}
|
||||
|
||||
CommandGroupItem::CommandGroupItem(const wxString &name_,
|
||||
std::initializer_list< ComponentInterfaceSymbol > items_,
|
||||
CommandHandlerFinder finder_,
|
||||
CommandFunctorPointer callback_,
|
||||
CommandFlag flags_,
|
||||
bool isEffect_)
|
||||
bool isEffect_,
|
||||
CommandHandlerFinder finder_)
|
||||
: name{ name_ }, items{ items_ }
|
||||
, finder{ finder_ }, callback{ callback_ }
|
||||
, flags{ flags_ }, isEffect{ isEffect_ }
|
||||
@ -158,6 +158,15 @@ CommandGroupItem::~CommandGroupItem() {}
|
||||
|
||||
SpecialItem::~SpecialItem() {}
|
||||
|
||||
CommandHandlerFinder FinderScope::sFinder =
|
||||
[](AudacityProject &project) -> CommandHandlerObject & {
|
||||
// If this default finder function is reached, then FinderScope should
|
||||
// have been used somewhere, or an explicit CommandHandlerFinder passed
|
||||
// to menu item constructors
|
||||
wxASSERT( false );
|
||||
return project;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
@ -490,13 +490,57 @@ namespace MenuTable {
|
||||
~SeparatorItem() override;
|
||||
};
|
||||
|
||||
// usage:
|
||||
// auto scope = FinderScope( findCommandHandler );
|
||||
// return Items( ... );
|
||||
//
|
||||
// or:
|
||||
// return FinderScope( findCommandHandler )
|
||||
// .Eval( Items( ... ) );
|
||||
//
|
||||
// where findCommandHandler names a function.
|
||||
// This is used before a sequence of many calls to Command() and
|
||||
// CommandGroup(), so that the finder argument need not be specified
|
||||
// in each call.
|
||||
class FinderScope : ValueRestorer< CommandHandlerFinder >
|
||||
{
|
||||
static CommandHandlerFinder sFinder;
|
||||
|
||||
public:
|
||||
static CommandHandlerFinder DefaultFinder() { return sFinder; }
|
||||
|
||||
explicit
|
||||
FinderScope( CommandHandlerFinder finder )
|
||||
: ValueRestorer( sFinder, finder )
|
||||
{}
|
||||
|
||||
// See usage comment above about this pass-through function
|
||||
template< typename Value > Value&& Eval( Value &&value ) const
|
||||
{ return std::forward<Value>(value); }
|
||||
};
|
||||
|
||||
struct CommandItem final : BaseItem {
|
||||
CommandItem(const CommandID &name_,
|
||||
const TranslatableString &label_in_,
|
||||
CommandHandlerFinder finder_,
|
||||
CommandFunctorPointer callback_,
|
||||
CommandFlag flags_,
|
||||
const CommandManager::Options &options_);
|
||||
const CommandManager::Options &options_,
|
||||
CommandHandlerFinder finder_);
|
||||
|
||||
// Takes a pointer to member function directly, and delegates to the
|
||||
// previous constructor; useful within the lifetime of a FinderScope
|
||||
template< typename Handler >
|
||||
CommandItem(const CommandID &name_,
|
||||
const TranslatableString &label_in_,
|
||||
void (Handler::*pmf)(const CommandContext&),
|
||||
CommandFlag flags_,
|
||||
const CommandManager::Options &options_,
|
||||
CommandHandlerFinder finder = FinderScope::DefaultFinder())
|
||||
: CommandItem(name_, label_in_,
|
||||
static_cast<CommandFunctorPointer>(pmf),
|
||||
flags_, options_, finder)
|
||||
{}
|
||||
|
||||
~CommandItem() override;
|
||||
|
||||
const CommandID name;
|
||||
@ -510,10 +554,25 @@ namespace MenuTable {
|
||||
struct CommandGroupItem final : BaseItem {
|
||||
CommandGroupItem(const wxString &name_,
|
||||
std::initializer_list< ComponentInterfaceSymbol > items_,
|
||||
CommandHandlerFinder finder_,
|
||||
CommandFunctorPointer callback_,
|
||||
CommandFlag flags_,
|
||||
bool isEffect_);
|
||||
bool isEffect_,
|
||||
CommandHandlerFinder finder_);
|
||||
|
||||
// Takes a pointer to member function directly, and delegates to the
|
||||
// previous constructor; useful within the lifetime of a FinderScope
|
||||
template< typename Handler >
|
||||
CommandGroupItem(const wxString &name_,
|
||||
std::initializer_list< ComponentInterfaceSymbol > items_,
|
||||
void (Handler::*pmf)(const CommandContext&),
|
||||
CommandFlag flags_,
|
||||
bool isEffect_,
|
||||
CommandHandlerFinder finder = FinderScope::DefaultFinder())
|
||||
: CommandGroupItem(name_, items_,
|
||||
static_cast<CommandFunctorPointer>(pmf),
|
||||
flags_, isEffect_, finder)
|
||||
{}
|
||||
|
||||
~CommandGroupItem() override;
|
||||
|
||||
const wxString name;
|
||||
@ -588,25 +647,29 @@ namespace MenuTable {
|
||||
inline std::unique_ptr<SeparatorItem> Separator()
|
||||
{ return std::make_unique<SeparatorItem>(); }
|
||||
|
||||
template< typename Handler >
|
||||
inline std::unique_ptr<CommandItem> Command(
|
||||
const CommandID &name,
|
||||
const TranslatableString &label_in,
|
||||
CommandHandlerFinder finder, CommandFunctorPointer callback,
|
||||
CommandFlag flags, const CommandManager::Options &options = {})
|
||||
void (Handler::*pmf)(const CommandContext&),
|
||||
CommandFlag flags, const CommandManager::Options &options = {},
|
||||
CommandHandlerFinder finder = FinderScope::DefaultFinder())
|
||||
{
|
||||
return std::make_unique<CommandItem>(
|
||||
name, label_in, finder, callback, flags, options
|
||||
name, label_in, pmf, flags, options, finder
|
||||
);
|
||||
}
|
||||
|
||||
template< typename Handler >
|
||||
inline std::unique_ptr<CommandGroupItem> CommandGroup(
|
||||
const wxString &name,
|
||||
std::initializer_list< ComponentInterfaceSymbol > items,
|
||||
CommandHandlerFinder finder, CommandFunctorPointer callback,
|
||||
CommandFlag flags, bool isEffect = false)
|
||||
void (Handler::*pmf)(const CommandContext&),
|
||||
CommandFlag flags, bool isEffect = false,
|
||||
CommandHandlerFinder finder = FinderScope::DefaultFinder())
|
||||
{
|
||||
return std::make_unique<CommandGroupItem>(
|
||||
name, items, finder, callback, flags, isEffect
|
||||
name, items, pmf, flags, isEffect, finder
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -821,15 +821,15 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& ClipActions::Handler :: X)
|
||||
#define FN(X) (& ClipActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
using Options = CommandManager::Options;
|
||||
|
||||
return Menu( XO("Clip B&oundaries"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("Clip B&oundaries"),
|
||||
Command( wxT("SelPrevClipBoundaryToCursor"),
|
||||
XXO("Pre&vious Clip Boundary to Cursor"),
|
||||
FN(OnSelectPrevClipBoundaryToCursor),
|
||||
@ -844,7 +844,7 @@ MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& )
|
||||
Command( wxT("SelNextClip"), XXO("N&ext Clip"), FN(OnSelectNextClip),
|
||||
WaveTracksExistFlag,
|
||||
Options{ wxT("Alt+."), XO("Select Next Clip") } )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ClipCursorItems( AudacityProject & )
|
||||
@ -852,7 +852,8 @@ MenuTable::BaseItemPtr ClipCursorItems( AudacityProject & )
|
||||
using namespace MenuTable;
|
||||
using Options = CommandManager::Options;
|
||||
|
||||
return Items(
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Items(
|
||||
Command( wxT("CursPrevClipBoundary"), XXO("Pre&vious Clip Boundary"),
|
||||
FN(OnCursorPrevClipBoundary),
|
||||
WaveTracksExistFlag,
|
||||
@ -861,19 +862,20 @@ MenuTable::BaseItemPtr ClipCursorItems( AudacityProject & )
|
||||
FN(OnCursorNextClipBoundary),
|
||||
WaveTracksExistFlag,
|
||||
Options{}.LongName( XO("Cursor to Next Clip Boundary") ) )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraClipCursorItems( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
|
||||
return Items(
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Items(
|
||||
Command( wxT("ClipLeft"), XXO("Clip L&eft"), FN(OnClipLeft),
|
||||
TracksExistFlag | TrackPanelHasFocus, wxT("\twantKeyup") ),
|
||||
Command( wxT("ClipRight"), XXO("Clip Rig&ht"), FN(OnClipRight),
|
||||
TracksExistFlag | TrackPanelHasFocus, wxT("\twantKeyup") )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -995,8 +995,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& EditActions::Handler :: X)
|
||||
#define FN(X) (& EditActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr LabelEditMenus( AudacityProject &project );
|
||||
|
||||
@ -1052,7 +1051,8 @@ MenuTable::BaseItemPtr EditMenu( AudacityProject & )
|
||||
#endif
|
||||
;
|
||||
|
||||
return Menu( XO("&Edit"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Edit"),
|
||||
Command( wxT("Undo"), XXO("&Undo"), FN(OnUndo),
|
||||
AudioIONotBusyFlag | UndoAvailableFlag, wxT("Ctrl+Z") ),
|
||||
|
||||
@ -1145,7 +1145,7 @@ MenuTable::BaseItemPtr EditMenu( AudacityProject & )
|
||||
|
||||
Command( wxT("Preferences"), XXO("Pre&ferences..."), FN(OnPreferences),
|
||||
AudioIONotBusyFlag, prefKey )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraEditMenu( AudacityProject & )
|
||||
@ -1154,14 +1154,16 @@ MenuTable::BaseItemPtr ExtraEditMenu( AudacityProject & )
|
||||
using Options = CommandManager::Options;
|
||||
static const auto flags =
|
||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag;
|
||||
return Menu( XO("&Edit"),
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Edit"),
|
||||
Command( wxT("DeleteKey"), XXO("&Delete Key"), FN(OnDelete),
|
||||
(flags | NoAutoSelect),
|
||||
wxT("Backspace") ),
|
||||
Command( wxT("DeleteKey2"), XXO("Delete Key&2"), FN(OnDelete),
|
||||
(flags | NoAutoSelect),
|
||||
wxT("Delete") )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
auto canSelectAll = [](const AudacityProject &project){
|
||||
|
@ -134,8 +134,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& ExtraActions::Handler :: X)
|
||||
#define FN(X) (& ExtraActions::Handler :: X)
|
||||
|
||||
// Imported menu item definitions
|
||||
|
||||
@ -193,7 +192,9 @@ MenuTable::BaseItemPtr ExtraMenu( AudacityProject & )
|
||||
MenuTable::BaseItemPtr ExtraMixerMenu( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
return Menu( XO("Mi&xer"),
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("Mi&xer"),
|
||||
Command( wxT("OutputGain"), XXO("Ad&just Playback Volume..."),
|
||||
FN(OnOutputGain), AlwaysEnabledFlag ),
|
||||
Command( wxT("OutputGainInc"), XXO("&Increase Playback Volume"),
|
||||
@ -206,13 +207,15 @@ MenuTable::BaseItemPtr ExtraMixerMenu( AudacityProject & )
|
||||
FN(OnInputGainInc), AlwaysEnabledFlag ),
|
||||
Command( wxT("InputGainDec"), XXO("D&ecrease Recording Volume"),
|
||||
FN(OnInputGainDec), AlwaysEnabledFlag )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraDeviceMenu( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
return Menu( XO("De&vice"),
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("De&vice"),
|
||||
Command( wxT("InputDevice"), XXO("Change &Recording Device..."),
|
||||
FN(OnInputDevice),
|
||||
AudioIONotBusyFlag, wxT("Shift+I") ),
|
||||
@ -224,7 +227,7 @@ MenuTable::BaseItemPtr ExtraDeviceMenu( AudacityProject & )
|
||||
Command( wxT("InputChannels"), XXO("Change Recording Cha&nnels..."),
|
||||
FN(OnInputChannels),
|
||||
AudioIONotBusyFlag, wxT("Shift+N") )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraMiscItems( AudacityProject &project )
|
||||
@ -241,7 +244,9 @@ MenuTable::BaseItemPtr ExtraMiscItems( AudacityProject &project )
|
||||
;
|
||||
|
||||
// Not a menu.
|
||||
return Items(
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Items(
|
||||
// Accel key is not bindable.
|
||||
Command( wxT("FullScreenOnOff"), XXO("&Full Screen (on/off)"),
|
||||
FN(OnFullScreen),
|
||||
@ -250,7 +255,7 @@ MenuTable::BaseItemPtr ExtraMiscItems( AudacityProject &project )
|
||||
GetProjectFrame( project ).wxTopLevelWindow::IsFullScreen() ) ),
|
||||
|
||||
ExtraWindowItems
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -549,15 +549,15 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& FileActions::Handler :: X)
|
||||
#define FN(X) (& FileActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr FileMenu( AudacityProject& )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
using Options = CommandManager::Options;
|
||||
|
||||
return Menu( XO("&File"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&File"),
|
||||
/*i18n-hint: "New" is an action (verb) to create a NEW project*/
|
||||
Command( wxT("New"), XXO("&New"), FN(OnNew),
|
||||
AudioIONotBusyFlag, wxT("Ctrl+N") ),
|
||||
@ -698,7 +698,7 @@ MenuTable::BaseItemPtr FileMenu( AudacityProject& )
|
||||
/* i18n-hint: (verb) It's item on a menu. */
|
||||
Command( wxT("Exit"), XXO("E&xit"), FN(OnExit),
|
||||
AlwaysEnabledFlag, wxT("Ctrl+Q") )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -418,8 +418,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& HelpActions::Handler :: X)
|
||||
#define FN(X) (& HelpActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr HelpMenu( AudacityProject & )
|
||||
{
|
||||
@ -429,7 +428,8 @@ MenuTable::BaseItemPtr HelpMenu( AudacityProject & )
|
||||
|
||||
using namespace MenuTable;
|
||||
|
||||
return Menu( XO("&Help"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Help"),
|
||||
// QuickFix menu item not in Audacity 2.3.1 whilst we discuss further.
|
||||
#ifdef EXPERIMENTAL_DA
|
||||
// DA: Has QuickFix menu item.
|
||||
@ -480,7 +480,7 @@ MenuTable::BaseItemPtr HelpMenu( AudacityProject & )
|
||||
#endif
|
||||
Command( wxT("About"), XXO("&About Audacity..."), FN(OnAbout),
|
||||
AlwaysEnabledFlag )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -559,8 +559,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& LabelEditActions::Handler :: X)
|
||||
#define FN(X) (& LabelEditActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr LabelEditMenus( AudacityProject & )
|
||||
{
|
||||
@ -575,7 +574,9 @@ MenuTable::BaseItemPtr LabelEditMenus( AudacityProject & )
|
||||
|
||||
// Returns TWO menus.
|
||||
|
||||
return Items(
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Items(
|
||||
|
||||
Menu( XO("&Labels"),
|
||||
Command( wxT("EditLabels"), XXO("&Edit Labels..."), FN(OnEditLabels),
|
||||
@ -653,7 +654,7 @@ MenuTable::BaseItemPtr LabelEditMenus( AudacityProject & )
|
||||
wxT("Alt+Shift+J") )
|
||||
) // second menu
|
||||
|
||||
); // two menus
|
||||
) ); // two menus
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -553,22 +553,23 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& NavigationActions::Handler :: X)
|
||||
#define FN(X) (& NavigationActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr ExtraGlobalCommands( AudacityProject & )
|
||||
{
|
||||
// Ceci n'est pas un menu
|
||||
using namespace MenuTable;
|
||||
using Options = CommandManager::Options;
|
||||
return Items(
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Items(
|
||||
Command( wxT("PrevWindow"), XXO("Move Backward Through Active Windows"),
|
||||
FN(OnPrevWindow), AlwaysEnabledFlag,
|
||||
Options{ wxT("Alt+Shift+F6") }.IsGlobal() ),
|
||||
Command( wxT("NextWindow"), XXO("Move Forward Through Active Windows"),
|
||||
FN(OnNextWindow), AlwaysEnabledFlag,
|
||||
Options{ wxT("Alt+F6") }.IsGlobal() )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraFocusMenu( AudacityProject & )
|
||||
@ -576,7 +577,8 @@ MenuTable::BaseItemPtr ExtraFocusMenu( AudacityProject & )
|
||||
using namespace MenuTable;
|
||||
static const auto FocusedTracksFlags = TracksExistFlag | TrackPanelHasFocus;
|
||||
|
||||
return Menu( XO("F&ocus"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("F&ocus"),
|
||||
Command( wxT("PrevFrame"),
|
||||
XXO("Move &Backward from Toolbars to Tracks"), FN(OnPrevFrame),
|
||||
AlwaysEnabledFlag, wxT("Ctrl+Shift+F6") ),
|
||||
@ -599,7 +601,7 @@ MenuTable::BaseItemPtr ExtraFocusMenu( AudacityProject & )
|
||||
FocusedTracksFlags, wxT("Return") ),
|
||||
Command( wxT("ToggleAlt"), XXO("Toggle Focuse&d Track"), FN(OnToggle),
|
||||
FocusedTracksFlags, wxT("NUMPAD_ENTER") )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -585,8 +585,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions? ...
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& PluginActions::Handler :: X)
|
||||
#define FN(X) (& PluginActions::Handler :: X)
|
||||
|
||||
// ... buf first some more helper definitions, which use FN
|
||||
namespace {
|
||||
@ -632,6 +631,8 @@ void AddEffectMenuItemGroup(
|
||||
}
|
||||
|
||||
using namespace MenuTable;
|
||||
// This finder scope may be redundant, but harmless
|
||||
auto scope = FinderScope( findCommandHandler );
|
||||
auto pTable = &table;
|
||||
BaseItemPtrs temp1;
|
||||
|
||||
@ -721,6 +722,8 @@ MenuTable::BaseItemPtrs PopulateMacrosMenu( CommandFlag flags )
|
||||
auto names = MacroCommands::GetNames(); // these names come from filenames
|
||||
int i;
|
||||
|
||||
// This finder scope may be redundant, but harmless
|
||||
auto scope = MenuTable::FinderScope( findCommandHandler );
|
||||
for (i = 0; i < (int)names.size(); i++) {
|
||||
auto MacroID = ApplyMacroDialog::MacroIdOfName( names[i] );
|
||||
result.push_back( MenuTable::Command( MacroID,
|
||||
@ -744,7 +747,8 @@ MenuTable::BaseItemPtr GenerateMenu( AudacityProject & )
|
||||
// All of this is a bit hacky until we can get more things connected into
|
||||
// the plugin manager...sorry! :-(
|
||||
|
||||
return Menu( XO("&Generate"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Generate"),
|
||||
#ifdef EXPERIMENTAL_EFFECT_MANAGEMENT
|
||||
Command( wxT("ManageGenerators"), XXO("Add / Remove Plug-ins..."),
|
||||
FN(OnManageGenerators), AudioIONotBusyFlag ),
|
||||
@ -757,7 +761,7 @@ MenuTable::BaseItemPtr GenerateMenu( AudacityProject & )
|
||||
EffectTypeGenerate,
|
||||
AudioIONotBusyFlag,
|
||||
AudioIONotBusyFlag) )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
const ReservedCommandFlag
|
||||
@ -781,7 +785,8 @@ MenuTable::BaseItemPtr EffectMenu( AudacityProject &project )
|
||||
else
|
||||
buildMenuLabel = XO("Repeat Last Effect");
|
||||
|
||||
return Menu( XO("Effe&ct"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("Effe&ct"),
|
||||
#ifdef EXPERIMENTAL_EFFECT_MANAGEMENT
|
||||
Command( wxT("ManageEffects"), XXO("Add / Remove Plug-ins..."),
|
||||
FN(OnManageEffects), AudioIONotBusyFlag ),
|
||||
@ -801,7 +806,7 @@ MenuTable::BaseItemPtr EffectMenu( AudacityProject &project )
|
||||
EffectTypeProcess,
|
||||
AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag,
|
||||
IsRealtimeNotActiveFlag ) )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr AnalyzeMenu( AudacityProject & )
|
||||
@ -810,7 +815,8 @@ MenuTable::BaseItemPtr AnalyzeMenu( AudacityProject & )
|
||||
// All of this is a bit hacky until we can get more things connected into
|
||||
// the plugin manager...sorry! :-(
|
||||
|
||||
return Menu( XO("&Analyze"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Analyze"),
|
||||
#ifdef EXPERIMENTAL_EFFECT_MANAGEMENT
|
||||
Command( wxT("ManageAnalyzers"), XXO("Add / Remove Plug-ins..."),
|
||||
FN(OnManageAnalyzers), AudioIONotBusyFlag ),
|
||||
@ -829,7 +835,7 @@ MenuTable::BaseItemPtr AnalyzeMenu( AudacityProject & )
|
||||
EffectTypeAnalyze,
|
||||
AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag,
|
||||
IsRealtimeNotActiveFlag ) )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ToolsMenu( AudacityProject & )
|
||||
@ -838,7 +844,8 @@ MenuTable::BaseItemPtr ToolsMenu( AudacityProject & )
|
||||
using Options = CommandManager::Options;
|
||||
auto gAudioIO = AudioIO::Get();
|
||||
|
||||
return Menu( XO("T&ools"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("T&ools"),
|
||||
|
||||
#ifdef EXPERIMENTAL_EFFECT_MANAGEMENT
|
||||
Command( wxT("ManageTools"), XXO("Add / Remove Plug-ins..."),
|
||||
@ -899,7 +906,7 @@ MenuTable::BaseItemPtr ToolsMenu( AudacityProject & )
|
||||
AudioIONotBusyFlag,
|
||||
Options{}.CheckState( gAudioIO->mDetectUpstreamDropouts ) )
|
||||
#endif
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraScriptablesIMenu( AudacityProject & )
|
||||
@ -907,9 +914,11 @@ MenuTable::BaseItemPtr ExtraScriptablesIMenu( AudacityProject & )
|
||||
using namespace MenuTable;
|
||||
|
||||
// These are the more useful to VI user Scriptables.
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
// i18n-hint: Scriptables are commands normally used from Python, Perl etc.
|
||||
return Menu( XO("Script&ables I"),
|
||||
// Note that the PLUGIN_SYMBOL must have a space between words,
|
||||
Menu( XO("Script&ables I"),
|
||||
// Note that the PLUGIN_SYMBOL must have a space between words,
|
||||
// whereas the short-form used here must not.
|
||||
// (So if you did write "CompareAudio" for the PLUGIN_SYMBOL name, then
|
||||
// you would have to use "Compareaudio" here.)
|
||||
@ -945,7 +954,7 @@ MenuTable::BaseItemPtr ExtraScriptablesIMenu( AudacityProject & )
|
||||
AudioIONotBusyFlag ),
|
||||
Command( wxT("SetProject"), XXO("Set Project..."), FN(OnAudacityCommand),
|
||||
AudioIONotBusyFlag )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraScriptablesIIMenu( AudacityProject & )
|
||||
@ -953,7 +962,8 @@ MenuTable::BaseItemPtr ExtraScriptablesIIMenu( AudacityProject & )
|
||||
using namespace MenuTable;
|
||||
|
||||
// Less useful to VI users.
|
||||
return Menu( XO("Scripta&bles II"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("Scripta&bles II"),
|
||||
Command( wxT("Select"), XXO("Select..."), FN(OnAudacityCommand),
|
||||
AudioIONotBusyFlag ),
|
||||
Command( wxT("SetTrack"), XXO("Set Track..."), FN(OnAudacityCommand),
|
||||
@ -983,7 +993,7 @@ MenuTable::BaseItemPtr ExtraScriptablesIIMenu( AudacityProject & )
|
||||
Command( wxT("Screenshot"), XXO("Screenshot (short format)..."),
|
||||
FN(OnAudacityCommand),
|
||||
AudioIONotBusyFlag )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -1026,8 +1026,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& SelectActions::Handler :: X)
|
||||
#define FN(X) (& SelectActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& );
|
||||
|
||||
@ -1035,9 +1034,10 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
using Options = CommandManager::Options;
|
||||
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
/* i18n-hint: (verb) It's an item on a menu. */
|
||||
return Menu( XO("&Select"),
|
||||
Menu( XO("&Select"),
|
||||
Command( wxT("SelectAll"), XXO("&All"), FN(OnSelectAll),
|
||||
TracksExistFlag,
|
||||
Options{ wxT("Ctrl+A"), XO("Select All") } ),
|
||||
@ -1135,13 +1135,15 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& )
|
||||
Command( wxT("ZeroCross"), XXO("At &Zero Crossings"),
|
||||
FN(OnZeroCrossing), TracksSelectedFlag,
|
||||
Options{ wxT("Z"), XO("Select Zero Crossing") } )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraSelectionMenu( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
return Menu( XO("&Selection"),
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Selection"),
|
||||
Command( wxT("SnapToOff"), XXO("Snap-To &Off"), FN(OnSnapToOff),
|
||||
AlwaysEnabledFlag ),
|
||||
Command( wxT("SnapToNearest"), XXO("Snap-To &Nearest"),
|
||||
@ -1174,7 +1176,7 @@ MenuTable::BaseItemPtr ExtraSelectionMenu( AudacityProject & )
|
||||
FN(OnSelContractRight),
|
||||
TracksExistFlag | TrackPanelHasFocus,
|
||||
wxT("Ctrl+Shift+Left\twantKeyup") )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ClipCursorItems( AudacityProject & );
|
||||
@ -1190,7 +1192,8 @@ MenuTable::BaseItemPtr CursorMenu( AudacityProject & )
|
||||
// GA: 'Skip to' moves the viewpoint to center of the track and preserves the
|
||||
// selection. 'Cursor to' does neither. 'Center at' might describe it better
|
||||
// than 'Skip'.
|
||||
return Menu( XO("&Cursor to"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Cursor to"),
|
||||
Command( wxT("CursSelStart"), XXO("Selection Star&t"),
|
||||
FN(OnCursorSelStart),
|
||||
TimeSelectedFlag,
|
||||
@ -1218,7 +1221,7 @@ MenuTable::BaseItemPtr CursorMenu( AudacityProject & )
|
||||
Command( wxT("CursProjectEnd"), XXO("Project E&nd"), FN(OnSkipEnd),
|
||||
CanStopFlags,
|
||||
Options{ wxT("End"), XO("Cursor to Project End") } )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraClipCursorItems( AudacityProject & );
|
||||
@ -1227,7 +1230,8 @@ MenuTable::BaseItemPtr ExtraCursorMenu( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
|
||||
return Menu( XO("&Cursor"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Cursor"),
|
||||
Command( wxT("CursorLeft"), XXO("Cursor &Left"), FN(OnCursorLeft),
|
||||
TracksExistFlag | TrackPanelHasFocus,
|
||||
wxT("Left\twantKeyup\tallowDup") ),
|
||||
@ -1248,13 +1252,15 @@ MenuTable::BaseItemPtr ExtraCursorMenu( AudacityProject & )
|
||||
TracksExistFlag | TrackPanelHasFocus, wxT("Shift+.") ),
|
||||
|
||||
ExtraClipCursorItems
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraSeekMenu( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
return Menu( XO("See&k"),
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("See&k"),
|
||||
Command( wxT("SeekLeftShort"), XXO("Short Seek &Left During Playback"),
|
||||
FN(OnSeekLeftShort), AudioIOBusyFlag, wxT("Left\tallowDup") ),
|
||||
Command( wxT("SeekRightShort"),
|
||||
@ -1264,7 +1270,7 @@ MenuTable::BaseItemPtr ExtraSeekMenu( AudacityProject & )
|
||||
FN(OnSeekLeftLong), AudioIOBusyFlag, wxT("Shift+Left\tallowDup") ),
|
||||
Command( wxT("SeekRightLong"), XXO("Long Seek Rig&ht During Playback"),
|
||||
FN(OnSeekRightLong), AudioIOBusyFlag, wxT("Shift+Right\tallowDup") )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -251,8 +251,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& ToolbarActions::Handler :: X)
|
||||
#define FN(X) (& ToolbarActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& )
|
||||
{
|
||||
@ -261,7 +260,8 @@ MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& )
|
||||
|
||||
static const auto checkOff = Options{}.CheckState( false );
|
||||
|
||||
return Menu( XO("&Toolbars"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Toolbars"),
|
||||
/* i18n-hint: (verb)*/
|
||||
Command( wxT("ResetToolbars"), XXO("Reset Toolb&ars"),
|
||||
FN(OnResetToolBars), AlwaysEnabledFlag ),
|
||||
@ -330,13 +330,15 @@ MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& )
|
||||
XXO("Spe&ctral Selection Toolbar"),
|
||||
FN(OnShowSpectralSelectionToolBar), AlwaysEnabledFlag, checkOff )
|
||||
#endif
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraToolsMenu( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
return Menu( XO("T&ools"),
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("T&ools"),
|
||||
Command( wxT("SelectTool"), XXO("&Selection Tool"), FN(OnSelectTool),
|
||||
AlwaysEnabledFlag, wxT("F1") ),
|
||||
Command( wxT("EnvelopeTool"), XXO("&Envelope Tool"),
|
||||
@ -353,7 +355,7 @@ MenuTable::BaseItemPtr ExtraToolsMenu( AudacityProject & )
|
||||
AlwaysEnabledFlag, wxT("A") ),
|
||||
Command( wxT("NextTool"), XXO("&Next Tool"), FN(OnNextTool),
|
||||
AlwaysEnabledFlag, wxT("D") )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -1274,16 +1274,16 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& TrackActions::Handler :: X)
|
||||
#define FN(X) (& TrackActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr TracksMenu( AudacityProject & )
|
||||
{
|
||||
// Tracks Menu (formerly Project Menu)
|
||||
using namespace MenuTable;
|
||||
using Options = CommandManager::Options;
|
||||
|
||||
return Menu( XO("&Tracks"),
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Tracks"),
|
||||
Menu( XO("Add &New"),
|
||||
Command( wxT("NewMonoTrack"), XXO("&Mono Track"), FN(OnNewWaveTrack),
|
||||
AudioIONotBusyFlag, wxT("Ctrl+Shift+N") ),
|
||||
@ -1300,6 +1300,7 @@ MenuTable::BaseItemPtr TracksMenu( AudacityProject & )
|
||||
Separator(),
|
||||
|
||||
Menu( XO("Mi&x"),
|
||||
// Delayed evaluation
|
||||
// Stereo to Mono is an oddball command that is also subject to control
|
||||
// by the plug-in manager, as if an effect. Decide whether to show or
|
||||
// hide it.
|
||||
@ -1311,7 +1312,7 @@ MenuTable::BaseItemPtr TracksMenu( AudacityProject & )
|
||||
return Command( wxT("Stereo to Mono"),
|
||||
XXO("Mix Stereo Down to &Mono"), FN(OnStereoToMono),
|
||||
AudioIONotBusyFlag | StereoRequiredFlag |
|
||||
WaveTracksSelectedFlag );
|
||||
WaveTracksSelectedFlag, Options{}, findCommandHandler );
|
||||
else
|
||||
return {};
|
||||
},
|
||||
@ -1427,14 +1428,15 @@ MenuTable::BaseItemPtr TracksMenu( AudacityProject & )
|
||||
Options{}.CheckState( gPrefs->Read(wxT("/GUI/SyncLockTracks"), 0L) ) )
|
||||
|
||||
#endif
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraTrackMenu( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
|
||||
return Menu( XO("&Track"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Track"),
|
||||
Command( wxT("TrackPan"), XXO("Change P&an on Focused Track..."),
|
||||
FN(OnTrackPan),
|
||||
TrackPanelHasFocus | TracksExistFlag, wxT("Shift+P") ),
|
||||
@ -1478,7 +1480,7 @@ MenuTable::BaseItemPtr ExtraTrackMenu( AudacityProject & )
|
||||
Command( wxT("TrackMoveBottom"), XXO("Move Focused Track to &Bottom"),
|
||||
FN(OnTrackMoveBottom),
|
||||
AudioIONotBusyFlag | TrackPanelHasFocus | TracksExistFlag )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -966,8 +966,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& TransportActions::Handler :: X)
|
||||
#define FN(X) (& TransportActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr CursorMenu( AudacityProject& );
|
||||
|
||||
@ -981,9 +980,10 @@ MenuTable::BaseItemPtr TransportMenu( AudacityProject &project )
|
||||
|
||||
static const auto CanStopFlags = AudioIONotBusyFlag | CanStopAudioStreamFlag;
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
/* i18n-hint: 'Transport' is the name given to the set of controls that
|
||||
play, record, pause etc. */
|
||||
return Menu( XO("Tra&nsport"),
|
||||
Menu( XO("Tra&nsport"),
|
||||
Menu( XO("Pl&aying"),
|
||||
/* i18n-hint: (verb) Start or Stop audio playback*/
|
||||
Command( wxT("PlayStop"), XXO("Pl&ay/Stop"), FN(OnPlayStop),
|
||||
@ -1085,13 +1085,15 @@ MenuTable::BaseItemPtr TransportMenu( AudacityProject &project )
|
||||
AudioIONotBusyFlag | CanStopAudioStreamFlag, checkOff )
|
||||
#endif
|
||||
)
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraTransportMenu( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
return Menu( XO("T&ransport"),
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("T&ransport"),
|
||||
// PlayStop is already in the menus.
|
||||
/* i18n-hint: (verb) Start playing audio*/
|
||||
Command( wxT("Play"), XXO("Pl&ay"), FN(OnPlayStop),
|
||||
@ -1133,13 +1135,15 @@ MenuTable::BaseItemPtr ExtraTransportMenu( AudacityProject & )
|
||||
Command(wxT("KeyboardScrubForwards"), XXO("Scrub For&wards"),
|
||||
FN(OnKeyboardScrubForwards),
|
||||
CaptureNotBusyFlag | CanStopAudioStreamFlag, wxT("I\twantKeyup"))
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraPlayAtSpeedMenu( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
return Menu( XO("&Play-at-Speed"),
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Play-at-Speed"),
|
||||
/* i18n-hint: 'Normal Play-at-Speed' doesn't loop or cut preview. */
|
||||
Command( wxT("PlayAtSpeed"), XXO("Normal Pl&ay-at-Speed"),
|
||||
FN(OnPlayAtSpeed), CaptureNotBusyFlag ),
|
||||
@ -1163,7 +1167,7 @@ MenuTable::BaseItemPtr ExtraPlayAtSpeedMenu( AudacityProject & )
|
||||
Command( wxT("MoveToNextLabel"), XXO("Move to &Next Label"),
|
||||
FN(OnMoveToNextLabel),
|
||||
CaptureNotBusyFlag | TrackPanelHasFocus, wxT("Alt+Right") )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -430,8 +430,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& ViewActions::Handler :: X)
|
||||
#define FN(X) (& ViewActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& );
|
||||
|
||||
@ -442,7 +441,8 @@ MenuTable::BaseItemPtr ViewMenu( AudacityProject& )
|
||||
|
||||
static const auto checkOff = Options{}.CheckState( false );
|
||||
|
||||
return Menu( XO("&View"),
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&View"),
|
||||
Menu( XO("&Zoom"),
|
||||
Command( wxT("ZoomIn"), XXO("Zoom &In"), FN(OnZoomIn),
|
||||
ZoomInAvailableFlag, wxT("Ctrl+1") ),
|
||||
@ -547,7 +547,7 @@ MenuTable::BaseItemPtr ViewMenu( AudacityProject& )
|
||||
Command( wxT("ShowEffectsRack"), XXO("Show Effects Rack"),
|
||||
FN(OnShowEffectsRack), AlwaysEnabledFlag, checkOff )
|
||||
#endif
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -116,8 +116,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
|
||||
|
||||
// Menu definitions
|
||||
|
||||
#define FN(X) findCommandHandler, \
|
||||
static_cast<CommandFunctorPointer>(& WindowActions::Handler :: X)
|
||||
#define FN(X) (& WindowActions::Handler :: X)
|
||||
|
||||
MenuTable::BaseItemPtr WindowMenu( AudacityProject & )
|
||||
{
|
||||
@ -125,7 +124,9 @@ MenuTable::BaseItemPtr WindowMenu( AudacityProject & )
|
||||
// poor imitation of the Mac Windows Menu
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
using namespace MenuTable;
|
||||
return Menu( XO("&Window"),
|
||||
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Menu( XO("&Window"),
|
||||
/* 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),
|
||||
@ -141,20 +142,21 @@ MenuTable::BaseItemPtr WindowMenu( AudacityProject & )
|
||||
* windows un-hidden */
|
||||
Command( wxT("MacBringAllToFront"), XXO("&Bring All to Front"),
|
||||
FN(OnMacBringAllToFront), AlwaysEnabledFlag )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
MenuTable::BaseItemPtr ExtraWindowItems( AudacityProject & )
|
||||
{
|
||||
using namespace MenuTable;
|
||||
|
||||
return Items(
|
||||
return FinderScope( findCommandHandler ).Eval(
|
||||
Items(
|
||||
/* i18n-hint: Shrink all project windows to icons on the Macintosh
|
||||
tooldock */
|
||||
Command( wxT("MacMinimizeAll"), XXO("Minimize All Projects"),
|
||||
FN(OnMacMinimizeAll),
|
||||
AlwaysEnabledFlag, wxT("Ctrl+Alt+M") )
|
||||
);
|
||||
) );
|
||||
}
|
||||
|
||||
#undef FN
|
||||
|
@ -1121,18 +1121,18 @@ bool Scrubber::CanScrub() const
|
||||
HasWaveDataPred( *mProject );
|
||||
}
|
||||
|
||||
// To supply the "finder" argument
|
||||
static CommandHandlerObject &findme(AudacityProject &project)
|
||||
{ return Scrubber::Get( project ); }
|
||||
|
||||
MenuTable::BaseItemPtr Scrubber::Menu()
|
||||
{
|
||||
using Options = CommandManager::Options;
|
||||
|
||||
auto scope = MenuTable::FinderScope(
|
||||
[](AudacityProject &project) -> CommandHandlerObject&
|
||||
{ return Scrubber::Get( project ); } );
|
||||
|
||||
MenuTable::BaseItemPtrs ptrs;
|
||||
for (const auto &item : menuItems) {
|
||||
ptrs.push_back( MenuTable::Command( item.name, item.label,
|
||||
findme, static_cast<CommandFunctorPointer>(item.memFn),
|
||||
item.memFn,
|
||||
item.flags,
|
||||
item.StatusTest
|
||||
? // a checkmark item
|
||||
|
Loading…
x
Reference in New Issue
Block a user