mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-21 14:02:57 +02:00
struct CommandManager::Options lets us fold AddCheck into AddItem
This commit is contained in:
@@ -796,33 +796,20 @@ void CommandManager::InsertItem(const wxString & name,
|
||||
|
||||
|
||||
|
||||
void CommandManager::AddCheck(const wxChar *name,
|
||||
const wxChar *label,
|
||||
bool hasDialog,
|
||||
CommandHandlerFinder finder,
|
||||
CommandFunctorPointer callback,
|
||||
int checkmark,
|
||||
CommandFlag flags)
|
||||
{
|
||||
AddItem(name, label, hasDialog, finder, callback, flags, wxT(""), checkmark);
|
||||
}
|
||||
|
||||
void CommandManager::AddItem(const wxChar *name,
|
||||
const wxChar *label_in,
|
||||
bool hasDialog,
|
||||
CommandHandlerFinder finder,
|
||||
CommandFunctorPointer callback,
|
||||
CommandFlag flags,
|
||||
const wxChar *accel,
|
||||
int checkmark,
|
||||
bool bIsEffect,
|
||||
const CommandParameter ¶meter,
|
||||
CommandMask mask)
|
||||
const Options &options)
|
||||
{
|
||||
auto mask = options.mask;
|
||||
if (mask == NoFlagsSpecified)
|
||||
mask = flags;
|
||||
|
||||
wxString cookedParameter;
|
||||
const auto ¶meter = options.parameter;
|
||||
if( parameter == "" )
|
||||
cookedParameter = name;
|
||||
else
|
||||
@@ -832,8 +819,8 @@ void CommandManager::AddItem(const wxChar *name,
|
||||
label_in,
|
||||
mLongNameForItem,
|
||||
hasDialog,
|
||||
accel, CurrentMenu(), finder, callback,
|
||||
{}, 0, 0, bIsEffect, cookedParameter);
|
||||
options.accel, CurrentMenu(), finder, callback,
|
||||
{}, 0, 0, options.bIsEffect, cookedParameter);
|
||||
mLongNameForItem = "";
|
||||
int ID = entry->id;
|
||||
wxString label = GetLabelWithDisabledAccel(entry);
|
||||
@@ -843,6 +830,7 @@ void CommandManager::AddItem(const wxChar *name,
|
||||
}
|
||||
|
||||
|
||||
auto checkmark = options.check;
|
||||
if (checkmark >= 0) {
|
||||
CurrentMenu()->AppendCheckItem(ID, label);
|
||||
CurrentMenu()->Check(ID, checkmark != 0);
|
||||
|
@@ -155,6 +155,32 @@ class AUDACITY_DLL_API CommandManager final : public XMLTagHandler
|
||||
int checkmark = -1);
|
||||
*/
|
||||
|
||||
// For specifying unusual arguments in AddItem
|
||||
struct Options
|
||||
{
|
||||
Options() {}
|
||||
// Allow implicit construction from an accelerator string, which is
|
||||
// a very common case
|
||||
Options( const wxChar *accel_ ) : accel{ accel_ } {}
|
||||
|
||||
Options &&Accel (const wxChar *value) &&
|
||||
{ accel = value; return std::move(*this); }
|
||||
Options &&CheckState (bool value) &&
|
||||
{ check = value ? 1 : 0; return std::move(*this); }
|
||||
Options &&IsEffect () &&
|
||||
{ bIsEffect = true; return std::move(*this); }
|
||||
Options &&Parameter (const CommandParameter &value) &&
|
||||
{ parameter = value; return std::move(*this); }
|
||||
Options &&Mask (CommandMask value) &&
|
||||
{ mask = value; return std::move(*this); }
|
||||
|
||||
const wxChar *accel{ wxT("") };
|
||||
int check{ -1 }; // default value means it's not a check item
|
||||
bool bIsEffect{ false };
|
||||
CommandParameter parameter{};
|
||||
CommandMask mask{ NoFlagsSpecified };
|
||||
};
|
||||
|
||||
void AddItemList(const wxString & name,
|
||||
const TranslatedInternalString items[],
|
||||
size_t nItems,
|
||||
@@ -162,25 +188,13 @@ class AUDACITY_DLL_API CommandManager final : public XMLTagHandler
|
||||
CommandFunctorPointer callback,
|
||||
bool bIsEffect = false);
|
||||
|
||||
void AddCheck(const wxChar *name,
|
||||
const wxChar *label,
|
||||
bool hasDialog,
|
||||
CommandHandlerFinder finder,
|
||||
CommandFunctorPointer callback,
|
||||
int checkmark = 0,
|
||||
CommandFlag flags = NoFlagsSpecified);
|
||||
|
||||
void AddItem(const wxChar *name,
|
||||
const wxChar *label_in,
|
||||
bool hasDialog,
|
||||
CommandHandlerFinder finder,
|
||||
CommandFunctorPointer callback,
|
||||
CommandFlag flags = NoFlagsSpecified,
|
||||
const wxChar *accel = wxT(""),
|
||||
int checkmark = -1,
|
||||
bool bIsEffect = false,
|
||||
const CommandParameter ¶meter = CommandParameter{},
|
||||
CommandMask mask = NoFlagsSpecified);
|
||||
const Options &options = {});
|
||||
|
||||
void AddSeparator();
|
||||
|
||||
|
Reference in New Issue
Block a user