#ifndef MAPOBJ_H
#define MAPOBJ_H

#include <QGraphicsItem>

#include "xmlobj.h"

#define dZ_BBOX         0   // testing
#define dZ_DEPTH      100
#define dZ_FRAME_LOW   10	
#define dZ_LINK        20
#define dZ_XLINK       40
#define dZ_SELBOX      60
#define dZ_FLOATIMG    70
#define dZ_ICON        80
#define dZ_TEXT        90
#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 getClickPath();	//! returns path to click
    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

    QGraphicsPolygonItem *boundingPolygon;	//FIXME-3 testing only
};

#endif
