// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "cmdproc.h"
#endif
wxCommandProcessor::wxCommandProcessor(int maxCommands)
{
m_maxNoCommands = maxCommands;
- m_currentCommand = (wxNode *) NULL;
#if wxUSE_MENUS
m_commandEditMenu = (wxMenu *) NULL;
#endif // wxUSE_MENUS
m_undoAccelerator = wxT("\tCtrl+Z");
m_redoAccelerator = wxT("\tCtrl+Y");
+#if !wxUSE_STL
+ m_currentCommand = NULL;
+#endif
}
wxCommandProcessor::~wxCommandProcessor()
{
wxCHECK_RET( command, _T("no command in wxCommandProcessor::Store") );
- if (m_commands.Number() == m_maxNoCommands)
+ if ( (int)m_commands.GetCount() == m_maxNoCommands )
{
- wxNode *firstNode = m_commands.First();
- wxCommand *firstCommand = (wxCommand *)firstNode->Data();
+ wxList::compatibility_iterator firstNode = m_commands.GetFirst();
+ wxCommand *firstCommand = (wxCommand *)firstNode->GetData();
delete firstCommand;
- delete firstNode;
+ m_commands.Erase(firstNode);
}
// Correct a bug: we must chop off the current 'branch'
ClearCommands();
else
{
- wxNode *node = m_currentCommand->Next();
+ wxList::compatibility_iterator node = m_currentCommand->GetNext();
while (node)
{
- wxNode *next = node->Next();
- delete (wxCommand *)node->Data();
- delete node;
+ wxList::compatibility_iterator next = node->GetNext();
+ delete (wxCommand *)node->GetData();
+ m_commands.Erase(node);
node = next;
}
}
m_commands.Append(command);
- m_currentCommand = m_commands.Last();
+ m_currentCommand = m_commands.GetLast();
SetMenuStrings();
}
{
if ( UndoCommand(*command) )
{
- m_currentCommand = m_currentCommand->Previous();
+ m_currentCommand = m_currentCommand->GetPrevious();
SetMenuStrings();
return TRUE;
}
bool wxCommandProcessor::Redo()
{
wxCommand *redoCommand = (wxCommand *) NULL;
- wxNode *redoNode = (wxNode *) NULL;
+ wxList::compatibility_iterator redoNode
+#if !wxUSE_STL
+ = NULL // just to avoid warnings
+#endif // !wxUSE_STL
+ ;
if ( m_currentCommand )
{
// is there anything to redo?
- if ( m_currentCommand->Next() )
+ if ( m_currentCommand->GetNext() )
{
- redoCommand = (wxCommand *)m_currentCommand->Next()->Data();
- redoNode = m_currentCommand->Next();
+ redoCommand = (wxCommand *)m_currentCommand->GetNext()->GetData();
+ redoNode = m_currentCommand->GetNext();
}
}
else // no current command, redo the first one
{
- if (m_commands.Number() > 0)
+ if (m_commands.GetCount() > 0)
{
- redoCommand = (wxCommand *)m_commands.First()->Data();
- redoNode = m_commands.First();
+ redoCommand = (wxCommand *)m_commands.GetFirst()->GetData();
+ redoNode = m_commands.GetFirst();
}
}
bool wxCommandProcessor::CanRedo() const
{
- if ((m_currentCommand != (wxNode*) NULL) && (m_currentCommand->Next() == (wxNode*) NULL))
+ if (m_currentCommand && !m_currentCommand->GetNext())
return FALSE;
- if ((m_currentCommand != (wxNode*) NULL) && (m_currentCommand->Next() != (wxNode*) NULL))
+ if (m_currentCommand && m_currentCommand->GetNext())
return TRUE;
- if ((m_currentCommand == (wxNode*) NULL) && (m_commands.Number() > 0))
+ if (!m_currentCommand && (m_commands.GetCount() > 0))
return TRUE;
return FALSE;
void wxCommandProcessor::Initialize()
{
- m_currentCommand = m_commands.Last();
+ m_currentCommand = m_commands.GetLast();
SetMenuStrings();
}
wxString buf;
if (m_currentCommand)
{
- wxCommand *command = (wxCommand *)m_currentCommand->Data();
+ wxCommand *command = (wxCommand *)m_currentCommand->GetData();
wxString commandName(command->GetName());
if (commandName == wxT("")) commandName = _("Unnamed command");
bool canUndo = command->CanUndo();
if (m_currentCommand)
{
// We can redo, if we're not at the end of the history.
- if (m_currentCommand->Next())
+ if (m_currentCommand->GetNext())
{
- wxCommand *redoCommand = (wxCommand *)m_currentCommand->Next()->Data();
+ wxCommand *redoCommand = (wxCommand *)m_currentCommand->GetNext()->GetData();
wxString redoCommandName(redoCommand->GetName());
if (redoCommandName == wxT("")) redoCommandName = _("Unnamed command");
buf = wxString(_("&Redo ")) + redoCommandName + m_redoAccelerator;
}
else
{
- if (m_commands.Number() == 0)
+ if (m_commands.GetCount() == 0)
{
buf = _("&Redo") + m_redoAccelerator;
}
{
// 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();
+ wxCommand *redoCommand = (wxCommand *)m_commands.GetFirst()->GetData();
wxString redoCommandName(redoCommand->GetName());
if (redoCommandName == wxT("")) redoCommandName = _("Unnamed command");
buf = wxString(_("&Redo ")) + redoCommandName + m_redoAccelerator;
void wxCommandProcessor::ClearCommands()
{
- wxNode *node = m_commands.First();
+ wxList::compatibility_iterator node = m_commands.GetFirst();
while (node)
{
- wxCommand *command = (wxCommand *)node->Data();
+ wxCommand *command = (wxCommand *)node->GetData();
delete command;
- delete node;
- node = m_commands.First();
+ m_commands.Erase(node);
+ node = m_commands.GetFirst();
}
- m_currentCommand = (wxNode *) NULL;
+ m_currentCommand = wxList::compatibility_iterator();
}