diff options
| author | MenTaLguY <mental@rydia.net> | 2006-01-16 02:36:01 +0000 |
|---|---|---|
| committer | mental <mental@users.sourceforge.net> | 2006-01-16 02:36:01 +0000 |
| commit | 179fa413b047bede6e32109e2ce82437c5fb8d34 (patch) | |
| tree | a5a6ac2c1708bd02288fbd8edb2ff500ff2e0916 /src/jabber_whiteboard/node-tracker-observer.h | |
| download | inkscape-179fa413b047bede6e32109e2ce82437c5fb8d34.tar.gz inkscape-179fa413b047bede6e32109e2ce82437c5fb8d34.zip | |
moving trunk for module inkscape
(bzr r1)
Diffstat (limited to 'src/jabber_whiteboard/node-tracker-observer.h')
| -rw-r--r-- | src/jabber_whiteboard/node-tracker-observer.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/jabber_whiteboard/node-tracker-observer.h b/src/jabber_whiteboard/node-tracker-observer.h new file mode 100644 index 000000000..600500c70 --- /dev/null +++ b/src/jabber_whiteboard/node-tracker-observer.h @@ -0,0 +1,119 @@ +/** + * Convenience base class for XML::NodeObservers that need to extract data + * from an XMLNodeTracker and queue up added or removed nodes for later + * processing + * + * Authors: + * David Yip <yipdw@rose-hulman.edu> + * + * Copyright (c) 2005 Authors + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifndef __WHITEBOARD_NODE_TRACKER_OBSERVER_H__ +#define __WHITEBOARD_NODE_TRACKER_OBSERVER_H__ + +#include "xml/node-observer.h" + +#include "jabber_whiteboard/node-tracker-event-tracker.h" +#include "jabber_whiteboard/node-tracker.h" +#include "jabber_whiteboard/typedefs.h" + +namespace Inkscape { + +namespace XML { + +class Node; + +} + +namespace Whiteboard { + +class NodeTrackerObserver : public XML::NodeObserver { +public: + NodeTrackerObserver(XMLNodeTracker* xnt) : _xnt(xnt) { } + virtual ~NodeTrackerObserver() { } + + // just reinforce the fact that we don't implement any of the + // notification methods here + virtual void notifyChildAdded(XML::Node &node, XML::Node &child, XML::Node *prev)=0; + + virtual void notifyChildRemoved(XML::Node &node, XML::Node &child, XML::Node *prev)=0; + + virtual void notifyChildOrderChanged(XML::Node &node, XML::Node &child, + XML::Node *old_prev, XML::Node *new_prev)=0; + + virtual void notifyContentChanged(XML::Node &node, + Util::SharedCStringPtr old_content, + Util::SharedCStringPtr new_content)=0; + + virtual void notifyAttributeChanged(XML::Node &node, GQuark name, + Util::SharedCStringPtr old_value, + Util::SharedCStringPtr new_value)=0; + + + // ...but we do provide node tracking facilities + KeyToNodeActionList& getNodeTrackerActions() + { + return this->newnodes; + } + + KeyToNodeActionList getNodeTrackerActionsCopy() + { + return this->newnodes; + } + + void clearNodeBuffers() + { + this->newnodes.clear(); + this->newkeys.clear(); + this->actions.clear(); + } + +protected: + std::string _findOrGenerateNodeID(XML::Node& node) + { + NodeToKeyMap::iterator i = newkeys.find(&node); + if (i != newkeys.end()) { +// g_log(NULL, G_LOG_LEVEL_DEBUG, "Found key for %p (local): %s", &node, i->second.c_str()); + return i->second; + } else { + std::string nodeid = this->_xnt->get(node); + if (nodeid.empty()) { +// g_log(NULL, G_LOG_LEVEL_DEBUG, "Generating key for %p", &node); + return this->_xnt->generateKey(); + } else { +// g_log(NULL, G_LOG_LEVEL_DEBUG, "Found key for %p (tracker): %s", &node, nodeid.c_str()); + return nodeid; + } + } + } + + KeyToNodeActionList newnodes; + NodeTrackerEventTracker actions; + NodeToKeyMap newkeys; + XMLNodeTracker* _xnt; + +private: + // noncopyable, nonassignable + NodeTrackerObserver(NodeTrackerObserver const& other); + NodeTrackerObserver& operator=(NodeTrackerObserver const& other); + +}; + +} + +} +#endif + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : |
