#ifndef BOUNDINGRECTHIGHLIGHTER_H #define BOUNDINGRECTHIGHLIGHTER_H #include #include #include "layeritem.h" QT_FORWARD_DECLARE_CLASS(QGraphicsItem); QT_FORWARD_DECLARE_CLASS(QPainter); QT_FORWARD_DECLARE_CLASS(QWidget); QT_FORWARD_DECLARE_CLASS(QStyleOptionGraphicsItem); QT_FORWARD_DECLARE_CLASS(QTimer); namespace QmlViewer { class QDeclarativeDesignView; class BoundingBox; class BoundingRectHighlighter : public LayerItem { Q_OBJECT public: explicit BoundingRectHighlighter(QDeclarativeDesignView *view); ~BoundingRectHighlighter(); void clear(); void highlight(QList items); void highlight(QGraphicsObject* item); private slots: void refresh(); void animTimeout(); void itemDestroyed(QObject *); private: BoundingBox *boxFor(QGraphicsObject *item) const; void highlightAll(bool animate); BoundingBox *createBoundingBox(QGraphicsObject *itemToHighlight); void removeBoundingBox(BoundingBox *box); void freeBoundingBox(BoundingBox *box); private: Q_DISABLE_COPY(BoundingRectHighlighter); QDeclarativeDesignView *m_view; QList m_boxes; QList m_freeBoxes; QTimer *m_animTimer; qreal m_animScale; int m_animFrame; }; class BoundingBox : public QObject { Q_OBJECT public: explicit BoundingBox(QGraphicsObject *itemToHighlight, QGraphicsItem *parentItem, QObject *parent = 0); ~BoundingBox(); QWeakPointer highlightedObject; QGraphicsPolygonItem *highlightPolygon; QGraphicsPolygonItem *highlightPolygonEdge; private: Q_DISABLE_COPY(BoundingBox); }; class BoundingBoxPolygonItem : public QGraphicsPolygonItem { public: explicit BoundingBoxPolygonItem(QGraphicsItem *item); int type() const; }; } // namespace QmlViewer #endif // BOUNDINGRECTHIGHLIGHTER_H