diff --git a/libs/pbd3/pbd/undo.h b/libs/pbd3/pbd/undo.h index f067635ed3..b540179012 100644 --- a/libs/pbd3/pbd/undo.h +++ b/libs/pbd3/pbd/undo.h @@ -24,13 +24,45 @@ #include #include #include +#include #include +#include using std::string; using std::list; typedef sigc::slot UndoAction; +class Serializable; + +class MementoBase +{ +public: + MementoBase(std::string key); + void operator() () { return _slot(); } + XMLNode &serialize(); +protected: + sigc::slot _slot; + std::list _args; +}; + +template +class Memento; + +template <> +class Memento <> : public MementoBase {}; + +template +class Memento : public MementoBase +{ +public: + Memento(std::string key, T1 arg1) : MementoBase(key) + { + _args.push_back(arg1); + _slot = sigc::bind(_slot, arg1); + } +}; + class UndoCommand { public: