diff options
Diffstat (limited to 'Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h')
-rw-r--r-- | Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h | 128 |
1 files changed, 83 insertions, 45 deletions
diff --git a/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h b/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h index d9809b5..fc28c6f 100644 --- a/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h +++ b/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h @@ -18,58 +18,90 @@ namespace Swift { class WhiteboardElementDrawingVisitor : public WhiteboardElementVisitor { public: - WhiteboardElementDrawingVisitor(GView* graphicsView, int pos) : graphicsView_(graphicsView), pos_(pos) {} + WhiteboardElementDrawingVisitor(GView* graphicsView, int pos, GView::Type type) : graphicsView_(graphicsView), pos_(pos), type_(type) {} void visit(WhiteboardLineElement& element) { - QGraphicsLineItem *item = new QGraphicsLineItem(element.x1(), element.y1(), element.x2(), element.y2()); - QPen pen; - Color color = element.getColor(); - pen.setColor(QColor(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha())); - pen.setWidth(element.getPenWidth()); - item->setPen(pen); - QString id = P2QSTRING(element.getID()); - item->setData(100, id); - graphicsView_->addItem(item, id, pos_); + QGraphicsLineItem *item; + if (type_ == GView::New) { + item = new QGraphicsLineItem(element.x1(), element.y1(), element.x2(), element.y2()); + graphicsView_->addItem(item, P2QSTRING(element.getID()), pos_); + } else { + item = qgraphicsitem_cast<QGraphicsLineItem*>(graphicsView_->getItem(P2QSTRING(element.getID()))); + QLineF line(element.x1(), element.y1(), element.x2(), element.y2()); + item->setLine(line); + item->setPos(0,0); + } + if (item) { + QPen pen; + Color color = element.getColor(); + pen.setColor(QColor(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha())); + pen.setWidth(element.getPenWidth()); + item->setPen(pen); + QString id = P2QSTRING(element.getID()); + item->setData(100, id); + } } void visit(WhiteboardFreehandPathElement& element) { - FreehandLineItem *item = new FreehandLineItem; - QPen pen; - Color color = element.getColor(); - pen.setColor(QColor(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha())); - pen.setWidth(element.getPenWidth()); - item->setPen(pen); - - std::vector<std::pair<int, int> >::const_iterator it = element.getPoints().begin(); - item->setStartPoint(QPointF(it->first, it->second)); - for (++it; it != element.getPoints().end(); ++it) { - item->lineTo(QPointF(it->first, it->second)); + FreehandLineItem *item; + if (type_ == GView::New) { + item = new FreehandLineItem; + } else { + item = qgraphicsitem_cast<FreehandLineItem*>(graphicsView_->getItem(P2QSTRING(element.getID()))); + item->setPos(0,0); } - QString id = P2QSTRING(element.getID()); - item->setData(100, id); - graphicsView_->addItem(item, id, pos_); + if (item) { + QPen pen; + Color color = element.getColor(); + pen.setColor(QColor(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha())); + pen.setWidth(element.getPenWidth()); + item->setPen(pen); + + std::vector<std::pair<int, int> >::const_iterator it = element.getPoints().begin(); + item->setStartPoint(QPointF(it->first, it->second)); + for (++it; it != element.getPoints().end(); ++it) { + item->lineTo(QPointF(it->first, it->second)); + } + + QString id = P2QSTRING(element.getID()); + item->setData(100, id); + } + if (type_ == GView::New) { + graphicsView_->addItem(item, P2QSTRING(element.getID()), pos_); + } } void visit(WhiteboardRectElement& element) { - QGraphicsRectItem* item = new QGraphicsRectItem(element.getX(), element.getY(), element.getWidth(), element.getHeight()); - QPen pen; - QBrush brush(Qt::SolidPattern); - Color penColor = element.getPenColor(); - Color brushColor = element.getBrushColor(); - pen.setColor(QColor(penColor.getRed(), penColor.getGreen(), penColor.getBlue(), penColor.getAlpha())); - pen.setWidth(element.getPenWidth()); - brush.setColor(QColor(brushColor.getRed(), brushColor.getGreen(), brushColor.getBlue(), brushColor.getAlpha())); - item->setPen(pen); - item->setBrush(brush); - QString id = P2QSTRING(element.getID()); - item->setData(100, id); - graphicsView_->addItem(item, id, pos_); + QGraphicsRectItem* item; + if (type_ == GView::New) { + item = new QGraphicsRectItem(element.getX(), element.getY(), element.getWidth(), element.getHeight()); + graphicsView_->addItem(item, P2QSTRING(element.getID()), pos_); + } else { + item = qgraphicsitem_cast<QGraphicsRectItem*>(graphicsView_->getItem(P2QSTRING(element.getID()))); + QRectF rect(element.getX(), element.getY(), element.getWidth(), element.getHeight()); + item->setRect(rect); + item->setPos(0,0); + } + + if (item) { + QPen pen; + QBrush brush(Qt::SolidPattern); + Color penColor = element.getPenColor(); + Color brushColor = element.getBrushColor(); + pen.setColor(QColor(penColor.getRed(), penColor.getGreen(), penColor.getBlue(), penColor.getAlpha())); + pen.setWidth(element.getPenWidth()); + brush.setColor(QColor(brushColor.getRed(), brushColor.getGreen(), brushColor.getBlue(), brushColor.getAlpha())); + item->setPen(pen); + item->setBrush(brush); + QString id = P2QSTRING(element.getID()); + item->setData(100, id); + } } void visit(WhiteboardPolygonElement& element) { - /* QGraphicsPolygonItem* item = qgraphicsitem_cast<QGraphicsPolygonItem*>(graphicsView_->getItem(P2QSTRING(element.getID()))); - if (item == 0) { + QGraphicsPolygonItem* item = qgraphicsitem_cast<QGraphicsPolygonItem*>(graphicsView_->getItem(P2QSTRING(element.getID()))); + if (item == 0 && type_ == GView::New) { item = new QGraphicsPolygonItem(); QPen pen; QBrush brush(Qt::SolidPattern); @@ -89,7 +121,7 @@ namespace Swift { for (; it != element.getPoints().end(); ++it) { polygon.append(QPointF(it->first, it->second)); } - item->setPolygon(polygon);*/ + item->setPolygon(polygon); } void visit(WhiteboardTextElement& element) { @@ -108,11 +140,18 @@ namespace Swift { void visit(WhiteboardEllipseElement& element) { QRectF rect; - + QGraphicsEllipseItem* item; + QString id = P2QSTRING(element.getID()); rect.setTopLeft(QPointF(element.getCX()-element.getRX(), element.getCY()-element.getRY())); rect.setBottomRight(QPointF(element.getCX()+element.getRX(), element.getCY()+element.getRY())); - - QGraphicsEllipseItem* item = new QGraphicsEllipseItem(rect); + if (type_ == GView::New) { + item = new QGraphicsEllipseItem(rect); + graphicsView_->addItem(item, id, pos_); + } else { + item = qgraphicsitem_cast<QGraphicsEllipseItem*>(graphicsView_->getItem(id)); + item->setRect(rect); + item->setPos(0,0); + } QPen pen; QBrush brush(Qt::SolidPattern); Color penColor = element.getPenColor(); @@ -122,13 +161,12 @@ namespace Swift { brush.setColor(QColor(brushColor.getRed(), brushColor.getGreen(), brushColor.getBlue(), brushColor.getAlpha())); item->setPen(pen); item->setBrush(brush); - QString id = P2QSTRING(element.getID()); item->setData(100, id); - graphicsView_->addItem(item, id, pos_); } private: GView* graphicsView_; int pos_; + GView::Type type_; }; } |