From: Julian Smart Date: Fri, 20 Dec 2002 10:15:06 +0000 (+0000) Subject: Cleaned up SetMenuStrings, factoring out redo and undo label accessors at the same... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/d863ed833366bdc5a45e69e6a0a4a98cc3a73aba?hp=f9becb862255084eeaa9b26922c5c2a49caa3950 Cleaned up SetMenuStrings, factoring out redo and undo label accessors at the same time git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18369 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/latex/wx/cmdproc.tex b/docs/latex/wx/cmdproc.tex index 922e97fa24..cb8857b7cd 100644 --- a/docs/latex/wx/cmdproc.tex +++ b/docs/latex/wx/cmdproc.tex @@ -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}} diff --git a/include/wx/cmdproc.h b/include/wx/cmdproc.h index b5b8b88b10..4092fdffda 100644 --- a/include/wx/cmdproc.h +++ b/include/wx/cmdproc.h @@ -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; } diff --git a/src/common/cmdproc.cpp b/src/common/cmdproc.cpp index 7945642565..3dbefff13f 100644 --- a/src/common/cmdproc.cpp +++ b/src/common/cmdproc.cpp @@ -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()