summaryrefslogtreecommitdiffstats
path: root/src/jabber_whiteboard/node-tracker-observer.h
diff options
context:
space:
mode:
authorMenTaLguY <mental@rydia.net>2006-01-16 02:36:01 +0000
committermental <mental@users.sourceforge.net>2006-01-16 02:36:01 +0000
commit179fa413b047bede6e32109e2ce82437c5fb8d34 (patch)
treea5a6ac2c1708bd02288fbd8edb2ff500ff2e0916 /src/jabber_whiteboard/node-tracker-observer.h
downloadinkscape-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.h119
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 :