index 4f0f05e0786c3e6d0a30ff20db3d64df4c700981..a4a82c6fbf828d1aeaaf7ee8bfb1a05a1ba71083 100644 (file)
#include "document.h"
#include "xml/document.h"
+#include "xml/node.h"
#include "xml/simple-node.h"
+#include "xml/node-observer.h"
#include "jabber_whiteboard/defines.h"
#include "jabber_whiteboard/keynode.h"
#include "jabber_whiteboard/session-manager.h"
namespace Whiteboard {
-
-class InkboardDocument : public XML::SimpleNode, public XML::Document {
+class InkboardDocument : public XML::SimpleNode,
+ public XML::Document,
+ public XML::NodeObserver
+{
public:
- explicit InkboardDocument(int code, State::SessionType type, Glib::ustring const& to);
+ explicit InkboardDocument(int code, State::SessionType sessionType, Glib::ustring const& to);
XML::NodeType type() const
{
return Inkscape::XML::DOCUMENT_NODE;
}
+ State::SessionState state;
+ KeyNodeTable *tracker;
+
void setRecipient(Glib::ustring const& val);
Glib::ustring getRecipient() const;
void startSessionNegotiation();
void terminateSession();
- void processInkboardEvent(Message::Wrapper &wrapper, Pedro::Element* data);
- bool sendProtocol(const Glib::ustring &destJid, Message::Wrapper &mwrapper,
- Message::Message message);
+ void recieve(Message::Wrapper &wrapper, Pedro::Element* data);
+ bool send(const Glib::ustring &destJid, Message::Wrapper &mwrapper,
+ Message::Message &message);
+
+ void sendDocument(Inkscape::XML::Node* root);
bool handleOutgoingState(Message::Wrapper &wrapper,Glib::ustring const& message);
bool handleIncomingState(Message::Wrapper &wrapper,Pedro::Element* data);
- bool handleState(State::SessionState expectedState, State::SessionState newstate);
+ bool handleState(State::SessionState expectedState,
+ State::SessionState newstate);
+
+ void handleChange(Message::Wrapper &wrapper, Pedro::Element* data);
+
+ //
+ // XML::Session methods
+ //
+ bool inTransaction()
+ {
+ return _in_transaction;
+ }
+
+ void beginTransaction();
+ void rollback();
+ void commit();
+
+ XML::Event* commitUndoable();
+
+ XML::Node* createElement(char const* name);
+ XML::Node* createTextNode(char const* content);
+ XML::Node* createComment(char const* content);
+ XML::Node* createPI(char const *target, char const* content);
+
+ //
+ // XML::NodeObserver methods
+ //
+ void notifyChildAdded(Inkscape::XML::Node &parent, Inkscape::XML::Node &child, Inkscape::XML::Node *prev);
+
+ void notifyChildRemoved(Inkscape::XML::Node &parent, Inkscape::XML::Node &child, Inkscape::XML::Node *prev);
+
+ void notifyChildOrderChanged(Inkscape::XML::Node &parent, Inkscape::XML::Node &child,
+ Inkscape::XML::Node *old_prev, Inkscape::XML::Node *new_prev);
+
+ void notifyContentChanged(Inkscape::XML::Node &node,
+ Util::ptr_shared<char> old_content,
+ Util::ptr_shared<char> new_content);
+
+ void notifyAttributeChanged(Inkscape::XML::Node &node, GQuark name,
+ Util::ptr_shared<char> old_value,
+ Util::ptr_shared<char> new_value);
+
+ /* Functions below are defined in inkboard-node.cpp */
+ Glib::ustring addNodeToTracker(Inkscape::XML::Node* node);
+ Message::Message composeNewMessage(Inkscape::XML::Node *node);
+
+ void changeConfigure(Glib::ustring target, unsigned int version,
+ Glib::ustring attribute, Glib::ustring value);
+
+ void changeNew(Glib::ustring target, Glib::ustring,
+ signed int index, Pedro::Element* data);
+
+ void changeConfigureText(Glib::ustring target, unsigned int version,
+ Glib::ustring text);
protected:
/**
* \param orig Instance to copy.
*/
InkboardDocument(InkboardDocument const& orig) :
- XML::Node(), XML::SimpleNode(orig), XML::Document(), _recipient(orig._recipient)
+ XML::Node(), XML::SimpleNode(orig),
+ XML::Document(), XML::NodeObserver(),
+ recipient(orig.recipient), _in_transaction(false)
{
_initBindings();
}
- XML::SimpleNode* _duplicate() const
+ XML::SimpleNode* _duplicate(XML::Document* /*xml_doc*/) const
{
return new InkboardDocument(*this);
}
+ NodeObserver *logger() { return this; }
private:
-
void _initBindings();
- SessionManager *_sm;
- State::SessionType _type;
- State::SessionState state;
+ SessionManager *sm;
+
+ State::SessionType sessionType;
- Glib::ustring _session;
- Glib::ustring _recipient;
+ Glib::ustring sessionId;
+ Glib::ustring recipient;
- KeyNodeTable _tracker;
+ bool _in_transaction;
};
}