Code

applied JID patch by Alexander Darovsky
[inkscape.git] / src / jabber_whiteboard / node-tracker-observer.h
1 /**
2  * Convenience base class for XML::NodeObservers that need to extract data
3  * from an XMLNodeTracker and queue up added or removed nodes for later
4  * processing
5  *
6  * Authors:
7  * David Yip <yipdw@rose-hulman.edu>
8  *
9  * Copyright (c) 2005 Authors
10  *
11  * Released under GNU GPL, read the file 'COPYING' for more information
12  */
14 #ifndef __WHITEBOARD_NODE_TRACKER_OBSERVER_H__
15 #define __WHITEBOARD_NODE_TRACKER_OBSERVER_H__
17 #include "xml/node-observer.h"
19 #include "jabber_whiteboard/node-tracker-event-tracker.h"
20 #include "jabber_whiteboard/node-tracker.h"
21 #include "jabber_whiteboard/typedefs.h"
23 namespace Inkscape {
25 namespace XML {
27 class Node;
29 }
31 namespace Whiteboard {
33 class NodeTrackerObserver : public XML::NodeObserver {
34 public:
35         NodeTrackerObserver(XMLNodeTracker* xnt) : _xnt(xnt) { }
36         virtual ~NodeTrackerObserver() { }
38         // just reinforce the fact that we don't implement any of the 
39         // notification methods here
40     virtual void notifyChildAdded(XML::Node &node, XML::Node &child, XML::Node *prev)=0;
42     virtual void notifyChildRemoved(XML::Node &node, XML::Node &child, XML::Node *prev)=0;
44     virtual void notifyChildOrderChanged(XML::Node &node, XML::Node &child,
45                                          XML::Node *old_prev, XML::Node *new_prev)=0;
47     virtual void notifyContentChanged(XML::Node &node,
48                                       Util::ptr_shared<char> old_content,
49                                       Util::ptr_shared<char> new_content)=0;
51     virtual void notifyAttributeChanged(XML::Node &node, GQuark name,
52                                         Util::ptr_shared<char> old_value,
53                                         Util::ptr_shared<char> new_value)=0;
56         // ...but we do provide node tracking facilities
57         KeyToNodeActionList& getNodeTrackerActions()
58         {
59                 return this->newnodes;
60         }
62         KeyToNodeActionList getNodeTrackerActionsCopy()
63         {
64                 return this->newnodes;
65         }
67         void clearNodeBuffers()
68         {
69                 this->newnodes.clear();
70                 this->newkeys.clear();
71                 this->actions.clear();
72         }
74 protected:
75         std::string _findOrGenerateNodeID(XML::Node& node)
76         {
77                 NodeToKeyMap::iterator i = newkeys.find(&node);
78                 if (i != newkeys.end()) {
79 //                      g_log(NULL, G_LOG_LEVEL_DEBUG, "Found key for %p (local): %s", &node, i->second.c_str());
80                         return i->second;
81                 } else {
82                         std::string nodeid = this->_xnt->get(node);
83                         if (nodeid.empty()) {
84 //                              g_log(NULL, G_LOG_LEVEL_DEBUG, "Generating key for %p", &node);
85                                 return this->_xnt->generateKey();
86                         } else {
87 //                              g_log(NULL, G_LOG_LEVEL_DEBUG, "Found key for %p (tracker): %s", &node, nodeid.c_str());
88                                 return nodeid;
89                         }
90                 }
91         }
93         KeyToNodeActionList newnodes;
94         NodeTrackerEventTracker actions;
95         NodeToKeyMap newkeys;
96         XMLNodeTracker* _xnt;
98 private:
99         // noncopyable, nonassignable
100         NodeTrackerObserver(NodeTrackerObserver const& other);
101         NodeTrackerObserver& operator=(NodeTrackerObserver const& other);
103 };
108 #endif
110 /*
111   Local Variables:
112   mode:c++
113   c-file-style:"stroustrup"
114   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
115   indent-tabs-mode:nil
116   fill-column:99
117   End:
118 */
119 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :