#if wxUSE_MENUS
m_commandEditMenu = (wxMenu *) NULL;
#endif // wxUSE_MENUS
+ m_undoAccelerator = wxT("\tCtrl+Z");
+ m_redoAccelerator = wxT("\tCtrl+Y");
}
wxCommandProcessor::~wxCommandProcessor()
wxCHECK_MSG( command, FALSE, _T("no command in wxCommandProcessor::Submit") );
if ( !DoCommand(*command) )
+ {
+ // the user code expects the command to be deleted anyhow
+ delete command;
+
return FALSE;
+ }
if ( storeIt )
Store(command);
{
wxCommand *redoCommand = (wxCommand *) NULL;
wxNode *redoNode = (wxNode *) NULL;
- if (m_currentCommand && m_currentCommand->Next())
+
+ if ( m_currentCommand )
{
- redoCommand = (wxCommand *)m_currentCommand->Next()->Data();
- redoNode = m_currentCommand->Next();
+ // is there anything to redo?
+ if ( m_currentCommand->Next() )
+ {
+ redoCommand = (wxCommand *)m_currentCommand->Next()->Data();
+ redoNode = m_currentCommand->Next();
+ }
}
- else
+ else // no current command, redo the first one
{
if (m_commands.Number() > 0)
{
SetMenuStrings();
}
+static void wxSetMenuLabel(wxMenu* menu, int id, const wxString& label)
+{
+ menu->SetLabel(id, label);
+}
+
void wxCommandProcessor::SetMenuStrings()
{
#if wxUSE_MENUS
if (commandName == wxT("")) commandName = _("Unnamed command");
bool canUndo = command->CanUndo();
if (canUndo)
- buf = wxString(_("&Undo ")) + commandName;
+ buf = wxString(_("&Undo ")) + commandName + m_undoAccelerator;
else
- buf = wxString(_("Can't &Undo ")) + commandName;
+ buf = wxString(_("Can't &Undo ")) + commandName + m_undoAccelerator;
- m_commandEditMenu->SetLabel(wxID_UNDO, buf);
+ 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.
wxCommand *redoCommand = (wxCommand *)m_currentCommand->Next()->Data();
wxString redoCommandName(redoCommand->GetName());
if (redoCommandName == wxT("")) redoCommandName = _("Unnamed command");
- buf = wxString(_("&Redo ")) + redoCommandName;
- m_commandEditMenu->SetLabel(wxID_REDO, buf);
+ buf = wxString(_("&Redo ")) + redoCommandName + m_redoAccelerator;
+ wxSetMenuLabel(m_commandEditMenu, wxID_REDO, buf);
m_commandEditMenu->Enable(wxID_REDO, TRUE);
}
else
{
- m_commandEditMenu->SetLabel(wxID_REDO, _("&Redo"));
+ wxSetMenuLabel(m_commandEditMenu, wxID_REDO, _("&Redo") + m_redoAccelerator);
m_commandEditMenu->Enable(wxID_REDO, FALSE);
}
}
else
{
- m_commandEditMenu->SetLabel(wxID_UNDO, _("&Undo"));
+ wxSetMenuLabel(m_commandEditMenu, wxID_UNDO, _("&Undo") + m_undoAccelerator);
m_commandEditMenu->Enable(wxID_UNDO, FALSE);
if (m_commands.Number() == 0)
{
- m_commandEditMenu->SetLabel(wxID_REDO, _("&Redo"));
+ wxSetMenuLabel(m_commandEditMenu, wxID_REDO, _("&Redo") + m_redoAccelerator);
m_commandEditMenu->Enable(wxID_REDO, FALSE);
}
else
wxCommand *redoCommand = (wxCommand *)m_commands.First()->Data();
wxString redoCommandName(redoCommand->GetName());
if (redoCommandName == wxT("")) redoCommandName = _("Unnamed command");
- buf = wxString(_("&Redo ")) + redoCommandName;
- m_commandEditMenu->SetLabel(wxID_REDO, buf);
+ buf = wxString(_("&Redo ")) + redoCommandName + m_redoAccelerator;
+ wxSetMenuLabel(m_commandEditMenu, wxID_REDO, buf);
m_commandEditMenu->Enable(wxID_REDO, TRUE);
}
}