From a5386f8d59d595e930c1d179e0eb0fabc60a7c84 Mon Sep 17 00:00:00 2001 From: Hans Fugal Date: Fri, 30 Jun 2006 17:24:16 +0000 Subject: [PATCH] r155@gandalf: fugalh | 2006-06-30 11:21:45 -0600 MementoCommand - for the lazy at heart git-svn-id: svn://localhost/ardour2/branches/undo@661 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/pbd3/pbd/memento_command.h | 54 +++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 libs/pbd3/pbd/memento_command.h diff --git a/libs/pbd3/pbd/memento_command.h b/libs/pbd3/pbd/memento_command.h new file mode 100644 index 0000000000..6ecacf6d67 --- /dev/null +++ b/libs/pbd3/pbd/memento_command.h @@ -0,0 +1,54 @@ +/* + Copyright (C) 2006 Hans Fugal & 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: /local/undo/libs/pbd3/pbd/undo.h 132 2006-06-29T18:45:16.609763Z fugalh $ +*/ + +#ifndef __lib_pbd_memento_command_h__ +#define __lib_pbd_memento_command_h__ + +#include +#include + +// TODO: make a macro to make constructing this even easier +template +class MementoCommand : public Command +{ + public: + MementoCommand(obj_T obj, + sigc::slot action, + std::string key + std::list args + ) + : obj(obj), action(action), key(key), args(args), memento(obj.get_memento()) {} + void operator() () { action(); } + void undo() { obj.set_memento(memento); } + virtual XMLNode &serialize() + { + // obj.id + // key + // args + } + protected: + obj_T &obj; + mem_T memento; + sigc::slot action; + std::string key; + std::list args; +}; + +#endif // __lib_pbd_memento_h__