#ifndef ORNAMENTEDOBJ_H
#define ORNAMENTEDOBJ_H

#include "frameobj.h"
#include "linkablemapobj.h"

class TreeItem;

/*! \brief Adds various ornaments and data to the class LinkableMapObj

The ornaments are:
    - frame
    - note
    - references
    - flags
    - standard flags
    - system flags
 */
//    - attributes (key/value pairs)  

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

    virtual void setLinkColor();	// sets color according to colorhint, overloaded
    virtual void setColor(QColor);	// set the color of text and link
    QColor getColor ();		    // get color of heading
    QRectF getBBoxHeading();

    virtual void setRotation (const qreal &a);
    virtual FrameObj* getFrame();
    virtual FrameObj::FrameType getFrameType ();
    virtual QString getFrameTypeName ();
    virtual void setFrameType (const FrameObj::FrameType &);
    virtual void setFrameType (const QString &);
    virtual void setFramePadding (const int &);
    virtual int  getFramePadding ();
    virtual void setFrameBorderWidth(const int &);
    virtual int  getFrameBorderWidth ();
    virtual void setFramePenColor (QColor);
    virtual QColor getFramePenColor ();
    virtual void setFrameBrushColor (QColor);
    virtual QColor getFrameBrushColor ();
    virtual void setFrameIncludeChildren (bool);
    virtual bool getFrameIncludeChildren ();
    virtual QRectF getOrnamentsBBox();

    virtual void positionContents();
    virtual void move   (double,double);
    virtual void move   (QPointF);
    virtual void moveBy (double,double);
    virtual void moveBy (QPointF);
    virtual void move2RelPos (QPointF);	    // move relativly to parent^
    virtual void move2RelPos (double,double);

    virtual void activateStandardFlag(Flag *flag);
    virtual void deactivateStandardFlag(const QString &name);
    virtual QString getSystemFlagName (const QPointF &p);
    virtual QRectF getBBoxFlag (const QString &name);

protected:
    HeadingObj *heading;	// Heading
    FlagRowObj *systemFlags;	    // System Flags
    FlagRowObj *standardFlags;	    // Standard Flags
    FrameObj *frame;		// frame around object
    QRectF ornamentsBBox;	// bbox of flags and heading
};

#endif
