From 270f8f25ff737fe755e87c057e93bdb9d840faa8 Mon Sep 17 00:00:00 2001 From: MenTaLguY Date: Wed, 4 Jul 2007 23:27:58 +0000 Subject: make subtree monitoring part of XML::Node's interface (bzr r3186) --- src/xml/subtree.cpp | 56 ++++++++++++----------------------------------------- 1 file changed, 12 insertions(+), 44 deletions(-) (limited to 'src/xml/subtree.cpp') diff --git a/src/xml/subtree.cpp b/src/xml/subtree.cpp index f19bf055a..c608efd64 100644 --- a/src/xml/subtree.cpp +++ b/src/xml/subtree.cpp @@ -19,29 +19,27 @@ namespace Inkscape { namespace XML { -namespace { - -void recursively(void (Node::*m)(NodeObserver &observer), - Node &node, NodeObserver &observer) -{ - (node.*m)(observer); - for ( NodeSiblingIterator iter = node.firstChild() ; iter ; ++iter ) { - recursively(m, *iter, observer); - } +Subtree::Subtree(Node &root) : _root(root) { + _root.addSubtreeObserver(_observers); } +Subtree::~Subtree() { + _root.removeSubtreeObserver(_observers); } -Subtree::Subtree(Node &root) : _root(root) { - recursively(&Node::addObserver, _root, *this); +namespace { + +void synthesize_events_recursive(Node &node, NodeObserver &observer) { + node.synthesizeEvents(observer); + for ( NodeSiblingIterator iter = node.firstChild() ; iter ; ++iter ) { + synthesize_events_recursive(*iter, observer); + } } -Subtree::~Subtree() { - recursively(&Node::removeObserver, _root, *this); } void Subtree::synthesizeEvents(NodeObserver &observer) { - recursively(&Node::synthesizeEvents, _root, *this); + synthesize_events_recursive(_root, observer); } void Subtree::addObserver(NodeObserver &observer) { @@ -52,36 +50,6 @@ void Subtree::removeObserver(NodeObserver &observer) { _observers.remove(observer); } -void Subtree::notifyChildAdded(Node &node, Node &child, Node *prev) { - recursively(&Node::addObserver, child, *this); - _observers.notifyChildAdded(node, child, prev); -} - -void Subtree::notifyChildRemoved(Node &node, Node &child, Node *prev) { - recursively(&Node::removeObserver, child, *this); - _observers.notifyChildRemoved(node, child, prev); -} - -void Subtree::notifyChildOrderChanged(Node &node, Node &child, - Node *old_prev, Node *new_prev) -{ - _observers.notifyChildOrderChanged(node, child, old_prev, new_prev); -} - -void Subtree::notifyContentChanged(Node &node, - Util::ptr_shared old_content, - Util::ptr_shared new_content) -{ - _observers.notifyContentChanged(node, old_content, new_content); -} - -void Subtree::notifyAttributeChanged(Node &node, GQuark name, - Util::ptr_shared old_value, - Util::ptr_shared new_value) -{ - _observers.notifyAttributeChanged(node, name, old_value, new_value); -} - } } -- cgit v1.2.3