/* * Copyright (c) 2012 Mateusz Piękos * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #pragma once #include #include #include #include #include #include #include #include namespace Swift { class WhiteboardElementDrawingVisitor : public WhiteboardElementVisitor { public: WhiteboardElementDrawingVisitor(GView* graphicsView) : graphicsView_(graphicsView) {} 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); } 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 >::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); graphicsView_->addItem(item, id); } 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); } void visit(WhiteboardPolygonElement& element) { QGraphicsPolygonItem* item = qgraphicsitem_cast(graphicsView_->getItem(P2QSTRING(element.getID()))); if (item == 0) { item = new QGraphicsPolygonItem(); 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); } QPolygonF polygon; std::vector >::const_iterator it = element.getPoints().begin(); for (; it != element.getPoints().end(); ++it) { polygon.append(QPointF(it->first, it->second)); } item->setPolygon(polygon); } void visit(WhiteboardTextElement& element) { QGraphicsTextItem* item = new QGraphicsTextItem(P2QSTRING(element.getText())); item->setPos(QPointF(element.getX(), element.getY())); QFont font = item->font(); font.setPointSize(element.getSize()); item->setFont(font); Color color = element.getColor(); item->setDefaultTextColor(QColor(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha())); QString id = P2QSTRING(element.getID()); item->setData(100, id); graphicsView_->addItem(item, id); } void visit(WhiteboardEllipseElement& element) { QRectF rect; 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); 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); } private: GView* graphicsView_; }; }