1
0
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:
Paul Licameli
2018-10-17 12:45:30 -04:00
parent de4132d66c
commit cfe7ddcf55
4 changed files with 106 additions and 92 deletions

View File

@@ -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 &parameter,
CommandMask mask)
const Options &options)
{
auto mask = options.mask;
if (mask == NoFlagsSpecified)
mask = flags;
wxString cookedParameter;
const auto &parameter = 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);

View File

@@ -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 &parameter = CommandParameter{},
CommandMask mask = NoFlagsSpecified);
const Options &options = {});
void AddSeparator();