diff options
Diffstat (limited to 'Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp')
-rw-r--r-- | Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp | 47 |
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() { |