summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/Whiteboard/GView.cpp')
-rw-r--r--Swift/QtUI/Whiteboard/GView.cpp85
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());
}