OSC is now driven by an event loop; fix up lifetime mgmt of Glib::Source to workaroun...
[ardour.git] / libs / pbd / pbd / stateful.h
index 5fbac11e5c7abcda4ec8ebfa9a721ae0cb68c7fa..0204c8084a9e3d0d7d25ba7cf32431d9bc8e7999 100644 (file)
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: stateful.h 17 2005-09-24 19:13:41Z taybin $
 */
 
 #ifndef __pbd_stateful_h__
 #define __pbd_stateful_h__
 
 #include <string>
-#include <pbd/id.h>
+#include "pbd/id.h"
 
 class XMLNode;
 
+namespace PBD {
+
+namespace sys {
+       class path;
+}
+
 class Stateful {
   public:
        Stateful();
@@ -33,22 +38,29 @@ class Stateful {
 
        virtual XMLNode& get_state (void) = 0;
 
-       virtual int set_state (const XMLNode&) = 0;
+       virtual int set_state (const XMLNode&, int version) = 0;
 
        /* Extra XML nodes */
 
        void add_extra_xml (XMLNode&);
        XMLNode *extra_xml (const std::string& str);
 
-       virtual void add_instant_xml (XMLNode&, const std::string& dir);
-       XMLNode *instant_xml (const std::string& str, const std::string& dir);
-        const PBD::ID& id() const { return _id; }
+       const PBD::ID& id() const { return _id; }
+
+       static int current_state_version;
+       static int loading_state_version;
 
   protected:
+
+       void add_instant_xml (XMLNode&, const sys::path& directory_path);
+       XMLNode *instant_xml (const std::string& str, const sys::path& directory_path);
+
        XMLNode *_extra_xml;
        XMLNode *_instant_xml;
-        PBD::ID _id;
+       PBD::ID _id;
 };
 
+} // namespace PBD
+
 #endif /* __pbd_stateful_h__ */