diff options
Diffstat (limited to 'Swift/QtUI/Whiteboard/GView.cpp')
-rw-r--r-- | Swift/QtUI/Whiteboard/GView.cpp | 85 |
1 files changed, 65 insertions, 20 deletions
diff --git a/Swift/QtUI/Whiteboard/GView.cpp b/Swift/QtUI/Whiteboard/GView.cpp index 27197d0..92339ce 100644 --- a/Swift/QtUI/Whiteboard/GView.cpp +++ b/Swift/QtUI/Whiteboard/GView.cpp @@ -46,13 +46,35 @@ namespace Swift { lastItem = 0; } - QGraphicsItem* GView::getItem(const QString id) const { - return items_.value(id); - } + void GView::addItem(QGraphicsItem* item, QString id, int pos) { +// QList<QGraphicsItem*> items = scene()->items(); +// std::cout << "pos: " << pos << " size: " << items.size() << std::endl; +// if (mousePressed && pos >= items_.size()) { +// pos++; +// } + if (pos > items_.size()) { + item->setZValue(zValue++); + scene()->addItem(item); + items_.append(item); + } else { + QList<QGraphicsItem*>::iterator it = items_.begin(); + for (int i = 1; i < pos; i++) { + ++it; + } + // std::cout << id.toStdString() << " before: " << (*it)->data(100).toString().toStdString() << std::endl; + item->setZValue((*it)->zValue()); + scene()->addItem(item); + item->stackBefore(*it); + // --it; + items_.insert(it, item); + } - void GView::addItem(QGraphicsItem* item, QString id) { - scene()->addItem(item); - items_.insert(id, item); +// items = scene()->items(); + 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; } void GView::setIDPrefix(QString prefix) { @@ -182,19 +204,23 @@ namespace Swift { QPointF point = this->mapToScene(event->pos()); QGraphicsItem* item = scene()->addLine(point.x(), point.y(), point.x(), point.y(), pen); QString id = getNewID(); - items_.insert(id, item); - item->setZValue(zValue++); +// items_.append(item); +// item->setZValue(zValue++); + item->setZValue(10000000); item->setData(100, id); + item->setData(101, items_.size()); lastItem = item; } else if (mode == Rect) { QPointF point = this->mapToScene(event->pos()); QGraphicsRectItem* item = scene()->addRect(point.x(), point.y(), 0, 0, pen, brush); QString id = getNewID(); - items_.insert(id, item); - item->setZValue(zValue++); +// items_.append(item); +// item->setZValue(zValue++); + item->setZValue(10000000); item->setData(0, point); item->setData(100, id); + item->setData(101, items_.size()); lastItem = item; } else if (mode == Rubber) { @@ -213,21 +239,25 @@ namespace Swift { QPointF point = this->mapToScene(event->pos()); QGraphicsEllipseItem* item = scene()->addEllipse(point.x(), point.y(), 0, 0, pen, brush); QString id = getNewID(); - items_.insert(id, item); - item->setZValue(zValue++); +// items_.append(item); +// item->setZValue(zValue++); + item->setZValue(10000000); item->setData(0, point); item->setData(100, id); + item->setData(101, items_.size()); lastItem = item; } else if (mode == HandLine) { QPointF point = this->mapToScene(event->pos()); FreehandLineItem* item = new FreehandLineItem; QString id = getNewID(); - items_.insert(id, item); +// items_.append(item); item->setPen(pen); item->setStartPoint(point); - item->setZValue(zValue++); +// item->setZValue(zValue++); + item->setZValue(10000000); item->setData(100, id); + item->setData(101, items_.size()); scene()->addItem(item); lastItem = item; } @@ -236,19 +266,22 @@ namespace Swift { QPainterPath path; QGraphicsPathItem* item = scene()->addPath(path, pen, brush); QString id = getNewID(); - items_.insert(id, item); - item->setZValue(zValue++); +// items_.append(item); +// item->setZValue(zValue++); + item->setZValue(10000000); item->setData(0, point); item->setData(100, id); + item->setData(101, items_.size()); lastItem = item; } else if (mode == Text) { QPointF point = this->mapToScene(event->pos()); QGraphicsTextItem* item = scene()->addText(""); QString id = getNewID(); - items_.insert(id, item); + items_.append(item); item->setZValue(zValue++); item->setData(100, id); + item->setData(101, items_.size()); item->setDefaultTextColor(pen.color()); textDialog = new TextDialog(item, this); connect(textDialog, SIGNAL(accepted(QGraphicsItem*)), this, SIGNAL(lastItemChanged(QGraphicsItem*))); @@ -266,9 +299,11 @@ namespace Swift { polygon.append(point); item = scene()->addPolygon(polygon, pen, brush); QString id = getNewID(); - items_.insert(id, item); - item->setZValue(zValue++); +// items_.append(item); +// item->setZValue(zValue++); + item->setZValue(10000000); item->setData(100, id); + item->setData(101, items_.size()); lastItem = item; } else { @@ -302,7 +337,17 @@ namespace Swift { void GView::mouseReleaseEvent(QMouseEvent *event) { mousePressed = false; - lastItemChanged(lastItem); + 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; + + lastItemChanged(lastItem, items_.size()); } |