\latexignore{\rtfignore{\wxheading{Members}}}
+
\membersection{wxCommandProcessor::wxCommandProcessor}\label{wxcommandprocessorctor}
\func{}{wxCommandProcessor}{\param{int}{ maxCommands = $-1$}}
commands stored to it, otherwise (and by default) the list of commands can grow
arbitrarily.
+
\membersection{wxCommandProcessor::\destruct{wxCommandProcessor}}\label{wxcommandprocessordtor}
\func{}{\destruct{wxCommandProcessor}}{\void}
Destructor.
+
\membersection{wxCommandProcessor::CanUndo}\label{wxcommandprocessorcanundo}
\func{virtual bool}{CanUndo}{\void}
Returns true if the currently-active command can be undone, false otherwise.
+
\membersection{wxCommandProcessor::ClearCommands}\label{wxcommandprocessorclearcommands}
\func{virtual void}{ClearCommands}{\void}
Deletes all the commands in the list and sets the current command pointer to NULL.
+
\membersection{wxCommandProcessor::Redo}\label{wxcommandprocessorredo}
\func{virtual bool}{Redo}{\void}
Executes (redoes) the current command (the command that has just been undone if any).
+
\membersection{wxCommandProcessor::GetCommands}\label{wxcommandprocessorgetcommands}
\constfunc{wxList\&}{GetCommands}{\void}
Returns the list of commands.
+
\membersection{wxCommandProcessor::GetMaxCommands}\label{wxcommandprocessorgetmaxcommands}
\constfunc{int}{GetMaxCommands}{\void}
Returns the maximum number of commands that the command processor stores.
+
\membersection{wxCommandProcessor::GetEditMenu}\label{wxcommandprocessorgeteditmenu}
\constfunc{wxMenu*}{GetEditMenu}{\void}
Returns the edit menu associated with the command processor.
+
\membersection{wxCommandProcessor::GetRedoAccelerator}\label{wxcommandprocessorgetredoaccelerator}
\constfunc{const wxString\&}{GetRedoAccelerator}{\void}
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}\label{wxcommandprocessorinitialize}
\func{virtual void}{Initialize}{\void}
last in the list (if any), and updating the edit menu (if one has been
specified).
+
+\membersection{wxCommandProcessor::IsDirty}\label{wxcommandprocessorisdirty}
+
+\func{virtual bool}{IsDirty}{\void}
+
+Returns a boolean value that indicates if changes have been made since
+the last save operation. This only works if
+\helpref{wxCommandProcessor::MarkAsSaved}{wxcommandprocessormarkassaved}
+is called whenever the project is saved.
+
+
+\membersection{wxCommandProcessor::MarkAsSaved}\label{wxcommandprocessormarkassaved}
+
+\func{virtual void}{MarkAsSaved}{\void}
+
+You must call this method whenever the project is saved if you plan to use
+\helpref{wxCommandProcessor::IsDirty}{wxcommandprocessorisdirty}.
+
+
\membersection{wxCommandProcessor::SetEditMenu}\label{wxcommandprocessorseteditmenu}
\func{void}{SetEditMenu}{\param{wxMenu* }{menu}}
destroyed and command operations may still be performed, or the command
processor may try to access an invalid pointer.
+
\membersection{wxCommandProcessor::SetMenuStrings}\label{wxcommandprocessorsetmenustrings}
\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}}
Sets the string that will be appended to the Redo menu item.
+
\membersection{wxCommandProcessor::SetUndoAccelerator}\label{wxcommandprocessorsetundoaccelerator}
\func{void}{SetUndoAccelerator}{\param{const wxString\&}{accel}}
Sets the string that will be appended to the Undo menu item.
+
\membersection{wxCommandProcessor::Submit}\label{wxcommandprocessorsubmit}
\func{virtual bool}{Submit}{\param{wxCommand *}{command}, \param{bool}{ storeIt = true}}
{\it storeIt} indicates whether the successful command should be stored
in the history list.
+
\membersection{wxCommandProcessor::Undo}\label{wxcommandprocessorundo}
\func{virtual bool}{Undo}{\void}
int GetMaxCommands() const { return m_maxNoCommands; }
virtual void ClearCommands();
+ // Has the current project been changed?
+ virtual bool IsDirty() const
+ {
+ return m_currentCommand && (m_lastSavedCommand != m_currentCommand);
+ }
+
+ // Mark the current command as the one where the last save took place
+ void MarkAsSaved()
+ {
+ m_lastSavedCommand = m_currentCommand;
+ }
+
+
// By default, the accelerators are "\tCtrl+Z" and "\tCtrl+Y"
const wxString& GetUndoAccelerator() const { return m_undoAccelerator; }
const wxString& GetRedoAccelerator() const { return m_redoAccelerator; }
int m_maxNoCommands;
wxList m_commands;
- wxList::compatibility_iterator m_currentCommand;
+ wxList::compatibility_iterator m_currentCommand,
+ m_lastSavedCommand;
#if wxUSE_MENUS
wxMenu* m_commandEditMenu;
};
#endif // _WX_CMDPROC_H_
+
#endif // wxUSE_MENUS
m_undoAccelerator = wxT("\tCtrl+Z");
m_redoAccelerator = wxT("\tCtrl+Y");
-#if !wxUSE_STL
- m_currentCommand = NULL;
-#endif
+
+ m_lastSavedCommand =
+ m_currentCommand = wxList::compatibility_iterator();
}
wxCommandProcessor::~wxCommandProcessor()
wxCommand *firstCommand = (wxCommand *)firstNode->GetData();
delete firstCommand;
m_commands.Erase(firstNode);
+
+ // Make sure m_lastSavedCommand won't point to freed memory
+ if ( m_lastSavedCommand == firstNode )
+ m_lastSavedCommand = wxList::compatibility_iterator();
}
// Correct a bug: we must chop off the current 'branch'
wxList::compatibility_iterator next = node->GetNext();
delete (wxCommand *)node->GetData();
m_commands.Erase(node);
+
+ // Make sure m_lastSavedCommand won't point to freed memory
+ if ( m_lastSavedCommand == node )
+ m_lastSavedCommand = wxList::compatibility_iterator();
+
node = next;
}
}
m_commands.Erase(node);
node = m_commands.GetFirst();
}
+
m_currentCommand = wxList::compatibility_iterator();
+ m_lastSavedCommand = wxList::compatibility_iterator();
}