mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Pair CommandHandlerFinder with functor everywhere, but not used yet
This commit is contained in:
parent
d263eaa97b
commit
6dead232f2
@ -285,6 +285,11 @@ static int SortEffectsByType(const PluginDescriptor **a, const PluginDescriptor
|
|||||||
/// changes in configured preferences - for example changes in key-bindings
|
/// changes in configured preferences - for example changes in key-bindings
|
||||||
/// affect the short-cut key legend that appears beside each command,
|
/// affect the short-cut key legend that appears beside each command,
|
||||||
|
|
||||||
|
// To supply the "finder" argument in AddItem calls
|
||||||
|
static CommandHandlerObject &ident(AudacityProject &project) { return project; }
|
||||||
|
|
||||||
|
#define FN(X) ident, FNT(AudacityProject, this, & AudacityProject :: X)
|
||||||
|
|
||||||
void AudacityProject::CreateMenusAndCommands()
|
void AudacityProject::CreateMenusAndCommands()
|
||||||
{
|
{
|
||||||
CommandManager *c = &mCommandManager;
|
CommandManager *c = &mCommandManager;
|
||||||
|
@ -14,6 +14,23 @@
|
|||||||
#include "../MemoryX.h"
|
#include "../MemoryX.h"
|
||||||
|
|
||||||
class AudacityProject;
|
class AudacityProject;
|
||||||
|
class wxEvtHandler;
|
||||||
|
|
||||||
|
// Base class for objects, to whose member functions, the CommandManager will
|
||||||
|
// dispatch.
|
||||||
|
//
|
||||||
|
// It, or a subclass of it, must be the first base class of the object, and the
|
||||||
|
// first base class of that base class, etc., for the same reason that
|
||||||
|
// wxEvtHandler must be first (that is, the downcast from a pointer to the base
|
||||||
|
// to a pointer to the object, must be a vacuous operation).
|
||||||
|
//
|
||||||
|
// In fact, then, we just make it an alias of wxEvtHandler, in case you really
|
||||||
|
// need to inherit from wxEvtHandler for other reasons, and otherwise you
|
||||||
|
// couldn't satisfy the requirement for both base classes at once.
|
||||||
|
using CommandHandlerObject = wxEvtHandler;
|
||||||
|
|
||||||
|
using CommandHandlerFinder = CommandHandlerObject &(*)(AudacityProject&);
|
||||||
|
|
||||||
class wxEvent;
|
class wxEvent;
|
||||||
|
|
||||||
using CommandParameter = wxString;
|
using CommandParameter = wxString;
|
||||||
@ -145,6 +162,4 @@ inline CommandFunctorPointer MakeFunctor(OBJ *This,
|
|||||||
// Now define the macro abbreviations that call the factory
|
// Now define the macro abbreviations that call the factory
|
||||||
#define FNT(OBJ, This, X) (MakeFunctor<OBJ>(This, X ))
|
#define FNT(OBJ, This, X) (MakeFunctor<OBJ>(This, X ))
|
||||||
|
|
||||||
#define FN(X) FNT(AudacityProject, this, & AudacityProject :: X)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -694,7 +694,8 @@ void CommandManager::ClearCurrentMenu()
|
|||||||
/// given functor will be called
|
/// given functor will be called
|
||||||
void CommandManager::InsertItem(const wxString & name,
|
void CommandManager::InsertItem(const wxString & name,
|
||||||
const wxString & label_in,
|
const wxString & label_in,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
const wxString & after,
|
const wxString & after,
|
||||||
int checkmark)
|
int checkmark)
|
||||||
{
|
{
|
||||||
@ -744,7 +745,7 @@ void CommandManager::InsertItem(const wxString & name,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CommandListEntry *entry = NewIdentifier(name, label_in, menu, callback, false, 0, 0);
|
CommandListEntry *entry = NewIdentifier(name, label_in, menu, finder, callback, false, 0, 0);
|
||||||
int ID = entry->id;
|
int ID = entry->id;
|
||||||
wxString label = GetLabel(entry);
|
wxString label = GetLabel(entry);
|
||||||
|
|
||||||
@ -763,42 +764,49 @@ void CommandManager::InsertItem(const wxString & name,
|
|||||||
|
|
||||||
void CommandManager::AddCheck(const wxChar *name,
|
void CommandManager::AddCheck(const wxChar *name,
|
||||||
const wxChar *label,
|
const wxChar *label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
int checkmark)
|
int checkmark)
|
||||||
{
|
{
|
||||||
AddItem(name, label, callback, wxT(""), NoFlagsSpecifed, NoFlagsSpecifed, checkmark);
|
AddItem(name, label, finder, callback, wxT(""),
|
||||||
|
NoFlagsSpecifed, NoFlagsSpecifed, checkmark);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandManager::AddCheck(const wxChar *name,
|
void CommandManager::AddCheck(const wxChar *name,
|
||||||
const wxChar *label,
|
const wxChar *label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
int checkmark,
|
int checkmark,
|
||||||
CommandFlag flags,
|
CommandFlag flags,
|
||||||
CommandMask mask)
|
CommandMask mask)
|
||||||
{
|
{
|
||||||
AddItem(name, label, callback, wxT(""), flags, mask, checkmark);
|
AddItem(name, label, finder, callback, wxT(""), flags, mask, checkmark);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandManager::AddItem(const wxChar *name,
|
void CommandManager::AddItem(const wxChar *name,
|
||||||
const wxChar *label,
|
const wxChar *label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
CommandFlag flags,
|
CommandFlag flags,
|
||||||
CommandMask mask,
|
CommandMask mask,
|
||||||
const CommandParameter ¶meter)
|
const CommandParameter ¶meter)
|
||||||
{
|
{
|
||||||
AddItem(name, label, callback, wxT(""), flags, mask, -1, parameter);
|
AddItem(name, label, finder, callback, wxT(""), flags, mask, -1, parameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandManager::AddItem(const wxChar *name,
|
void CommandManager::AddItem(const wxChar *name,
|
||||||
const wxChar *label_in,
|
const wxChar *label_in,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
const wxChar *accel,
|
const wxChar *accel,
|
||||||
CommandFlag flags,
|
CommandFlag flags,
|
||||||
CommandMask mask,
|
CommandMask mask,
|
||||||
int checkmark,
|
int checkmark,
|
||||||
const CommandParameter ¶meter)
|
const CommandParameter ¶meter)
|
||||||
{
|
{
|
||||||
CommandListEntry *entry = NewIdentifier(name, label_in, accel, CurrentMenu(), callback, false, 0, 0, parameter);
|
CommandListEntry *entry =
|
||||||
|
NewIdentifier(name, label_in, accel, CurrentMenu(), finder, callback,
|
||||||
|
false, 0, 0, parameter);
|
||||||
int ID = entry->id;
|
int ID = entry->id;
|
||||||
wxString label = GetLabelWithDisabledAccel(entry);
|
wxString label = GetLabelWithDisabledAccel(entry);
|
||||||
|
|
||||||
@ -826,12 +834,14 @@ void CommandManager::AddItem(const wxChar *name,
|
|||||||
/// all of the items at once.
|
/// all of the items at once.
|
||||||
void CommandManager::AddItemList(const wxString & name,
|
void CommandManager::AddItemList(const wxString & name,
|
||||||
const wxArrayString & labels,
|
const wxArrayString & labels,
|
||||||
const CommandFunctorPointer &callback)
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback)
|
||||||
{
|
{
|
||||||
for (size_t i = 0, cnt = labels.GetCount(); i < cnt; i++) {
|
for (size_t i = 0, cnt = labels.GetCount(); i < cnt; i++) {
|
||||||
CommandListEntry *entry = NewIdentifier(name,
|
CommandListEntry *entry = NewIdentifier(name,
|
||||||
labels[i],
|
labels[i],
|
||||||
CurrentMenu(),
|
CurrentMenu(),
|
||||||
|
finder,
|
||||||
callback,
|
callback,
|
||||||
true,
|
true,
|
||||||
i,
|
i,
|
||||||
@ -846,21 +856,23 @@ void CommandManager::AddItemList(const wxString & name,
|
|||||||
/// given function pointer will be called (via the CommandManagerListener)
|
/// given function pointer will be called (via the CommandManagerListener)
|
||||||
void CommandManager::AddCommand(const wxChar *name,
|
void CommandManager::AddCommand(const wxChar *name,
|
||||||
const wxChar *label,
|
const wxChar *label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
CommandFlag flags,
|
CommandFlag flags,
|
||||||
CommandMask mask)
|
CommandMask mask)
|
||||||
{
|
{
|
||||||
AddCommand(name, label, callback, wxT(""), flags, mask);
|
AddCommand(name, label, finder, callback, wxT(""), flags, mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandManager::AddCommand(const wxChar *name,
|
void CommandManager::AddCommand(const wxChar *name,
|
||||||
const wxChar *label_in,
|
const wxChar *label_in,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
const wxChar *accel,
|
const wxChar *accel,
|
||||||
CommandFlag flags,
|
CommandFlag flags,
|
||||||
CommandMask mask)
|
CommandMask mask)
|
||||||
{
|
{
|
||||||
NewIdentifier(name, label_in, accel, NULL, callback, false, 0, 0, {});
|
NewIdentifier(name, label_in, accel, NULL, finder, callback, false, 0, 0, {});
|
||||||
|
|
||||||
if (flags != NoFlagsSpecifed || mask != NoFlagsSpecifed) {
|
if (flags != NoFlagsSpecifed || mask != NoFlagsSpecifed) {
|
||||||
SetCommandFlags(name, flags, mask);
|
SetCommandFlags(name, flags, mask);
|
||||||
@ -869,10 +881,13 @@ void CommandManager::AddCommand(const wxChar *name,
|
|||||||
|
|
||||||
void CommandManager::AddGlobalCommand(const wxChar *name,
|
void CommandManager::AddGlobalCommand(const wxChar *name,
|
||||||
const wxChar *label_in,
|
const wxChar *label_in,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
const wxChar *accel)
|
const wxChar *accel)
|
||||||
{
|
{
|
||||||
CommandListEntry *entry = NewIdentifier(name, label_in, accel, NULL, callback, false, 0, 0, {});
|
CommandListEntry *entry =
|
||||||
|
NewIdentifier(name, label_in, accel, NULL, finder, callback,
|
||||||
|
false, 0, 0, {});
|
||||||
|
|
||||||
entry->enabled = false;
|
entry->enabled = false;
|
||||||
entry->isGlobal = true;
|
entry->isGlobal = true;
|
||||||
@ -906,7 +921,8 @@ int CommandManager::NextIdentifier(int ID)
|
|||||||
CommandListEntry *CommandManager::NewIdentifier(const wxString & name,
|
CommandListEntry *CommandManager::NewIdentifier(const wxString & name,
|
||||||
const wxString & label,
|
const wxString & label,
|
||||||
wxMenu *menu,
|
wxMenu *menu,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
bool multi,
|
bool multi,
|
||||||
int index,
|
int index,
|
||||||
int count)
|
int count)
|
||||||
@ -915,6 +931,7 @@ CommandListEntry *CommandManager::NewIdentifier(const wxString & name,
|
|||||||
label.BeforeFirst(wxT('\t')),
|
label.BeforeFirst(wxT('\t')),
|
||||||
label.AfterFirst(wxT('\t')),
|
label.AfterFirst(wxT('\t')),
|
||||||
menu,
|
menu,
|
||||||
|
finder,
|
||||||
callback,
|
callback,
|
||||||
multi,
|
multi,
|
||||||
index,
|
index,
|
||||||
@ -925,7 +942,8 @@ CommandListEntry *CommandManager::NewIdentifier(const wxString & name,
|
|||||||
const wxString & label,
|
const wxString & label,
|
||||||
const wxString & accel,
|
const wxString & accel,
|
||||||
wxMenu *menu,
|
wxMenu *menu,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
bool multi,
|
bool multi,
|
||||||
int index,
|
int index,
|
||||||
int count,
|
int count,
|
||||||
@ -977,6 +995,7 @@ CommandListEntry *CommandManager::NewIdentifier(const wxString & name,
|
|||||||
entry->labelPrefix = labelPrefix;
|
entry->labelPrefix = labelPrefix;
|
||||||
entry->labelTop = wxMenuItem::GetLabelText(mCurrentMenuName);
|
entry->labelTop = wxMenuItem::GetLabelText(mCurrentMenuName);
|
||||||
entry->menu = menu;
|
entry->menu = menu;
|
||||||
|
entry->finder = finder;
|
||||||
entry->callback = callback;
|
entry->callback = callback;
|
||||||
entry->multi = multi;
|
entry->multi = multi;
|
||||||
entry->index = index;
|
entry->index = index;
|
||||||
|
@ -64,6 +64,7 @@ struct CommandListEntry
|
|||||||
wxString labelPrefix;
|
wxString labelPrefix;
|
||||||
wxString labelTop;
|
wxString labelTop;
|
||||||
wxMenu *menu;
|
wxMenu *menu;
|
||||||
|
CommandHandlerFinder finder;
|
||||||
CommandFunctorPointer callback;
|
CommandFunctorPointer callback;
|
||||||
CommandParameter parameter;
|
CommandParameter parameter;
|
||||||
bool multi;
|
bool multi;
|
||||||
@ -125,36 +126,42 @@ class AUDACITY_DLL_API CommandManager final : public XMLTagHandler
|
|||||||
|
|
||||||
void InsertItem(const wxString & name,
|
void InsertItem(const wxString & name,
|
||||||
const wxString & label,
|
const wxString & label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
const wxString & after,
|
const wxString & after,
|
||||||
int checkmark = -1);
|
int checkmark = -1);
|
||||||
|
|
||||||
void AddItemList(const wxString & name,
|
void AddItemList(const wxString & name,
|
||||||
const wxArrayString & labels,
|
const wxArrayString & labels,
|
||||||
const CommandFunctorPointer &callback);
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback);
|
||||||
|
|
||||||
void AddCheck(const wxChar *name,
|
void AddCheck(const wxChar *name,
|
||||||
const wxChar *label,
|
const wxChar *label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
int checkmark = 0);
|
int checkmark = 0);
|
||||||
|
|
||||||
void AddCheck(const wxChar *name,
|
void AddCheck(const wxChar *name,
|
||||||
const wxChar *label,
|
const wxChar *label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
int checkmark,
|
int checkmark,
|
||||||
CommandFlag flags,
|
CommandFlag flags,
|
||||||
CommandMask mask);
|
CommandMask mask);
|
||||||
|
|
||||||
void AddItem(const wxChar *name,
|
void AddItem(const wxChar *name,
|
||||||
const wxChar *label,
|
const wxChar *label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
CommandFlag flags = NoFlagsSpecifed,
|
CommandFlag flags = NoFlagsSpecifed,
|
||||||
CommandMask mask = NoFlagsSpecifed,
|
CommandMask mask = NoFlagsSpecifed,
|
||||||
const CommandParameter ¶meter = {});
|
const CommandParameter ¶meter = {});
|
||||||
|
|
||||||
void AddItem(const wxChar *name,
|
void AddItem(const wxChar *name,
|
||||||
const wxChar *label_in,
|
const wxChar *label_in,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
const wxChar *accel,
|
const wxChar *accel,
|
||||||
CommandFlag flags = NoFlagsSpecifed,
|
CommandFlag flags = NoFlagsSpecifed,
|
||||||
CommandMask mask = NoFlagsSpecifed,
|
CommandMask mask = NoFlagsSpecifed,
|
||||||
@ -167,20 +174,23 @@ class AUDACITY_DLL_API CommandManager final : public XMLTagHandler
|
|||||||
// keyboard shortcut.
|
// keyboard shortcut.
|
||||||
void AddCommand(const wxChar *name,
|
void AddCommand(const wxChar *name,
|
||||||
const wxChar *label,
|
const wxChar *label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
CommandFlag flags = NoFlagsSpecifed,
|
CommandFlag flags = NoFlagsSpecifed,
|
||||||
CommandMask mask = NoFlagsSpecifed);
|
CommandMask mask = NoFlagsSpecifed);
|
||||||
|
|
||||||
void AddCommand(const wxChar *name,
|
void AddCommand(const wxChar *name,
|
||||||
const wxChar *label,
|
const wxChar *label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
const wxChar *accel,
|
const wxChar *accel,
|
||||||
CommandFlag flags = NoFlagsSpecifed,
|
CommandFlag flags = NoFlagsSpecifed,
|
||||||
CommandMask mask = NoFlagsSpecifed);
|
CommandMask mask = NoFlagsSpecifed);
|
||||||
|
|
||||||
void AddGlobalCommand(const wxChar *name,
|
void AddGlobalCommand(const wxChar *name,
|
||||||
const wxChar *label,
|
const wxChar *label,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
const wxChar *accel);
|
const wxChar *accel);
|
||||||
//
|
//
|
||||||
// Command masks
|
// Command masks
|
||||||
@ -285,7 +295,8 @@ protected:
|
|||||||
CommandListEntry *NewIdentifier(const wxString & name,
|
CommandListEntry *NewIdentifier(const wxString & name,
|
||||||
const wxString & label,
|
const wxString & label,
|
||||||
wxMenu *menu,
|
wxMenu *menu,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
bool multi,
|
bool multi,
|
||||||
int index,
|
int index,
|
||||||
int count);
|
int count);
|
||||||
@ -293,7 +304,8 @@ protected:
|
|||||||
const wxString & label,
|
const wxString & label,
|
||||||
const wxString & accel,
|
const wxString & accel,
|
||||||
wxMenu *menu,
|
wxMenu *menu,
|
||||||
const CommandFunctorPointer &callback,
|
CommandHandlerFinder finder,
|
||||||
|
CommandFunctorPointer callback,
|
||||||
bool multi,
|
bool multi,
|
||||||
int index,
|
int index,
|
||||||
int count,
|
int count,
|
||||||
|
@ -1002,6 +1002,10 @@ bool Scrubber::CanScrub() const
|
|||||||
return cm->GetEnabled(menuItems[ 0 ].name);
|
return cm->GetEnabled(menuItems[ 0 ].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// To supply the "finder" argument
|
||||||
|
static CommandHandlerObject &findme(AudacityProject &project)
|
||||||
|
{ return project.GetScrubber(); }
|
||||||
|
|
||||||
void Scrubber::AddMenuItems()
|
void Scrubber::AddMenuItems()
|
||||||
{
|
{
|
||||||
auto cm = mProject->GetCommandManager();
|
auto cm = mProject->GetCommandManager();
|
||||||
@ -1010,13 +1014,13 @@ void Scrubber::AddMenuItems()
|
|||||||
for (const auto &item : menuItems) {
|
for (const auto &item : menuItems) {
|
||||||
if (item.StatusTest)
|
if (item.StatusTest)
|
||||||
cm->AddCheck(item.name, wxGetTranslation(item.label),
|
cm->AddCheck(item.name, wxGetTranslation(item.label),
|
||||||
FNT(Scrubber, this, item.memFn),
|
findme, FNT(Scrubber, this, item.memFn),
|
||||||
false,
|
false,
|
||||||
item.flags, item.flags);
|
item.flags, item.flags);
|
||||||
else
|
else
|
||||||
// The start item
|
// The start item
|
||||||
cm->AddItem(item.name, wxGetTranslation(item.label),
|
cm->AddItem(item.name, wxGetTranslation(item.label),
|
||||||
FNT(Scrubber, this, item.memFn),
|
findme, FNT(Scrubber, this, item.memFn),
|
||||||
item.flags, item.flags);
|
item.flags, item.flags);
|
||||||
}
|
}
|
||||||
cm->EndSubMenu();
|
cm->EndSubMenu();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user