-/*
+/*
Copyright (C) 2001 Brett Viren & Paul Davis
This program is free software; you can redistribute it and/or modify
$Id$
*/
-#include <iostream>
#include <string>
#include <sstream>
#include <time.h>
clear ();
}
-void
+void
command_death (UndoTransaction* ut, Command* c)
{
if (ut->clearing()) {
}
}
-UndoTransaction&
+UndoTransaction&
UndoTransaction::operator= (const UndoTransaction& rhs)
{
if (this == &rhs) return *this;
XMLNode &UndoTransaction::get_state()
{
XMLNode *node = new XMLNode ("UndoTransaction");
- stringstream ss;
- ss << _timestamp.tv_sec;
- node->add_property("tv_sec", ss.str());
- ss.str("");
- ss << _timestamp.tv_usec;
- node->add_property("tv_usec", ss.str());
- node->add_property("name", _name);
+ node->set_property("tv-sec", (int64_t)_timestamp.tv_sec);
+ node->set_property("tv-usec", (int64_t)_timestamp.tv_usec);
+ node->set_property("name", _name);
list<Command*>::iterator it;
for (it=actions.begin(); it!=actions.end(); it++)
class UndoRedoSignaller {
public:
- UndoRedoSignaller (UndoHistory& uh)
- : _history (uh) {
- _history.BeginUndoRedo();
+ UndoRedoSignaller (UndoHistory& uh)
+ : _history (uh) {
+ _history.BeginUndoRedo();
}
- ~UndoRedoSignaller() {
- _history.EndUndoRedo();
+ ~UndoRedoSignaller() {
+ _history.EndUndoRedo();
}
private:
}
UndoList.push_back (ut);
+ /* Adding a transacrion makes the redo list meaningless. */
+ _clearing = true;
+ for (std::list<UndoTransaction*>::iterator i = RedoList.begin(); i != RedoList.end(); ++i) {
+ delete *i;
+ }
+ RedoList.clear ();
+ _clearing = false;
/* we are now owners of the transaction and must delete it when finished with it */
{
UndoRedoSignaller exception_safe_signaller (*this);
-
+
while (n--) {
if (RedoList.size() == 0) {
return;
UndoHistory::clear_redo ()
{
_clearing = true;
+ for (std::list<UndoTransaction*>::iterator i = RedoList.begin(); i != RedoList.end(); ++i) {
+ delete *i;
+ }
RedoList.clear ();
_clearing = false;
UndoHistory::clear_undo ()
{
_clearing = true;
+ for (std::list<UndoTransaction*>::iterator i = UndoList.begin(); i != UndoList.end(); ++i) {
+ delete *i;
+ }
UndoList.clear ();
_clearing = false;
Changed (); /* EMIT SIGNAL */
}
-XMLNode&
+XMLNode&
UndoHistory::get_state (int32_t depth)
{
XMLNode *node = new XMLNode ("UndoHistory");