graphic_items.h

Go to the documentation of this file.
00001 
00023 #ifndef GRAPHIC_ITEMS_H
00024 #define GRAPHIC_ITEMS_H
00025 
00026 #include <QtGui>
00027 
00028 #include "module_interface.h"
00029 
00030 class GraphicFactory : public ModuleFactory
00031 {
00032         public:
00033                 GraphicFactory() : ModuleFactory("graphics", "Standard Graphic Items") {};
00034                 void init();
00035                 inline ModulType type() { return ModuleFactory::NoPlugin; }
00036                 ModuleInterface* create(const QString&);
00037 };
00038 
00039 class GraphicItem : public PluginInterface, public QGraphicsItem
00040 {
00041         Q_OBJECT
00042         Q_PROPERTY(QPointF pos READ pos WRITE setPos)
00043         Q_PROPERTY(qreal zvalue READ zValue WRITE setZValue)
00044         Q_PROPERTY(qreal rotate READ rotate WRITE setRotate)
00045         Q_PROPERTY(qreal scale READ scale WRITE setScale)
00046         Q_PROPERTY(qreal shear READ shear WRITE setShear)
00047 
00048         private slots:
00049                 void updateTimeline(qreal);
00050                 void forwards();
00051                 void front();
00052                 void backwards();
00053                 void back();
00054 
00055         public:
00056                 GraphicItem();
00057                 bool init();
00058 
00059                 void setRotate(qreal);
00060                 void setScale(qreal);
00061                 void setShear(qreal);
00062 
00063                 inline QMenu* contextMenu() { return &m_contextMenu; }
00064                 inline qreal rotate() { return m_rotation; }
00065                 inline qreal scale() { return m_scale; }
00066                 inline qreal shear() { return m_shear; }
00067 
00068         protected:
00069                 void drawDecoration(QPainter*, const QRectF&, const QStyleOptionGraphicsItem*);
00070                 QRectF calcBoundingRect(const QRectF&) const;
00071 
00072                 void mousePressEvent(QGraphicsSceneMouseEvent*);
00073                 void mouseReleaseEvent(QGraphicsSceneMouseEvent*);
00074                 void mouseMoveEvent(QGraphicsSceneMouseEvent*);
00075                 void hoverMoveEvent(QGraphicsSceneHoverEvent*);
00076 
00077         private:
00078                 enum Segment { NoSegment, TopLeftSegment, TopRightSegment, BottomLeftSegment, BottomRightSegment, NumSegments };
00079                 QRectF rectForSegment(Segment) const;
00080                 bool isPointInSegment(const QPointF&, Segment);
00081 
00082                 QMenu m_contextMenu;
00083                 const QSizeF segmentSize;
00084                 QRectF m_boundingRect;
00085                 bool m_grabbed;
00086                 qreal m_opacity;
00087                 qreal m_rotation;
00088                 qreal m_newRotation;
00089                 qreal m_scale;
00090                 qreal m_newScale;
00091                 qreal m_shear;
00092                 QTimeLine m_timeline;
00093 };
00094 
00095 class GraphicStandardItem : public GraphicItem
00096 {
00097         Q_OBJECT
00098         Q_PROPERTY(QPen pen READ pen WRITE setPen)
00099         Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
00100 
00101         public:
00102                 bool init();
00103                 inline void setBrush(const QBrush& brush){ m_brush = brush; }
00104                 inline void setPen(const QPen& pen) { m_pen = pen;  }
00105 
00106                 inline QBrush brush() const { return m_brush; }
00107                 inline QPen pen() const { return m_pen; }
00108 
00109         private:
00110                 QPen m_pen;
00111                 QBrush m_brush;
00112 };
00113 
00114 class GraphicLine : public GraphicStandardItem
00115 {
00116         Q_OBJECT
00117         Q_PROPERTY(QLineF line READ line WRITE setLine)
00118 
00119         public:
00120                 bool init();
00121                 void paint(QPainter*, const QStyleOptionGraphicsItem* , QWidget* widget = 0);
00122                 QRectF boundingRect() const;
00123                 inline QGraphicsItem* graphicsItem(){ return this; }
00124 
00125                 inline void setLine(const QLineF& line) { prepareGeometryChange(); m_line = line; }
00126                 inline QLineF line() const { return m_line; }
00127 
00128         private:
00129                 QLineF m_line;
00130 };
00131 
00132 class GraphicRectangle : public GraphicStandardItem
00133 {
00134         Q_OBJECT
00135         Q_PROPERTY(QRectF rect READ rect WRITE setRect)
00136 
00137         public:
00138                 bool init();
00139                 void paint(QPainter*, const QStyleOptionGraphicsItem* , QWidget* widget = 0);
00140                 QRectF boundingRect() const;
00141                 inline QGraphicsItem* graphicsItem(){ return this; }
00142                 inline void setRect(const QRectF& rect) { prepareGeometryChange(); m_rect = rect; }
00143                 inline QRectF rect() const { return m_rect; }
00144 
00145         private:
00146                 QRectF m_rect;
00147 };
00148 
00149 class GraphicEllipse : public GraphicStandardItem
00150 {
00151         Q_OBJECT
00152         Q_PROPERTY(QRectF rect READ rect WRITE setRect)
00153         Q_PROPERTY(int startangle READ startAngle WRITE setStartAngle)
00154         Q_PROPERTY(int spanangle READ spanAngle WRITE setSpanAngle)
00155 
00156         public:
00157                 bool init();
00158                 void paint(QPainter*, const QStyleOptionGraphicsItem* , QWidget* widget = 0);
00159                 QRectF boundingRect() const;
00160                 inline QGraphicsItem* graphicsItem(){ return this; }
00161                 inline void setRect(const QRectF& rect) { prepareGeometryChange(); m_rect = rect; }
00162                 inline void setStartAngle(int startAngle) { m_startAngle = startAngle;  }
00163                 inline void setSpanAngle(int spanAngle) { m_spanAngle = spanAngle;  }
00164 
00165                 inline QRectF rect() const { return m_rect; }
00166                 inline int startAngle() { return m_startAngle; }
00167                 inline int spanAngle() { return m_spanAngle; }
00168 
00169         private:
00170                 QRectF m_rect;
00171                 int m_startAngle;
00172                 int m_spanAngle;
00173 };
00174 
00175 class GraphicPolygon : public GraphicStandardItem
00176 {
00177         Q_OBJECT
00178         Q_PROPERTY(QPolygon polygon READ polygon WRITE setPolygon)
00179 
00180         public:
00181                 bool init();
00182                 void paint(QPainter*, const QStyleOptionGraphicsItem* , QWidget* widget = 0);
00183                 QRectF boundingRect() const;
00184                 inline QGraphicsItem* graphicsItem(){ return this; }
00185                 inline void setPolygon(const QPolygon& polygon) { prepareGeometryChange(); m_polygon = polygon; }
00186                 inline QPolygon polygon() const { return m_polygon; }
00187                 void addPoint(const QPoint&);
00188 
00189         private:
00190                 QPolygon m_polygon;
00191 
00192 };
00193 
00194 class GraphicPixmap : public GraphicItem
00195 {
00196         Q_OBJECT
00197         Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
00198         Q_PROPERTY(QSize size READ size WRITE setSize)
00199         Q_PROPERTY(bool invert READ invert WRITE setInvert)
00200         Q_PROPERTY(DitherStatus dither READ dither WRITE setDither)
00201         Q_PROPERTY(RatioStatus ratio READ ratio WRITE setRatio)
00202         Q_ENUMS(DitherStatus)
00203         Q_ENUMS(RatioStatus)
00204 
00205         public:
00206                 enum DitherStatus { DiffuseDither, OrderedDither, ThresholdDither };
00207                 enum RatioStatus { IgnoreAspectRatio, KeepAspectRatio, KeepAspectRatioByExpanding };
00208                 bool init();
00209                 void paint(QPainter*, const QStyleOptionGraphicsItem* , QWidget* widget = 0);
00210                 QRectF boundingRect() const;
00211                 inline QGraphicsItem* graphicsItem(){ return this; }
00212                 void setPixmap(const QPixmap&);
00213                 void setSize(const QSize&);
00214                 void setInvert(bool);
00215                 void setDither(DitherStatus);
00216                 void setRatio(RatioStatus);
00217                 void setPath(const QString&);
00218                 inline QPixmap pixmap() const { return m_pixmap; }
00219                 inline QString path() const { return m_path; }
00220                 inline QSize size() const { return m_size; }
00221                 inline bool invert() { return m_invert; }
00222                 inline DitherStatus dither() { return m_dither; }
00223                 inline RatioStatus ratio() { return m_ratio; }
00224 
00225         private:
00226                 void updatePixmap();
00227 
00228                 DitherStatus m_dither;
00229                 RatioStatus m_ratio;
00230                 QPixmap m_pixmap;
00231                 QPixmap m_tmpPixmap;
00232                 QSize m_size;
00233                 QString m_path;
00234                 bool m_invert;
00235 };
00236 
00237 class GraphicText : public GraphicItem
00238 {
00239         Q_OBJECT
00240         Q_PROPERTY(QString text READ text WRITE setText)
00241         Q_PROPERTY(qreal textwidth READ textWidth WRITE setTextWidth)
00242         Q_PROPERTY(QFont font READ font WRITE setFont)
00243         Q_PROPERTY(TextType texttype READ textType WRITE setTextType)
00244         Q_ENUMS(TextType)
00245 
00246         public:
00247                 enum TextType { PlainText, HtmlText };
00248                 bool init();
00249                 void paint(QPainter*, const QStyleOptionGraphicsItem* , QWidget* widget = 0);
00250                 QRectF boundingRect() const;
00251                 inline QGraphicsItem* graphicsItem(){ return this; }
00252                 void setText(const QString&);
00253                 inline void setFont(const QFont& font) { m_doc.setDefaultFont(font);  }
00254                 inline void setTextWidth(qreal textwidth) { prepareGeometryChange(); m_doc.setTextWidth(textwidth); }
00255                 void setTextType(TextType);
00256 
00257                 inline QString text() const { return m_text; }
00258                 inline QFont font() const { return m_doc.defaultFont(); }
00259                 inline qreal textWidth() { return m_doc.textWidth(); }
00260                 inline TextType textType() { return m_type; }
00261 
00262         private:
00263                 QTextDocument m_doc;
00264 
00265                 QString m_text;
00266                 TextType m_type;
00267 };
00268 
00269 #endif

Generated on Thu Apr 5 13:06:31 2007 for LCDBuilder by  doxygen 1.4.7