summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMateusz Piekos <mateuszpiekos@gmail.com>2012-07-17 14:36:22 (GMT)
committerMateusz Piekos <mateuszpiekos@gmail.com>2012-07-17 14:36:22 (GMT)
commit7a14385acccd599438a274d421735a7d0c4bc9fa (patch)
treecfdb97325d00cd552fa03d80cc882aebaf3b5424 /Swift/QtUI/Whiteboard
parent1f8e319e256ac15438d63080d11a860dfa16431c (diff)
downloadswift-contrib-7a14385acccd599438a274d421735a7d0c4bc9fa.zip
swift-contrib-7a14385acccd599438a274d421735a7d0c4bc9fa.tar.bz2
Added handling of items deletions
Diffstat (limited to 'Swift/QtUI/Whiteboard')
-rw-r--r--Swift/QtUI/Whiteboard/GView.cpp21
-rw-r--r--Swift/QtUI/Whiteboard/GView.h2
-rw-r--r--Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp17
-rw-r--r--Swift/QtUI/Whiteboard/QtWhiteboardWindow.h1
-rw-r--r--Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h1
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) {