Cleaned up SetMenuStrings, factoring out redo and undo label accessors at the same time
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@18369 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -20,13 +20,13 @@ if you want different behaviour.
|
||||
|
||||
\membersection{wxCommandProcessor::wxCommandProcessor}
|
||||
|
||||
\func{}{wxCommandProcessor}{\param{int}{ maxCommands = 100}}
|
||||
\func{}{wxCommandProcessor}{\param{int}{ maxCommands = $-1$}}
|
||||
|
||||
Constructor.
|
||||
|
||||
{\it maxCommands} defaults to a rather arbitrary 100, but can be set from 1 to any integer.
|
||||
If your wxCommand classes store a lot of data, you may wish the limit the number of
|
||||
commands stored to a smaller number.
|
||||
{\it maxCommands} may be set to a positive integer to limit the number of
|
||||
commands stored to it, otherwise (and by default) the list of commands can grow
|
||||
arbitrarily.
|
||||
|
||||
\membersection{wxCommandProcessor::\destruct{wxCommandProcessor}}
|
||||
|
||||
@@ -76,12 +76,24 @@ Returns the edit menu associated with the command processor.
|
||||
|
||||
Returns the string that will be appended to the Redo menu item.
|
||||
|
||||
\membersection{wxCommandProcessor::GetRedoMenuLabel}\label{wxcommandprocessorgetredomenulabel}
|
||||
|
||||
\constfunc{wxString}{GetRedoMenuLabel}{\void}
|
||||
|
||||
Returns the string that will be shown for the redo menu item.
|
||||
|
||||
\membersection{wxCommandProcessor::GetUndoAccelerator}\label{wxcommandprocessorgetundoaccelerator}
|
||||
|
||||
\constfunc{const wxString\&}{GetUndoAccelerator}{\void}
|
||||
|
||||
Returns the string that will be appended to the Undo menu item.
|
||||
|
||||
\membersection{wxCommandProcessor::GetUndoMenuLabel}\label{wxcommandprocessorgetundomenulabel}
|
||||
|
||||
\constfunc{wxString}{GetUndoMenuLabel}{\void}
|
||||
|
||||
Returns the string that will be shown for the undo menu item.
|
||||
|
||||
\membersection{wxCommandProcessor::Initialize}
|
||||
|
||||
\func{virtual void}{Initialize}{\void}
|
||||
@@ -99,6 +111,13 @@ menu as appropriate. Set this to NULL if the menu is about to be
|
||||
destroyed and command operations may still be performed, or the command
|
||||
processor may try to access an invalid pointer.
|
||||
|
||||
\membersection{wxCommandProcessor::SetMenuStrings}
|
||||
|
||||
\func{void}{SetMenuStrings}{\void}
|
||||
|
||||
Sets the menu labels according to the currently set menu and the current
|
||||
command state.
|
||||
|
||||
\membersection{wxCommandProcessor::SetRedoAccelerator}\label{wxcommandprocessorsetredoaccelerator}
|
||||
|
||||
\func{void}{SetRedoAccelerator}{\param{const wxString\&}{accel}}
|
||||
|
@@ -69,9 +69,18 @@ public:
|
||||
virtual bool CanUndo() const;
|
||||
virtual bool CanRedo() const;
|
||||
|
||||
// Initialises the current command and menu strings.
|
||||
virtual void Initialize();
|
||||
|
||||
// Sets the Undo/Redo menu strings for the current menu.
|
||||
virtual void SetMenuStrings();
|
||||
|
||||
// Gets the current Undo menu label.
|
||||
wxString GetUndoMenuLabel() const;
|
||||
|
||||
// Gets the current Undo menu label.
|
||||
wxString GetRedoMenuLabel() const;
|
||||
|
||||
#if wxUSE_MENUS
|
||||
// Call this to manage an edit menu.
|
||||
void SetEditMenu(wxMenu *menu) { m_commandEditMenu = menu; }
|
||||
|
@@ -220,72 +220,82 @@ void wxCommandProcessor::Initialize()
|
||||
SetMenuStrings();
|
||||
}
|
||||
|
||||
static void wxSetMenuLabel(wxMenu* menu, int id, const wxString& label)
|
||||
{
|
||||
menu->SetLabel(id, label);
|
||||
}
|
||||
|
||||
void wxCommandProcessor::SetMenuStrings()
|
||||
{
|
||||
#if wxUSE_MENUS
|
||||
if (m_commandEditMenu)
|
||||
{
|
||||
wxString buf;
|
||||
if (m_currentCommand)
|
||||
wxString undoLabel = GetUndoMenuLabel();
|
||||
wxString redoLabel = GetRedoMenuLabel();
|
||||
|
||||
m_commandEditMenu->SetLabel(wxID_UNDO, undoLabel);
|
||||
m_commandEditMenu->Enable(wxID_UNDO, CanUndo());
|
||||
|
||||
m_commandEditMenu->SetLabel(wxID_REDO, redoLabel);
|
||||
m_commandEditMenu->Enable(wxID_REDO, CanRedo());
|
||||
}
|
||||
#endif // wxUSE_MENUS
|
||||
}
|
||||
|
||||
// Gets the current Undo menu label.
|
||||
wxString wxCommandProcessor::GetUndoMenuLabel() const
|
||||
{
|
||||
wxString buf;
|
||||
if (m_currentCommand)
|
||||
{
|
||||
wxCommand *command = (wxCommand *)m_currentCommand->Data();
|
||||
wxString commandName(command->GetName());
|
||||
if (commandName == wxT("")) commandName = _("Unnamed command");
|
||||
bool canUndo = command->CanUndo();
|
||||
if (canUndo)
|
||||
buf = wxString(_("&Undo ")) + commandName + m_undoAccelerator;
|
||||
else
|
||||
buf = wxString(_("Can't &Undo ")) + commandName + m_undoAccelerator;
|
||||
}
|
||||
else
|
||||
{
|
||||
buf = _("&Undo") + m_undoAccelerator;
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
// Gets the current Undo menu label.
|
||||
wxString wxCommandProcessor::GetRedoMenuLabel() const
|
||||
{
|
||||
wxString buf;
|
||||
if (m_currentCommand)
|
||||
{
|
||||
// We can redo, if we're not at the end of the history.
|
||||
if (m_currentCommand->Next())
|
||||
{
|
||||
wxCommand *command = (wxCommand *)m_currentCommand->Data();
|
||||
wxString commandName(command->GetName());
|
||||
if (commandName == wxT("")) commandName = _("Unnamed command");
|
||||
bool canUndo = command->CanUndo();
|
||||
if (canUndo)
|
||||
buf = wxString(_("&Undo ")) + commandName + m_undoAccelerator;
|
||||
else
|
||||
buf = wxString(_("Can't &Undo ")) + commandName + m_undoAccelerator;
|
||||
|
||||
wxSetMenuLabel(m_commandEditMenu, wxID_UNDO, buf);
|
||||
|
||||
m_commandEditMenu->Enable(wxID_UNDO, canUndo);
|
||||
|
||||
// We can redo, if we're not at the end of the history.
|
||||
if (m_currentCommand->Next())
|
||||
{
|
||||
wxCommand *redoCommand = (wxCommand *)m_currentCommand->Next()->Data();
|
||||
wxString redoCommandName(redoCommand->GetName());
|
||||
if (redoCommandName == wxT("")) redoCommandName = _("Unnamed command");
|
||||
buf = wxString(_("&Redo ")) + redoCommandName + m_redoAccelerator;
|
||||
wxSetMenuLabel(m_commandEditMenu, wxID_REDO, buf);
|
||||
m_commandEditMenu->Enable(wxID_REDO, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
wxSetMenuLabel(m_commandEditMenu, wxID_REDO, _("&Redo") + m_redoAccelerator);
|
||||
m_commandEditMenu->Enable(wxID_REDO, FALSE);
|
||||
}
|
||||
wxCommand *redoCommand = (wxCommand *)m_currentCommand->Next()->Data();
|
||||
wxString redoCommandName(redoCommand->GetName());
|
||||
if (redoCommandName == wxT("")) redoCommandName = _("Unnamed command");
|
||||
buf = wxString(_("&Redo ")) + redoCommandName + m_redoAccelerator;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxSetMenuLabel(m_commandEditMenu, wxID_UNDO, _("&Undo") + m_undoAccelerator);
|
||||
m_commandEditMenu->Enable(wxID_UNDO, FALSE);
|
||||
|
||||
if (m_commands.Number() == 0)
|
||||
{
|
||||
wxSetMenuLabel(m_commandEditMenu, wxID_REDO, _("&Redo") + m_redoAccelerator);
|
||||
m_commandEditMenu->Enable(wxID_REDO, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
// currentCommand is NULL but there are commands: this means that
|
||||
// we've undone to the start of the list, but can redo the first.
|
||||
wxCommand *redoCommand = (wxCommand *)m_commands.First()->Data();
|
||||
wxString redoCommandName(redoCommand->GetName());
|
||||
if (redoCommandName == wxT("")) redoCommandName = _("Unnamed command");
|
||||
buf = wxString(_("&Redo ")) + redoCommandName + m_redoAccelerator;
|
||||
wxSetMenuLabel(m_commandEditMenu, wxID_REDO, buf);
|
||||
m_commandEditMenu->Enable(wxID_REDO, TRUE);
|
||||
}
|
||||
buf = _("&Redo") + m_redoAccelerator;
|
||||
}
|
||||
}
|
||||
#endif // wxUSE_MENUS
|
||||
else
|
||||
{
|
||||
if (m_commands.Number() == 0)
|
||||
{
|
||||
buf = _("&Redo") + m_redoAccelerator;
|
||||
}
|
||||
else
|
||||
{
|
||||
// currentCommand is NULL but there are commands: this means that
|
||||
// we've undone to the start of the list, but can redo the first.
|
||||
wxCommand *redoCommand = (wxCommand *)m_commands.First()->Data();
|
||||
wxString redoCommandName(redoCommand->GetName());
|
||||
if (redoCommandName == wxT("")) redoCommandName = _("Unnamed command");
|
||||
buf = wxString(_("&Redo ")) + redoCommandName + m_redoAccelerator;
|
||||
}
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
void wxCommandProcessor::ClearCommands()
|
||||
|
Reference in New Issue
Block a user