diff options
Diffstat (limited to 'Swift/QtUI/Whiteboard/GView.cpp')
-rw-r--r-- | Swift/QtUI/Whiteboard/GView.cpp | 49 |
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; } |