index bcb6cd981af3f522a4f23fb43842cac7b43a5138..4d24cf72a309ebcd2cd2a6eef21dac1cbe0e515e 100644 (file)
#include "util/ucompose.hpp"
+#include "pedro/pedrodom.h"
+
+#include "xml/node.h"
+#include "xml/attribute-record.h"
+#include "xml/element-node.h"
+#include "xml/text-node.h"
+
#include "jabber_whiteboard/message-utilities.h"
#include "jabber_whiteboard/defines.h"
#include "jabber_whiteboard/inkboard-document.h"
Glib::ustring
InkboardDocument::addNodeToTracker(Inkscape::XML::Node *node)
{
- Glib::ustring key = this->tracker->generateKey(this->getRecipient());
+ Glib::ustring rec = this->getRecipient();
+ Glib::ustring key = this->tracker->generateKey(rec);
this->tracker->put(key,node);
return key;
}
{
Glib::ustring parentKey;
Glib::ustring key = this->tracker->get(node);
- Inkscape::XML::Node *parent = node->parent();
Glib::ustring tempParentKey = this->tracker->get(node->parent());
if(tempParentKey.size() < 1)
else
parentKey = tempParentKey;
- unsigned int index = parent->_childPosition(*node);
+ unsigned int index = node->position();
Message::Message nodeMessage = MessageUtilities::objectToString(node);
- Message::Message message = String::ucompose(Vars::NEW_MESSAGE,parentKey,key,index,nodeMessage);
+ Message::Message message = String::ucompose(Vars::NEW_MESSAGE,parentKey,key,index,0,nodeMessage);
return message;
}
void
-InkboardDocument::changeConfigure(Glib::ustring target, signed int version,
- Glib::ustring attribute, Glib::ustring value)
+InkboardDocument::changeConfigureText(Glib::ustring target,
+ unsigned int /*version*/,
+ Glib::ustring text)
{
+ XML::Node *node = this->tracker->get(target);
+ //unsigned int elementVersion = this->tracker->getVersion(node);
+
+ if(node)// && version == (elementVersion + 1))
+ {
+ this->tracker->incrementVersion(node);
+ this->tracker->addHistory(node, "text", text);
+ node->setContent(text.c_str());
+ }
+}
+
+void
+InkboardDocument::changeConfigure(Glib::ustring target,
+ unsigned int /*version*/,
+ Glib::ustring attribute,
+ Glib::ustring value)
+{
+ XML::Node *node = this->tracker->get(target);
+ //unsigned int elementVersion = this->tracker->getVersion(node);
+
+ if(node)// && version == (elementVersion + 1))
+ {
+ this->tracker->incrementVersion(node);
+ this->tracker->addHistory(node, attribute, value.c_str());
+
+ if(attribute != "transform")
+ node->setAttribute(attribute.c_str(),value.c_str());
+ }
}
void
-InkboardDocument::changeNew(Glib::ustring target, Glib::ustring,
- signed int index, Pedro::Element* data)
+InkboardDocument::changeNew(Glib::ustring parentid, Glib::ustring id,
+ signed int /*index*/, Pedro::Element* data)
{
- Glib::ustring name = data->getName();
+
+ Glib::ustring name(data->getName());
if(name == "text")
{
- //XML::Node* parent = this->tracker->get(target);
- //parent->setContent(date->getValue());
+ XML::Node *parent = this->tracker->get(parentid);
+ XML::Node *node = new XML::TextNode(Util::share_string(data->getValue().c_str()), this);
+
+ if(parent && node)
+ {
+ this->tracker->put(id,node);
+ parent->appendChild(node);
+ }
+ }else
+ {
+ XML::Node *node = new XML::ElementNode(g_quark_from_string(name.c_str()), this);
+ this->tracker->put(id,node);
+
+ XML::Node *parent = (parentid != "ROOT")
+ ? this->tracker->get(parentid.c_str()) : this->root();
+
+ std::vector<Pedro::Attribute> attributes = data->getAttributes();
+
+ for (unsigned int i=0; i<attributes.size(); i++)
+ {
+ node->setAttribute(
+ (attributes[i].getName()).c_str(),
+ (attributes[i].getValue()).c_str());
+ }
+
+ if(parent != NULL)
+ parent->appendChild(node);
}
}