#ifndef MAPOBJ_H
#define MAPOBJ_H

#include <QGraphicsItem>

#include "xmlobj.h"

#define dZ_BBOX 0 // testing
#define dZ_SELBOX 5
#define dZ_FRAME_LOW 10
#define dZ_LINK 20
#define dZ_XLINK 40
#define dZ_FLOATIMG 70
#define dZ_ICON 80
#define dZ_TEXT 90
#define dZ_DEPTH 100
#define Z_SNOW 2000
#define Z_INIT 9999
#define Z_LINEEDIT 10000

class ConvexPolygon;

#include "treeitem.h"

/*! \brief Base class for all objects visible on a map
 */

class MapObj : public XMLObj, public QGraphicsItem {
  public:
    MapObj(QGraphicsItem *parent = NULL, TreeItem *ti = NULL);
    virtual ~MapObj();
    virtual void init();
    virtual void copy(MapObj *);

    virtual void setTreeItem(TreeItem *);
    virtual TreeItem *getTreeItem() const;

    virtual qreal x();
    virtual qreal y();
    virtual qreal width();
    virtual qreal height();
    virtual QPointF getAbsPos();
    virtual QString getPos();              //! Return position as string (x,y)
    virtual void move(double x, double y); //! move to absolute Position
    virtual void move(QPointF p);
    virtual void moveBy(double x, double y); //! move to relative Position

    virtual QRectF boundingRect() const;
    virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);

    virtual QRectF getBBox(); //! returns bounding box
    virtual ConvexPolygon
    getBoundingPolygon();                    //! return bounding convex polygon
    virtual QPolygonF getClickPoly();        //! returns polygon to click
    virtual QPainterPath getSelectionPath(); //! returns path for selection
    virtual bool isInClickBox(const QPointF &p); //! Checks if p is in clickBox
    virtual QSizeF getSize(); //! returns size of bounding box

    virtual void setRotation(const qreal &a);
    virtual qreal getRotation();
    virtual bool isVisibleObj();
    virtual void setVisibility(bool);
    virtual void positionBBox();
    virtual void calcBBoxSize();

  protected:
    QRectF bbox;         // bounding box of MO itself
    QPolygonF clickPoly; // area where mouseclicks are found
    QPointF absPos;      // Position on canvas
    bool visible;

    qreal angle; //! Rotation angle

    TreeItem *treeItem; //! Crossrefence to treemodel
};

#endif
