Code

glib/gtestutils.h is not available on gutsy, so switching to include of
[inkscape.git] / src / xml / simple-node.h
index f1cf786805cda2ec9d6538e45e85595f4b3f0c17..60bb534549e80e6f14c391dc534e823398ea7cba 100644 (file)
 #ifndef SEEN_INKSCAPE_XML_SIMPLE_NODE_H
 #define SEEN_INKSCAPE_XML_SIMPLE_NODE_H
 
+#include <glib.h> // g_assert()
+
 #include "xml/node.h"
 #include "xml/attribute-record.h"
-#include "xml/transaction-logger.h"
 #include "xml/composite-node-observer.h"
 #include "util/list-container.h"
 
@@ -29,14 +30,9 @@ class SimpleNode
 : virtual public Node, public Inkscape::GC::Managed<>
 {
 public:
-    Session *session() {
-        return ( _logger ? &_logger->session() : NULL );
-    }
-
     gchar const *name() const;
     int code() const { return _name; }
     void setCodeUnsafe(int code) {
-        g_assert(_logger == NULL);
         _name = code;
     }
 
@@ -45,7 +41,7 @@ public:
         return const_cast<SimpleNode *>(this)->document();
     }
 
-    Node *duplicate() const { return _duplicate(); }
+    Node *duplicate(Document* doc) const { return _duplicate(doc); }
 
     Node *root();
     Node const *root() const {
@@ -109,17 +105,24 @@ public:
         _observers.remove(observer);
     }
 
+    void addSubtreeObserver(NodeObserver &observer) {
+        _subtree_observers.add(observer);
+    }
+    void removeSubtreeObserver(NodeObserver &observer) {
+        _subtree_observers.remove(observer);
+    }
+
 protected:
     SimpleNode(int code);
     SimpleNode(SimpleNode const &repr);
 
-    virtual SimpleNode *_duplicate() const=0;
+    virtual SimpleNode *_duplicate(Document *doc) const=0;
 
 public: // ideally these should be protected somehow...
-    void _setParent(Node *parent) { _parent = parent; }
+    NodeObserver &_subtreeObservers() { return _subtree_observers; }
+    void _setParent(Node *parent);
     void _setNext(Node *next) { _next = next; }
     void _bindDocument(Document &document);
-    void _bindLogger(TransactionLogger &logger);
 
     unsigned _childPosition(Node const &child) const;
     unsigned _cachedPosition() const { return _cached_position; }
@@ -133,14 +136,13 @@ private:
     Node *_parent;
     Node *_next;
     Document *_document;
-    TransactionLogger *_logger;
     mutable unsigned _cached_position;
 
     int _name;
 
     Inkscape::Util::MutableList<AttributeRecord> _attributes;
 
-    Inkscape::Util::shared_ptr<char> _content;
+    Inkscape::Util::ptr_shared<char> _content;
 
     unsigned _child_count;
     mutable bool _cached_positions_valid;
@@ -148,6 +150,7 @@ private:
     Node *_last_child;
 
     CompositeNodeObserver _observers;
+    CompositeNodeObserver _subtree_observers;
 };
 
 }