diff options
author | Doug McLain <doug@nostar.net> | 2008-06-02 05:02:28 +0000 |
---|---|---|
committer | Doug McLain <doug@nostar.net> | 2008-06-02 05:02:28 +0000 |
commit | 9c0d7d72d70082a54f823cd44c0ccda5da64bb6f (patch) | |
tree | 96ec400b83b8c1c06852b1936f684b5fbcd47a79 /libs/pbd/undo.cc | |
parent | 2f3f697bb8e185eb43c2c50b4eefc2bcb937f269 (diff) |
remove empty sigc++2 directory
git-svn-id: svn://localhost/ardour2/branches/3.0@3432 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd/undo.cc')
-rw-r--r-- | libs/pbd/undo.cc | 293 |
1 files changed, 0 insertions, 293 deletions
diff --git a/libs/pbd/undo.cc b/libs/pbd/undo.cc deleted file mode 100644 index aeff37cce7..0000000000 --- a/libs/pbd/undo.cc +++ /dev/null @@ -1,293 +0,0 @@ -/* - Copyright (C) 2001 Brett Viren & Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - $Id$ -*/ - -#include <iostream> -#include <string> -#include <sstream> - -#include <pbd/undo.h> -#include <pbd/xml++.h> -#include <pbd/shiva.h> - -#include <sigc++/bind.h> - -using namespace std; -using namespace sigc; - -UndoTransaction::UndoTransaction () - : _clearing(false) -{ -} - -UndoTransaction::UndoTransaction (const UndoTransaction& rhs) - : Command(rhs._name) - , _clearing(false) -{ - clear (); - actions.insert(actions.end(),rhs.actions.begin(),rhs.actions.end()); -} - -UndoTransaction::~UndoTransaction () -{ - GoingAway (); - clear (); -} - -void -command_death (UndoTransaction* ut, Command* c) -{ - if (ut->clearing()) { - return; - } - - ut->remove_command (c); - - if (ut->empty()) { - delete ut; - } -} - -UndoTransaction& -UndoTransaction::operator= (const UndoTransaction& rhs) -{ - if (this == &rhs) return *this; - _name = rhs._name; - clear (); - actions.insert(actions.end(),rhs.actions.begin(),rhs.actions.end()); - return *this; -} - -void -UndoTransaction::add_command (Command *const action) -{ - /* catch death */ - new PBD::ProxyShiva<Command,UndoTransaction> (*action, *this, &command_death); - actions.push_back (action); -} - -void -UndoTransaction::remove_command (Command* const action) -{ - actions.remove (action); -} - -bool -UndoTransaction::empty () const -{ - return actions.empty(); -} - -void -UndoTransaction::clear () -{ - _clearing = true; - for (list<Command*>::iterator i = actions.begin(); i != actions.end(); ++i) { - delete *i; - } - actions.clear (); - _clearing = false; -} - -void -UndoTransaction::operator() () -{ - for (list<Command*>::iterator i = actions.begin(); i != actions.end(); ++i) { - (*(*i))(); - } -} - -void -UndoTransaction::undo () -{ - for (list<Command*>::reverse_iterator i = actions.rbegin(); i != actions.rend(); ++i) { - (*i)->undo(); - } -} - -void -UndoTransaction::redo () -{ - (*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); - - list<Command*>::iterator it; - for (it=actions.begin(); it!=actions.end(); it++) - node->add_child_nocopy((*it)->get_state()); - - return *node; -} - -UndoHistory::UndoHistory () -{ - _clearing = false; - _depth = 0; -} - -void -UndoHistory::set_depth (int32_t d) -{ - _depth = d; - - while (_depth > 0 && UndoList.size() > (uint32_t) _depth) { - UndoList.pop_front (); - } -} - -void -UndoHistory::add (UndoTransaction* const ut) -{ - ut->GoingAway.connect (bind (mem_fun (*this, &UndoHistory::remove), ut)); - - while (_depth > 0 && UndoList.size() > (uint32_t) _depth) { - UndoList.pop_front (); - } - - UndoList.push_back (ut); - - /* we are now owners of the transaction */ - - Changed (); /* EMIT SIGNAL */ -} - -void -UndoHistory::remove (UndoTransaction* const ut) -{ - if (_clearing) { - return; - } - - UndoList.remove (ut); - RedoList.remove (ut); - - Changed (); /* EMIT SIGNAL */ -} - -/** Undo some transactions. - * @param n Number of transactions to undo. - */ -void -UndoHistory::undo (unsigned int n) -{ - while (n--) { - if (UndoList.size() == 0) { - return; - } - UndoTransaction* ut = UndoList.back (); - UndoList.pop_back (); - ut->undo (); - RedoList.push_back (ut); - } - - Changed (); /* EMIT SIGNAL */ -} - -void -UndoHistory::redo (unsigned int n) -{ - while (n--) { - if (RedoList.size() == 0) { - return; - } - UndoTransaction* ut = RedoList.back (); - RedoList.pop_back (); - ut->redo (); - UndoList.push_back (ut); - } - - Changed (); /* EMIT SIGNAL */ -} - -void -UndoHistory::clear_redo () -{ - _clearing = true; - RedoList.clear (); - _clearing = false; - - Changed (); /* EMIT SIGNAL */ - -} - -void -UndoHistory::clear_undo () -{ - _clearing = true; - UndoList.clear (); - _clearing = false; - - Changed (); /* EMIT SIGNAL */ -} - -void -UndoHistory::clear () -{ - clear_undo (); - clear_redo (); - - Changed (); /* EMIT SIGNAL */ -} - -XMLNode& -UndoHistory::get_state (int32_t depth) -{ - XMLNode *node = new XMLNode ("UndoHistory"); - - if (depth == 0) { - - return (*node); - - } else if (depth < 0) { - - /* everything */ - - for (list<UndoTransaction*>::iterator it = UndoList.begin(); it != UndoList.end(); ++it) { - node->add_child_nocopy((*it)->get_state()); - } - - } else { - - /* just the last "depth" transactions */ - - list<UndoTransaction*> in_order; - - for (list<UndoTransaction*>::reverse_iterator it = UndoList.rbegin(); it != UndoList.rend() && depth; ++it, depth--) { - in_order.push_front (*it); - } - - for (list<UndoTransaction*>::iterator it = in_order.begin(); it != in_order.end(); it++) { - node->add_child_nocopy((*it)->get_state()); - } - } - - return *node; -} - - |