diff options
Diffstat (limited to 'Swift')
-rw-r--r-- | Swift/QtUI/Whiteboard/GView.cpp | 21 | ||||
-rw-r--r-- | Swift/QtUI/Whiteboard/GView.h | 2 | ||||
-rw-r--r-- | Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp | 17 | ||||
-rw-r--r-- | Swift/QtUI/Whiteboard/QtWhiteboardWindow.h | 1 | ||||
-rw-r--r-- | Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h | 1 |
5 files changed, 40 insertions, 2 deletions
diff --git a/Swift/QtUI/Whiteboard/GView.cpp b/Swift/QtUI/Whiteboard/GView.cpp index 4e7e006..1e77b62 100644 --- a/Swift/QtUI/Whiteboard/GView.cpp +++ b/Swift/QtUI/Whiteboard/GView.cpp @@ -92,6 +92,14 @@ namespace Swift { return itemsMap_.value(id); } + void GView::deleteItem(QString id) { + QGraphicsItem* item = itemsMap_.value(id); + items_.removeOne(item); + itemsMap_.remove(id); + scene()->removeItem(item); + delete item; + } + QString GView::getNewID() { return idPrefix + P2QSTRING(idGenerator.generateID()); } @@ -237,8 +245,17 @@ namespace Swift { if (!list.isEmpty()) { QGraphicsItem* item = scene()->items(rect).first(); - scene()->removeItem(item); - delete item; + QString id = item->data(100).toString(); + deleteItem(id); + int i = 1; + QList<QGraphicsItem*>::const_iterator it; + for (it = items_.begin(); it != items_.end(); ++it) { + if (*it == item) { + break; + } + i++; + } + itemDeleted(id, i); } } else if (mode == Circle) { diff --git a/Swift/QtUI/Whiteboard/GView.h b/Swift/QtUI/Whiteboard/GView.h index 9b8f60f..9a26b01 100644 --- a/Swift/QtUI/Whiteboard/GView.h +++ b/Swift/QtUI/Whiteboard/GView.h @@ -36,6 +36,7 @@ namespace Swift { void setIDPrefix(QString prefix); void clear(); QGraphicsItem* getItem(QString id); + void deleteItem(QString id); public slots: void moveUpSelectedItem(); @@ -59,5 +60,6 @@ namespace Swift { signals: void lastItemChanged(QGraphicsItem* item, int pos, GView::Type type); + void itemDeleted(QString id, int pos); }; } diff --git a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp index add9802..6df68f3 100644 --- a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp +++ b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp @@ -17,6 +17,7 @@ #include <Swiften/Whiteboard/Elements/WhiteboardRectElement.h> #include <Swiften/Whiteboard/Operations/WhiteboardInsertOperation.h> #include <Swiften/Whiteboard/Operations/WhiteboardUpdateOperation.h> +#include <Swiften/Whiteboard/Operations/WhiteboardDeleteOperation.h> #include <Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h> #include <QMessageBox> @@ -38,6 +39,7 @@ namespace Swift { graphicsView = new GView(scene, this); graphicsView->setMode(GView::Line); connect(graphicsView, SIGNAL(lastItemChanged(QGraphicsItem*, int, GView::Type)), this, SLOT(handleLastItemChanged(QGraphicsItem*, int, GView::Type))); + connect(graphicsView, SIGNAL(itemDeleted(QString, int)), this, SLOT(handleItemDeleted(QString, int))); widthBox = new QSpinBox(this); connect(widthBox, SIGNAL(valueChanged(int)), this, SLOT(changeLineWidth(int))); @@ -147,6 +149,12 @@ namespace Swift { updateOp->getElement()->accept(visitor); lastOpID = updateOp->getID(); } + + WhiteboardDeleteOperation::ref deleteOp = boost::dynamic_pointer_cast<WhiteboardDeleteOperation>(operation); + if (deleteOp) { + graphicsView->deleteItem(P2QSTRING(deleteOp->getID())); + lastOpID = deleteOp->getID(); + } } void QtWhiteboardWindow::changeLineWidth(int i) @@ -357,6 +365,15 @@ namespace Swift { } } + void QtWhiteboardWindow::handleItemDeleted(QString id, int pos) { + WhiteboardDeleteOperation::ref deleteOp = boost::make_shared<WhiteboardDeleteOperation>(); + deleteOp->setID(Q2PSTRING(id)); + deleteOp->setPos(pos); + deleteOp->setParentID(lastOpID); + lastOpID = Q2PSTRING(id); + whiteboardSession_->sendOperation(deleteOp); + } + void QtWhiteboardWindow::handleSessionTerminate() { hide(); } diff --git a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.h b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.h index 8adee83..ed1bfa4 100644 --- a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.h +++ b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.h @@ -50,6 +50,7 @@ namespace Swift { void setPolygonMode(); void setSelectMode(); void handleLastItemChanged(QGraphicsItem* item, int pos, GView::Type type); + void handleItemDeleted(QString id, int pos); private: void handleSessionTerminate(); diff --git a/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h b/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h index fc28c6f..4ed1af5 100644 --- a/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h +++ b/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h @@ -116,6 +116,7 @@ namespace Swift { item->setData(100, id); graphicsView_->addItem(item, id, pos_); } + item->setPos(0,0); QPolygonF polygon; std::vector<std::pair<int, int> >::const_iterator it = element.getPoints().begin(); for (; it != element.getPoints().end(); ++it) { |