summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp')
-rw-r--r--Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp47
1 files changed, 35 insertions, 12 deletions
diff --git a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp
index 5afc382..5743d80 100644
--- a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp
+++ b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp
@@ -15,6 +15,7 @@
#include <Swiften/Elements/WhiteboardPayload.h>
#include <Swiften/Whiteboard/Elements/WhiteboardLineElement.h>
#include <Swiften/Whiteboard/Elements/WhiteboardRectElement.h>
+#include <Swiften/Whiteboard/Operations/WhiteboardInsertOperation.h>
#include <Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h>
#include <QMessageBox>
@@ -35,7 +36,7 @@ namespace Swift {
graphicsView = new GView(scene, this);
graphicsView->setMode(GView::Line);
- connect(graphicsView, SIGNAL(lastItemChanged(QGraphicsItem*)), this, SLOT(handleLastItemChanged(QGraphicsItem*)));
+ connect(graphicsView, SIGNAL(lastItemChanged(QGraphicsItem*, int)), this, SLOT(handleLastItemChanged(QGraphicsItem*, int)));
widthBox = new QSpinBox(this);
connect(widthBox, SIGNAL(valueChanged(int)), this, SLOT(changeLineWidth(int)));
@@ -132,8 +133,17 @@ namespace Swift {
}
void QtWhiteboardWindow::handleWhiteboardElementReceive(const WhiteboardElement::ref element) {
- WhiteboardElementDrawingVisitor visitor(graphicsView);
- element->accept(visitor);
+// WhiteboardElementDrawingVisitor visitor(graphicsView);
+// element->accept(visitor);
+ }
+
+ void QtWhiteboardWindow::handleWhiteboardOperationReceive(const WhiteboardOperation::ref operation) {
+ WhiteboardElementDrawingVisitor visitor(graphicsView, operation->getPos());
+ WhiteboardInsertOperation::ref insertOp = boost::dynamic_pointer_cast<WhiteboardInsertOperation>(operation);
+ if (insertOp) {
+ insertOp->getElement()->accept(visitor);
+ lastOpID = insertOp->getID();
+ }
}
void QtWhiteboardWindow::changeLineWidth(int i)
@@ -210,6 +220,7 @@ namespace Swift {
whiteboardSession_ = session;
graphicsView->setIDPrefix(P2QSTRING(whiteboardSession_->getClientID()));
whiteboardSession_->onElementReceived.connect(boost::bind(&QtWhiteboardWindow::handleWhiteboardElementReceive, this, _1));
+ whiteboardSession_->onOperationReceived.connect(boost::bind(&QtWhiteboardWindow::handleWhiteboardOperationReceive, this, _1));
whiteboardSession_->onRequestAccepted.connect(boost::bind(&QWidget::show, this));
whiteboardSession_->onSessionTerminateReceived.connect(boost::bind(&QtWhiteboardWindow::handleSessionTerminate, this));
}
@@ -218,8 +229,8 @@ namespace Swift {
QWidget::activateWindow();
}
- void QtWhiteboardWindow::handleLastItemChanged(QGraphicsItem* item) {
- std::string serialized;
+ void QtWhiteboardWindow::handleLastItemChanged(QGraphicsItem* item, int pos) {
+ WhiteboardElement::ref el;
QGraphicsLineItem* lineItem = qgraphicsitem_cast<QGraphicsLineItem*>(item);
if (lineItem != 0) {
QLine line = lineItem->line().toLine();
@@ -229,8 +240,8 @@ namespace Swift {
element->setPenWidth(lineItem->pen().width());
element->setID(lineItem->data(100).toString().toStdString());
- whiteboardSession_->sendElement(element);
-
+// whiteboardSession_->sendElement(element);
+ el = element;
}
FreehandLineItem* freehandLineItem = qgraphicsitem_cast<FreehandLineItem*>(item);
if (freehandLineItem != 0) {
@@ -247,7 +258,8 @@ namespace Swift {
element->setPoints(points);
element->setID(freehandLineItem->data(100).toString().toStdString());
- whiteboardSession_->sendElement(element);
+// whiteboardSession_->sendElement(element);
+ el = element;
}
QGraphicsRectItem* rectItem = qgraphicsitem_cast<QGraphicsRectItem*>(item);
@@ -262,7 +274,8 @@ namespace Swift {
element->setPenWidth(rectItem->pen().width());
element->setID(rectItem->data(100).toString().toStdString());
- whiteboardSession_->sendElement(element);
+// whiteboardSession_->sendElement(element);
+ el = element;
}
QGraphicsTextItem* textItem = qgraphicsitem_cast<QGraphicsTextItem*>(item);
@@ -275,7 +288,8 @@ namespace Swift {
element->setColor(Color(color.red(), color.green(), color.blue(), color.alpha()));
element->setID(rectItem->data(100).toString().toStdString());
- whiteboardSession_->sendElement(element);
+// whiteboardSession_->sendElement(element);
+ el = element;
}
QGraphicsPolygonItem* polygonItem = qgraphicsitem_cast<QGraphicsPolygonItem*>(item);
@@ -297,7 +311,8 @@ namespace Swift {
element->setPenWidth(polygonItem->pen().width());
element->setID(polygonItem->data(100).toString().toStdString());
- whiteboardSession_->sendElement(element);
+// whiteboardSession_->sendElement(element);
+ el = element;
}
QGraphicsEllipseItem* ellipseItem = qgraphicsitem_cast<QGraphicsEllipseItem*>(item);
@@ -316,8 +331,16 @@ namespace Swift {
element->setPenWidth(ellipseItem->pen().width());
element->setID(ellipseItem->data(100).toString().toStdString());
- whiteboardSession_->sendElement(element);
+// whiteboardSession_->sendElement(element);
+ el = element;
}
+ WhiteboardInsertOperation::ref insertOp = boost::make_shared<WhiteboardInsertOperation>();
+ insertOp->setID(el->getID());
+ insertOp->setPos(pos);
+ insertOp->setElement(el);
+ insertOp->setParentID(lastOpID);
+ lastOpID = el->getID();
+ whiteboardSession_->sendOperation(insertOp);
}
void QtWhiteboardWindow::handleSessionTerminate() {