00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef KDCHARTLAYOUTITEMS_H
00024 #define KDCHARTLAYOUTITEMS_H
00025
00026 #include <QBrush>
00027 #include <QFont>
00028 #include <QFontMetricsF>
00029 #include <QLayout>
00030 #include <QLayoutItem>
00031 #include <QPen>
00032
00033 #include "KDChartTextAttributes.h"
00034 #include "KDChartMarkerAttributes.h"
00035
00036 class QPainter;
00037 class KDTextDocument;
00038
00039 QPointF rotatedPoint( const QPointF& pt, qreal rotation, const QPointF& center = QPointF() );
00040 QRectF rotatedRect( const QRectF& pt, qreal rotation, const QPointF& center = QPointF() );
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 setTextAlignment( Qt::Alignment );
00115 Qt::Alignment textAlignment() const;
00116
00117 void setTextAttributes( const TextAttributes& a );
00118 TextAttributes textAttributes() const;
00119
00121 virtual bool isEmpty() const;
00123 virtual Qt::Orientations expandingDirections() const;
00125 virtual QSize maximumSize() const;
00127 virtual QSize minimumSize() const;
00129 virtual QSize sizeHint() const;
00131 virtual void setGeometry( const QRect& r );
00133 virtual QRect geometry() const;
00134
00135 virtual QSize sizeHintAndRotatedCorners(
00136 QPoint& topLeftPt, QPoint& topRightPt, QPoint& bottomRightPt, QPoint& bottomLeftPt) const;
00137 virtual QSize sizeHintUnrotated() const;
00138
00139 virtual bool intersects( const TextLayoutItem& other, const QPointF& myPos, const QPointF& otherPos ) const;
00140 virtual bool intersects( const TextLayoutItem& other, const QPoint& myPos, const QPoint& otherPos ) const;
00141
00142 virtual qreal realFontSize() const;
00143 virtual QFont realFont() const;
00144
00145 virtual void paint( QPainter* );
00146
00147 private:
00148 QPolygon rotatedCorners() const;
00149 bool realFontWasRecalculated() const;
00150 QSize unrotatedSizeHint( QFont fnt = QFont() ) const;
00151 QSize calcSizeHint( QFont fnt,
00152 QPoint& topLeftPt, QPoint& topRightPt, QPoint& bottomRightPt, QPoint& bottomLeftPt ) const;
00153
00154 qreal fitFontSizeToGeometry() const;
00155
00156 QRect mRect;
00157 QString mText;
00158 Qt::Alignment mTextAlignment;
00159 TextAttributes mAttributes;
00160 const QObject* mAutoReferenceArea;
00161 KDChartEnums::MeasureOrientation mAutoReferenceOrientation;
00162 mutable QSize cachedSizeHint;
00163 mutable QPoint cachedTopLeft;
00164 mutable QPoint cachedTopRight;
00165 mutable QPoint cachedBottomRight;
00166 mutable QPoint cachedBottomLeft;
00167 mutable qreal cachedFontSize;
00168 mutable QFont cachedFont;
00169 };
00170
00171 class KDCHART_EXPORT TextBubbleLayoutItem : public AbstractLayoutItem
00172 {
00173 public:
00174 TextBubbleLayoutItem();
00175 TextBubbleLayoutItem( const QString& text,
00176 const TextAttributes& attributes,
00177 const QObject* autoReferenceArea,
00178 KDChartEnums::MeasureOrientation autoReferenceOrientation,
00179 Qt::Alignment alignment = 0 );
00180
00181 ~TextBubbleLayoutItem();
00182
00183 void setAutoReferenceArea( const QObject* area );
00184 const QObject* autoReferenceArea() const;
00185
00186 void setText(const QString & text);
00187 QString text() const;
00188
00189 void setTextAttributes( const TextAttributes& a );
00190 TextAttributes textAttributes() const;
00191
00193 virtual bool isEmpty() const;
00195 virtual Qt::Orientations expandingDirections() const;
00197 virtual QSize maximumSize() const;
00199 virtual QSize minimumSize() const;
00201 virtual QSize sizeHint() const;
00203 virtual void setGeometry( const QRect& r );
00205 virtual QRect geometry() const;
00206
00207 virtual void paint( QPainter* painter );
00208
00209 protected:
00210 int borderWidth() const;
00211
00212 private:
00213 TextLayoutItem* const m_text;
00214 };
00215
00220 class KDCHART_EXPORT MarkerLayoutItem : public AbstractLayoutItem
00221 {
00222 public:
00223 MarkerLayoutItem( AbstractDiagram* diagram,
00224 const MarkerAttributes& marker,
00225 const QBrush& brush,
00226 const QPen& pen,
00227 Qt::Alignment alignment = 0 );
00228
00229 virtual Qt::Orientations expandingDirections() const;
00230 virtual QRect geometry() const;
00231 virtual bool isEmpty() const;
00232 virtual QSize maximumSize() const;
00233 virtual QSize minimumSize() const;
00234 virtual void setGeometry( const QRect& r );
00235 virtual QSize sizeHint() const;
00236
00237 virtual void paint( QPainter* );
00238
00239 static void paintIntoRect(
00240 QPainter* painter,
00241 const QRect& rect,
00242 AbstractDiagram* diagram,
00243 const MarkerAttributes& marker,
00244 const QBrush& brush,
00245 const QPen& pen );
00246
00247 private:
00248 AbstractDiagram* mDiagram;
00249 QRect mRect;
00250 MarkerAttributes mMarker;
00251 QBrush mBrush;
00252 QPen mPen;
00253 };
00254
00259 class KDCHART_EXPORT LineLayoutItem : public AbstractLayoutItem
00260 {
00261 public:
00262 LineLayoutItem( AbstractDiagram* diagram,
00263 int length,
00264 const QPen& pen,
00265 Qt::Alignment alignment = 0 );
00266
00267 virtual Qt::Orientations expandingDirections() const;
00268 virtual QRect geometry() const;
00269 virtual bool isEmpty() const;
00270 virtual QSize maximumSize() const;
00271 virtual QSize minimumSize() const;
00272 virtual void setGeometry( const QRect& r );
00273 virtual QSize sizeHint() const;
00274
00275 virtual void paint( QPainter* );
00276
00277 static void paintIntoRect(
00278 QPainter* painter,
00279 const QRect& rect,
00280 const QPen& pen );
00281
00282 private:
00283 AbstractDiagram* mDiagram;
00284 int mLength;
00285 QPen mPen;
00286 QRect mRect;
00287 };
00288
00293 class KDCHART_EXPORT LineWithMarkerLayoutItem : public AbstractLayoutItem
00294 {
00295 public:
00296 LineWithMarkerLayoutItem( AbstractDiagram* diagram,
00297 int lineLength,
00298 const QPen& linePen,
00299 int markerOffs,
00300 const MarkerAttributes& marker,
00301 const QBrush& markerBrush,
00302 const QPen& markerPen,
00303 Qt::Alignment alignment = 0 );
00304
00305 virtual Qt::Orientations expandingDirections() const;
00306 virtual QRect geometry() const;
00307 virtual bool isEmpty() const;
00308 virtual QSize maximumSize() const;
00309 virtual QSize minimumSize() const;
00310 virtual void setGeometry( const QRect& r );
00311 virtual QSize sizeHint() const;
00312
00313 virtual void paint( QPainter* );
00314
00315 private:
00316 AbstractDiagram* mDiagram;
00317 QRect mRect;
00318 int mLineLength;
00319 QPen mLinePen;
00320 int mMarkerOffs;
00321 MarkerAttributes mMarker;
00322 QBrush mMarkerBrush;
00323 QPen mMarkerPen;
00324 };
00325
00326
00331 class KDCHART_EXPORT HorizontalLineLayoutItem : public AbstractLayoutItem
00332 {
00333 public:
00334 HorizontalLineLayoutItem();
00335
00336 virtual Qt::Orientations expandingDirections() const;
00337 virtual QRect geometry() const;
00338 virtual bool isEmpty() const;
00339 virtual QSize maximumSize() const;
00340 virtual QSize minimumSize() const;
00341 virtual void setGeometry( const QRect& r );
00342 virtual QSize sizeHint() const;
00343
00344 virtual void paint( QPainter* );
00345
00346 private:
00347 QRect mRect;
00348 };
00349
00354 class KDCHART_EXPORT VerticalLineLayoutItem : public AbstractLayoutItem
00355 {
00356 public:
00357 VerticalLineLayoutItem();
00358
00359 virtual Qt::Orientations expandingDirections() const;
00360 virtual QRect geometry() const;
00361 virtual bool isEmpty() const;
00362 virtual QSize maximumSize() const;
00363 virtual QSize minimumSize() const;
00364 virtual void setGeometry( const QRect& r );
00365 virtual QSize sizeHint() const;
00366
00367 virtual void paint( QPainter* );
00368
00369 private:
00370 QRect mRect;
00371 };
00372
00443 class KDCHART_EXPORT AutoSpacerLayoutItem : public AbstractLayoutItem
00444 {
00445 public:
00446 AutoSpacerLayoutItem(
00447 bool layoutIsAtTopPosition, QHBoxLayout *rightLeftLayout,
00448 bool layoutIsAtLeftPosition, QVBoxLayout *topBottomLayout );
00449
00450 virtual Qt::Orientations expandingDirections() const;
00451 virtual QRect geometry() const;
00452 virtual bool isEmpty() const;
00453 virtual QSize maximumSize() const;
00454 virtual QSize minimumSize() const;
00455 virtual void setGeometry( const QRect& r );
00456 virtual QSize sizeHint() const;
00457
00458 virtual void paint( QPainter* );
00459
00460 private:
00461 QRect mRect;
00462 bool mLayoutIsAtTopPosition;
00463 QHBoxLayout *mRightLeftLayout;
00464 bool mLayoutIsAtLeftPosition;
00465 QVBoxLayout *mTopBottomLayout;
00466
00467 mutable QBrush mCommonBrush;
00468 mutable QSize mCachedSize;
00469 };
00470
00471 }
00472
00473 #endif