diff options
| author | MenTaLguY <mental@rydia.net> | 2007-07-04 23:27:58 +0000 |
|---|---|---|
| committer | mental <mental@users.sourceforge.net> | 2007-07-04 23:27:58 +0000 |
| commit | 270f8f25ff737fe755e87c057e93bdb9d840faa8 (patch) | |
| tree | bcd33fdb34b2e5ad0ede9aa2b1f7400d252f54e1 /src/xml/subtree.cpp | |
| parent | First stab at a connection UI from Nick (diff) | |
| download | inkscape-270f8f25ff737fe755e87c057e93bdb9d840faa8.tar.gz inkscape-270f8f25ff737fe755e87c057e93bdb9d840faa8.zip | |
make subtree monitoring part of XML::Node's interface
(bzr r3186)
Diffstat (limited to 'src/xml/subtree.cpp')
| -rw-r--r-- | src/xml/subtree.cpp | 56 |
1 files changed, 12 insertions, 44 deletions
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<char> old_content, - Util::ptr_shared<char> new_content) -{ - _observers.notifyContentChanged(node, old_content, new_content); -} - -void Subtree::notifyAttributeChanged(Node &node, GQuark name, - Util::ptr_shared<char> old_value, - Util::ptr_shared<char> new_value) -{ - _observers.notifyAttributeChanged(node, name, old_value, new_value); -} - } } |
