/**
  * capital.cpp
  * Objekt krajskeho mesta v mape.
  *
  * @author Michala Capkova
  */

#include "capital.h"
#include "mapitemtypes.h"

#include <QPainter>

/**
  * konstruktor
  */
Capital::Capital(QPainterPath capital, QString name)
{
    this->mouse_hover = false;
    this->setFlag(ItemIsSelectable);
    this->setAcceptedMouseButtons(Qt::LeftButton);
    this->setAcceptHoverEvents(true);
    // tvar krajskeho mesta jsme precetli z gis souboru
    this->capital = capital;
    // nastavime nazev krajskeho mesta, funguje jako unikatni identifikator pro sparovani objektu se svym protejskem v seznamu objektu
    this->setData(0, name);
    // nastavime druh objektu v mape (pro odliseni aktivnich objektu od neaktivnich)
    // v urcitych vyukovych/testovacich modech chceme nektere objekty pouzit jako neaktivni podklad
    this->setData(1, CAPITAL);
}

/**
  * vykresluje krajske mesto
  */
void Capital::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    // osetreni varovani nepouzitych parametru
    Q_UNUSED(option);
    Q_UNUSED(widget);

    // urceni pera podle stavu objektu
    if(this->isSelected())
    {
        painter->setPen(QPen(Qt::red, SELECT_WIDTH, Qt::SolidLine));
    }
    else if(this->mouse_hover)
    {
        painter->setPen(QPen(Qt::blue, HOVER_WIDTH, Qt::SolidLine));
    }
    else
    {
        painter->setPen(QPen(Qt::darkGreen, ELSE_WIDTH, Qt::SolidLine));
    }
    painter->drawPath(capital);
}

/**
  * vraci obvodovy obdelnik krajskeho mesta v mape
  */
QRectF Capital::boundingRect() const
{
    return this->capital.boundingRect();
}

/**
  * vraci presny tvar krajskeho mesta v mape
  */
QPainterPath Capital::shape() const
{
    return this->capital;
}

/**
  * urcuje chovani krajskeho mesta pri vstupu kurzoru mysi do nej
  */
void Capital::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
    // osetreni varovani nepouzitych parametru
    Q_UNUSED(event);
    this->mouse_hover = true;
    this->update();
}

/**
  * urcuje chovani krajskeho mesta pri jeho opusteni kurzorem mysi
  */
void Capital::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
    // osetreni varovani nepouzitych parametru
    Q_UNUSED(event);
    this->mouse_hover = false;
    this->update();
}
