#include <QPainter>
#include <QStyle>
#include <QVector>
#include "mygraphicspolylineitem.h"


// konstruktor
MyGraphicsPolylineItem::MyGraphicsPolylineItem(QGraphicsItem *parent)
    : QGraphicsItem(parent)
{
}

MyGraphicsPolylineItem::MyGraphicsPolylineItem(const MyGraphicsPolylineItem &obj)
{
    polyline = obj.polyline;
    pen = obj.pen;
}

QRectF MyGraphicsPolylineItem::boundingRect() const
{
    if (polyline.size() < 2)
        return QRectF(0,0,0,0);

    qreal penwidth = pen.widthF();

    std::vector<QPointF>::const_iterator polylineiterator;

    qreal x, y;

    qreal max_x = polyline[0].x();
    qreal min_x = polyline[0].x();
    qreal max_y = polyline[0].y();
    qreal min_y = polyline[0].y();

    for(polylineiterator = polyline.begin(); polylineiterator != polyline.end(); polylineiterator++)
    {
        QPointF point  = *polylineiterator;
        x = point.x();
        y = point.y();

        if (x > max_x) max_x = x;
        if (x < min_x) min_x = x;
        if (y > max_y) max_y = y;
        if (y < min_y) min_y = y;
    }

    return QRectF((min_x - (penwidth/2)), (min_y - (penwidth/2)), (max_x - min_x + penwidth), (max_y - min_y + penwidth));
}


void MyGraphicsPolylineItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    //Q_D(MyGraphicsPolylineItem);
    Q_UNUSED(widget);
    painter->setPen(pen);

    //painter->drawLine(d->line);
    //static const QPointF points[] = {}
   //painter->drawLines(QVector<QPointF>::fromStdVector(polyline));

    QPointF points[polyline.size()];

    for (int i = 0; i<polyline.size(); i++)
    {
        points[i] = polyline[i];
    }

    painter->drawPolyline(points, polyline.size());

//    if (option->state & QStyle::State_Selected)
//        qt_graphicsItem_highlightSelected(this, painter, option);
}

QPen MyGraphicsPolylineItem::getPen() const
{
    return pen;
}
