#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
    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 QUuid findSystemFlagUidByPos(const QPointF &p);
    virtual QRectF getBBoxSystemFlagByUid(const QUuid &u);

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

#endif
