summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/Whiteboard/GView.cpp')
-rw-r--r--Swift/QtUI/Whiteboard/GView.cpp49
1 files changed, 39 insertions, 10 deletions
diff --git a/Swift/QtUI/Whiteboard/GView.cpp b/Swift/QtUI/Whiteboard/GView.cpp
index 92339ce..4e7e006 100644
--- a/Swift/QtUI/Whiteboard/GView.cpp
+++ b/Swift/QtUI/Whiteboard/GView.cpp
@@ -11,6 +11,7 @@ namespace Swift {
GView::GView(QGraphicsScene* scene, QWidget* parent) : QGraphicsView(scene, parent), brush(QColor(Qt::white))
{
selectionRect = 0;
+ lastItem = 0;
zValue = 0;
}
@@ -52,6 +53,7 @@ namespace Swift {
// if (mousePressed && pos >= items_.size()) {
// pos++;
// }
+ itemsMap_.insert(id, item);
if (pos > items_.size()) {
item->setZValue(zValue++);
scene()->addItem(item);
@@ -86,6 +88,10 @@ namespace Swift {
items_.clear();
}
+ QGraphicsItem* GView::getItem(QString id) {
+ return itemsMap_.value(id);
+ }
+
QString GView::getNewID() {
return idPrefix + P2QSTRING(idGenerator.generateID());
}
@@ -337,17 +343,40 @@ namespace Swift {
void GView::mouseReleaseEvent(QMouseEvent *event)
{
mousePressed = false;
- zValue++;
- lastItem->setZValue(zValue++);
- items_.append(lastItem);
-// lastItemChanged(lastItem, lastItem->data(101).toInt());
- std::cout << "items:" << std::endl;
- for (QList<QGraphicsItem*>::const_iterator it = items_.begin(); it != items_.end(); ++it) {
- std::cout << (*it)->data(100).toString().toStdString() << std::endl;
- }
- std::cout << std::endl;
+ QGraphicsPolygonItem* polygon = dynamic_cast<QGraphicsPolygonItem*>(lastItem);
+ if (polygon && polygon->polygon().size() >= 3) {
+ int i = 1;
+ for (QList<QGraphicsItem*>::const_iterator it = items_.begin(); it != items_.end(); ++it) {
+ if (*it == polygon) {
+ break;
+ }
+ i++;
+ }
+ lastItemChanged(polygon, i, Update);
+ } else if (lastItem) {
+ zValue++;
+ lastItem->setZValue(zValue++);
+ items_.append(lastItem);
+ itemsMap_.insert(lastItem->data(100).toString(), lastItem);
+ std::cout << "items:" << std::endl;
+ for (QList<QGraphicsItem*>::const_iterator it = items_.begin(); it != items_.end(); ++it) {
+ std::cout << (*it)->data(100).toString().toStdString() << std::endl;
+ }
+ std::cout << std::endl;
- lastItemChanged(lastItem, items_.size());
+ lastItemChanged(lastItem, items_.size(), New);
+ } else if (selectionRect){
+ QGraphicsItem* item = selectionRect->data(1).value<QGraphicsItem*>();
+ int i = 1;
+ for (QList<QGraphicsItem*>::const_iterator it = items_.begin(); it != items_.end(); ++it) {
+ if (*it == item) {
+ break;
+ }
+ i++;
+ }
+ lastItemChanged(item, i, Update);
+ }
+// lastItem = 0;
}