From 449aab3c465bbbf66d221fac3d7ea559f1720357 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 2 Jun 2008 21:41:35 +0000 Subject: rollback to 3428, before the mysterious removal of libs/* at 3431/3432 git-svn-id: svn://localhost/ardour2/branches/3.0@3435 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/pbd/pbd/undo.h | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 libs/pbd/pbd/undo.h (limited to 'libs/pbd/pbd/undo.h') diff --git a/libs/pbd/pbd/undo.h b/libs/pbd/pbd/undo.h new file mode 100644 index 0000000000..8f1716d09f --- /dev/null +++ b/libs/pbd/pbd/undo.h @@ -0,0 +1,108 @@ +/* + Copyright (C) 2002 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. + +*/ + +#ifndef __lib_pbd_undo_h__ +#define __lib_pbd_undo_h__ + +#include +#include +#include +#include +#include +#include +#include + +typedef sigc::slot UndoAction; + +class UndoTransaction : public Command +{ + public: + UndoTransaction (); + UndoTransaction (const UndoTransaction&); + UndoTransaction& operator= (const UndoTransaction&); + ~UndoTransaction (); + + void clear (); + bool empty() const; + bool clearing () const { return _clearing; } + + void add_command (Command* const); + void remove_command (Command* const); + + void operator() (); + void undo(); + void redo(); + + XMLNode &get_state(); + + void set_timestamp (struct timeval &t) { + _timestamp = t; + } + + const struct timeval& timestamp() const { + return _timestamp; + } + + private: + std::list actions; + struct timeval _timestamp; + bool _clearing; + + friend void command_death (UndoTransaction*, Command *); +}; + +class UndoHistory : public sigc::trackable +{ + public: + UndoHistory(); + ~UndoHistory() {} + + void add (UndoTransaction* ut); + void undo (unsigned int n); + void redo (unsigned int n); + + unsigned long undo_depth() const { return UndoList.size(); } + unsigned long redo_depth() const { return RedoList.size(); } + + std::string next_undo() const { return (UndoList.empty() ? std::string() : UndoList.back()->name()); } + std::string next_redo() const { return (RedoList.empty() ? std::string() : RedoList.back()->name()); } + + void clear (); + void clear_undo (); + void clear_redo (); + + XMLNode &get_state(int32_t depth = 0); + void save_state(); + + void set_depth (int32_t); + int32_t get_depth() const { return _depth; } + + sigc::signal Changed; + + private: + bool _clearing; + int32_t _depth; + std::list UndoList; + std::list RedoList; + + void remove (UndoTransaction*); +}; + + +#endif /* __lib_pbd_undo_h__ */ -- cgit v1.2.3