#ifndef BLOCKBASE_H
#define BLOCKBASE_H

#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsItem>
#include <QGraphicsObject>
#include <QGraphicsEllipseItem>
#include <QGraphicsSceneHoverEvent>
#include <QGraphicsSceneMouseEvent>
#include <QStack>
#include "qad_types.h"


/// data:
/// 1002 - flag for move parent (true)
/// 1003 - flag for visualize selection (true)
/// 1004 - BlockItemPin ("pin")
/// 1005 - BlockBusItem ("connection")
/// 1006 - BlockItem ("item")
/// 1007 - BlockItem selection (true)
/// 1008 - item is NOT decor, ignore for function decors() (true)
/// 1009 - item is scene decor ("decor")
/// 1010 - BlockItem decor (src text for QGraphicsSimpleTextItem)
/// 1011 - item is BlockItem decor (true)
/// 1100 - flag for correct move (true)

static const int _blockitem_current_version_ = 1;


enum BlockviewItemData {
	bvidSelected = 1000, // bool
	bvidItemPos = 1001, // QpointF
	bvidMoveParent = 1002, // bool
	bvidVisualizeSelection = 1003, // bool
	bvidType = 1005, // BlockviewItemType
	bvidInvalidItem = 1008, // bool
	bvidDecorText = 1010, // QString
	bvidBlockDecor = 1011, // bool
	bvidDTHandle = 1012, // bool
	bvidCorrectMove = 1100, // bool
};

enum BlockviewItemType {
	bvitPin,
	bvitBus,
	bvitBlock,
	bvitSelection,
	bvitDecor,
	bvitItemText,
};

QAD_EXPORT QDataStream & operator <<(QDataStream & s, const QGraphicsItem * item);
QAD_EXPORT QDataStream & operator >>(QDataStream & s, QGraphicsItem *& item);


class QAD_EXPORT BlockItemBase: public QObject
{
	Q_OBJECT
	Q_ENUMS(Action)
public:
	
	enum Action {
		BlockAdd = 1,
		BlockMove,
		BlockRemove,
		BlockCopy,
		BusAdd,
		BusRemove,
		BusPointAdd,
		BusPointMove,
		BusPointRemove,
		BusSegmentAdd,
		BusSegmentMove,
		BusSegmentRemove,
		Paste
	};
	
};

#endif // BLOCKBASE_H
