00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef KDCHARTLAYOUTITEMS_H
00027 #define KDCHARTLAYOUTITEMS_H
00028
00029 #include <QBrush>
00030 #include <QFont>
00031 #include <QFontMetricsF>
00032 #include <QLayout>
00033 #include <QLayoutItem>
00034 #include <QPen>
00035
00036 #include "KDChartTextAttributes.h"
00037 #include "KDChartMarkerAttributes.h"
00038
00039 class QPainter;
00040 class KDTextDocument;
00041
00042 namespace KDChart {
00043 class AbstractDiagram;
00044 class PaintContext;
00045
00050 class KDCHART_EXPORT AbstractLayoutItem : public QLayoutItem
00051 {
00052 public:
00053 AbstractLayoutItem( Qt::Alignment itemAlignment = 0 ) :
00054 QLayoutItem( itemAlignment ),
00055 mParent( 0 ),
00056 mParentLayout( 0 ) {}
00057
00064 virtual void paintAll( QPainter& painter );
00065
00066 virtual void paint( QPainter* ) = 0;
00067
00068 virtual void paintCtx( PaintContext* context );
00069 virtual void setParentWidget( QWidget* widget );
00070 virtual void sizeHintChanged()const;
00071
00072 void setParentLayout( QLayout* lay )
00073 {
00074 mParentLayout = lay;
00075 }
00076 QLayout* parentLayout()
00077 {
00078 return mParentLayout;
00079 }
00080 void removeFromParentLayout()
00081 {
00082 if( mParentLayout ){
00083 if( widget() )
00084 mParentLayout->removeWidget( widget() );
00085 else
00086 mParentLayout->removeItem( this );
00087 }
00088 }
00089 protected:
00090 QWidget* mParent;
00091 QLayout* mParentLayout;
00092 };
00093
00098 class KDCHART_EXPORT TextLayoutItem : public AbstractLayoutItem
00099 {
00100 public:
00101 TextLayoutItem();
00102 TextLayoutItem( const QString& text,
00103 const TextAttributes& attributes,
00104 const QObject* autoReferenceArea,
00105 KDChartEnums::MeasureOrientation autoReferenceOrientation,
00106 Qt::Alignment alignment = 0 );
00107
00108 void setAutoReferenceArea( const QObject* area );
00109 const QObject* autoReferenceArea() const;
00110
00111 void setText(const QString & text);
00112 QString text() const;
00113
00114 void setTextAttributes( const TextAttributes& a );
00115 TextAttributes textAttributes() const;
00116
00118 virtual bool isEmpty() const;
00120 virtual Qt::Orientations expandingDirections() const;
00122 virtual QSize maximumSize() const;
00124 virtual QSize minimumSize() const;
00126 virtual QSize sizeHint() const;
00128 virtual void setGeometry( const QRect& r );
00130 virtual QRect geometry() const;
00131
00132 virtual bool intersects( const TextLayoutItem& other, const QPointF& myPos, const QPointF& otherPos ) const;
00133 virtual bool intersects( const TextLayoutItem& other, const QPoint& myPos, const QPoint& otherPos ) const;
00134
00135 virtual qreal realFontSize() const;
00136 virtual QFont realFont() const;
00137
00138 virtual void paint( QPainter* );
00139
00140 private:
00141 QPolygon rotatedCorners() const;
00142 bool realFontWasRecalculated() const;
00143 QSize unrotatedSizeHint( QFont fnt = QFont() ) const;
00144 QSize calcSizeHint( QFont fnt ) const;
00145
00146 QRect mRect;
00147 QString mText;
00148 TextAttributes mAttributes;
00149 const QObject* mAutoReferenceArea;
00150 KDChartEnums::MeasureOrientation mAutoReferenceOrientation;
00151 mutable QSize cachedSizeHint;
00152 mutable qreal cachedFontSize;
00153 mutable QFont cachedFont;
00154 };
00155
00160 class KDCHART_EXPORT MarkerLayoutItem : public AbstractLayoutItem
00161 {
00162 public:
00163 MarkerLayoutItem( AbstractDiagram* diagram,
00164 const MarkerAttributes& marker,
00165 const QBrush& brush,
00166 const QPen& pen,
00167 Qt::Alignment alignment = 0 );
00168
00169 virtual Qt::Orientations expandingDirections() const;
00170 virtual QRect geometry() const;
00171 virtual bool isEmpty() const;
00172 virtual QSize maximumSize() const;
00173 virtual QSize minimumSize() const;
00174 virtual void setGeometry( const QRect& r );
00175 virtual QSize sizeHint() const;
00176
00177 virtual void paint( QPainter* );
00178
00179 static void paintIntoRect(
00180 QPainter* painter,
00181 const QRect& rect,
00182 AbstractDiagram* diagram,
00183 const MarkerAttributes& marker,
00184 const QBrush& brush,
00185 const QPen& pen );
00186
00187 private:
00188 AbstractDiagram* mDiagram;
00189 QRect mRect;
00190 MarkerAttributes mMarker;
00191 QBrush mBrush;
00192 QPen mPen;
00193 };
00194
00199 class KDCHART_EXPORT LineLayoutItem : public AbstractLayoutItem
00200 {
00201 public:
00202 LineLayoutItem( AbstractDiagram* diagram,
00203 int length,
00204 const QPen& pen,
00205 Qt::Alignment alignment = 0 );
00206
00207 virtual Qt::Orientations expandingDirections() const;
00208 virtual QRect geometry() const;
00209 virtual bool isEmpty() const;
00210 virtual QSize maximumSize() const;
00211 virtual QSize minimumSize() const;
00212 virtual void setGeometry( const QRect& r );
00213 virtual QSize sizeHint() const;
00214
00215 virtual void paint( QPainter* );
00216
00217 static void paintIntoRect(
00218 QPainter* painter,
00219 const QRect& rect,
00220 const QPen& pen );
00221
00222 private:
00223 AbstractDiagram* mDiagram;
00224 int mLength;
00225 QPen mPen;
00226 QRect mRect;
00227 };
00228
00233 class KDCHART_EXPORT LineWithMarkerLayoutItem : public AbstractLayoutItem
00234 {
00235 public:
00236 LineWithMarkerLayoutItem( AbstractDiagram* diagram,
00237 int lineLength,
00238 const QPen& linePen,
00239 int markerOffs,
00240 const MarkerAttributes& marker,
00241 const QBrush& markerBrush,
00242 const QPen& markerPen,
00243 Qt::Alignment alignment = 0 );
00244
00245 virtual Qt::Orientations expandingDirections() const;
00246 virtual QRect geometry() const;
00247 virtual bool isEmpty() const;
00248 virtual QSize maximumSize() const;
00249 virtual QSize minimumSize() const;
00250 virtual void setGeometry( const QRect& r );
00251 virtual QSize sizeHint() const;
00252
00253 virtual void paint( QPainter* );
00254
00255 private:
00256 AbstractDiagram* mDiagram;
00257 QRect mRect;
00258 int mLineLength;
00259 QPen mLinePen;
00260 int mMarkerOffs;
00261 MarkerAttributes mMarker;
00262 QBrush mMarkerBrush;
00263 QPen mMarkerPen;
00264 };
00265
00266
00271 class KDCHART_EXPORT HorizontalLineLayoutItem : public AbstractLayoutItem
00272 {
00273 public:
00274 HorizontalLineLayoutItem();
00275
00276 virtual Qt::Orientations expandingDirections() const;
00277 virtual QRect geometry() const;
00278 virtual bool isEmpty() const;
00279 virtual QSize maximumSize() const;
00280 virtual QSize minimumSize() const;
00281 virtual void setGeometry( const QRect& r );
00282 virtual QSize sizeHint() const;
00283
00284 virtual void paint( QPainter* );
00285
00286 private:
00287 QRect mRect;
00288 };
00289
00294 class KDCHART_EXPORT VerticalLineLayoutItem : public AbstractLayoutItem
00295 {
00296 public:
00297 VerticalLineLayoutItem();
00298
00299 virtual Qt::Orientations expandingDirections() const;
00300 virtual QRect geometry() const;
00301 virtual bool isEmpty() const;
00302 virtual QSize maximumSize() const;
00303 virtual QSize minimumSize() const;
00304 virtual void setGeometry( const QRect& r );
00305 virtual QSize sizeHint() const;
00306
00307 virtual void paint( QPainter* );
00308
00309 private:
00310 QRect mRect;
00311 };
00312
00383 class KDCHART_EXPORT AutoSpacerLayoutItem : public AbstractLayoutItem
00384 {
00385 public:
00386 AutoSpacerLayoutItem(
00387 bool layoutIsAtTopPosition, QHBoxLayout *rightLeftLayout,
00388 bool layoutIsAtLeftPosition, QVBoxLayout *topBottomLayout );
00389
00390 virtual Qt::Orientations expandingDirections() const;
00391 virtual QRect geometry() const;
00392 virtual bool isEmpty() const;
00393 virtual QSize maximumSize() const;
00394 virtual QSize minimumSize() const;
00395 virtual void setGeometry( const QRect& r );
00396 virtual QSize sizeHint() const;
00397
00398 virtual void paint( QPainter* );
00399
00400 private:
00401 QRect mRect;
00402 bool mLayoutIsAtTopPosition;
00403 QHBoxLayout *mRightLeftLayout;
00404 bool mLayoutIsAtLeftPosition;
00405 QVBoxLayout *mTopBottomLayout;
00406
00407 mutable QBrush mCommonBrush;
00408 mutable QSize mCachedSize;
00409 };
00410
00411 }
00412
00413 #endif