6601d5d879b43ffe762eb346e79bbc8907f7d852
1 /**
2 * Inkscape::Whiteboard::InkboardSession - Whiteboard implementation of XML::Session
3 *
4 * Authors:
5 * David Yip <yipdw@rose-hulman.edu>
6 *
7 * Copyright (c) 2005 Authors
8 *
9 * Released under GNU GPL, read the file 'COPYING' for more information
10 */
12 #include <glibmm.h>
13 #include <glib/gmessages.h>
14 #include <glib/gquark.h>
16 #include "jabber_whiteboard/inkboard-session.h"
17 #include "jabber_whiteboard/inkboard-document.h"
18 #include "jabber_whiteboard/defines.h"
20 #include "xml/node.h"
21 #include "xml/event.h"
22 #include "xml/element-node.h"
23 #include "xml/text-node.h"
24 #include "xml/comment-node.h"
26 #include "util/share.h"
27 #include "util/ucompose.hpp"
29 namespace Inkscape {
31 namespace Whiteboard {
33 using XML::Node;
35 void
36 InkboardSession::beginTransaction()
37 {
38 g_assert(!_in_transaction);
39 _in_transaction = true;
40 }
42 void
43 InkboardSession::rollback()
44 {
45 g_assert(_in_transaction);
46 _in_transaction = false;
47 }
49 void
50 InkboardSession::commit()
51 {
52 g_assert(_in_transaction);
53 _in_transaction = false;
54 }
56 XML::Event*
57 InkboardSession::commitUndoable()
58 {
59 g_assert(_in_transaction);
60 _in_transaction = false;
61 return NULL;
62 }
64 XML::Node*
65 InkboardSession::createElementNode(char const* name)
66 {
67 return new XML::ElementNode(g_quark_from_string(name));
68 }
70 XML::Node*
71 InkboardSession::createTextNode(char const* content)
72 {
73 return new XML::TextNode(Util::share_string(content));
74 }
76 XML::Node*
77 InkboardSession::createCommentNode(char const* content)
78 {
79 return new XML::CommentNode(Util::share_string(content));
80 }
83 void InkboardSession::notifyChildAdded(Node &parent,
84 Node &child,
85 Node *prev)
86 {
87 if (_in_transaction && doc->state == State::IN_WHITEBOARD) {
89 XML::Node *node = (XML::Node *)&child;
91 this->doc->addNodeToTracker(node);
92 Message::Message message = this->doc->composeNewMessage(node);
94 this->doc->send(this->doc->getRecipient(),Message::NEW,message);
95 }
96 }
98 void InkboardSession::notifyChildRemoved(Node &parent,
99 Node &child,
100 Node *prev)
101 {
102 if (_in_transaction && doc->state == State::IN_WHITEBOARD)
103 {
104 XML::Node *element = (XML::Node *)&child;
106 Message::Message message = String::ucompose(Vars::REMOVE_MESSAGE,
107 this->doc->tracker->get(element));
109 this->doc->send(this->doc->getRecipient(),Message::REMOVE,message);
110 }
111 }
113 void InkboardSession::notifyChildOrderChanged(Node &parent,
114 Node &child,
115 Node *old_prev,
116 Node *new_prev)
117 {
118 if (_in_transaction && doc->state == State::IN_WHITEBOARD)
119 {
120 XML::Node *element = (XML::Node *)&child;
121 XML::Node *parentElement = (XML::Node *)&parent;
123 unsigned int index = parentElement->_childPosition(*element);
125 Message::Message message = String::ucompose(Vars::MOVE_MESSAGE,
126 this->doc->tracker->get(element),index);
128 this->doc->send(this->doc->getRecipient(),Message::MOVE,message);
129 }
130 }
132 void InkboardSession::notifyContentChanged(Node &node,
133 Util::ptr_shared<char> old_content,
134 Util::ptr_shared<char> new_content)
135 {
136 if (_in_transaction && doc->state == State::IN_WHITEBOARD)
137 {
138 XML::Node *element = (XML::Node *)&node;
140 if(new_content.pointer())
141 {
142 Message::Message message = String::ucompose(Vars::CONFIGURE_TEXT_MESSAGE,
143 this->doc->tracker->get(element),"0",new_content.pointer());
145 this->doc->send(this->doc->getRecipient(),Message::CONFIGURE,message);
146 }
147 }
148 }
150 void InkboardSession::notifyAttributeChanged(Node &node,
151 GQuark name,
152 Util::ptr_shared<char> old_value,
153 Util::ptr_shared<char> new_value)
154 {
155 if (_in_transaction && doc->state == State::IN_WHITEBOARD)
156 {
157 XML::Node *element = (XML::Node *)&node;
159 if(name && new_value.pointer())
160 {
161 Message::Message message = String::ucompose(Vars::CONFIGURE_MESSAGE,
162 this->doc->tracker->get(element),"0",g_quark_to_string(name),new_value.pointer());
164 this->doc->send(this->doc->getRecipient(),Message::CONFIGURE,message);
165 }
166 }
167 }
169 }
171 }