/**
  * region.cpp
  * Objekt kraje v mape.
  *
  * @author Michala Capkova
  */

#include "region.h"
#include "mapitemtypes.h"

#include <QPainter>

/**
  * konstruktor
  */
Region::Region(QPainterPath region, QString name)
{
    this->mouse_hover = false;
    this->setFlag(ItemIsSelectable);
    this->setAcceptedMouseButtons(Qt::LeftButton);
    this->setAcceptHoverEvents(true);
    // tvar kraje jsme precetli z gis souboru
    this->region = region;
    // nastavime nazev kraje, 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, REGION);
}

/**
  * vykresluje kraj
  */
void Region::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::black, ELSE_WIDTH, Qt::SolidLine));
    }
    painter->drawPath(region);
}

/**
    metoda urcuje obvodovy obdelnik objektu
*/
QRectF Region::boundingRect() const
{
    return this->region.boundingRect();
}

/**
  * vraci presny tvar kraje v mape
  */
QPainterPath Region::shape() const
{
    return this->region;
}

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

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