KD Chart 2
[rev.2.5]
|
00001 /**************************************************************************** 00002 ** Copyright (C) 2001-2012 Klaralvdalens Datakonsult AB. All rights reserved. 00003 ** 00004 ** This file is part of the KD Chart library. 00005 ** 00006 ** Licensees holding valid commercial KD Chart licenses may use this file in 00007 ** accordance with the KD Chart Commercial License Agreement provided with 00008 ** the Software. 00009 ** 00010 ** 00011 ** This file may be distributed and/or modified under the terms of the 00012 ** GNU General Public License version 2 and version 3 as published by the 00013 ** Free Software Foundation and appearing in the file LICENSE.GPL.txt included. 00014 ** 00015 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 00016 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 00017 ** 00018 ** Contact info@kdab.com if any conditions of this licensing are not 00019 ** clear to you. 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 QT_BEGIN_NAMESPACE 00037 class QPainter; 00038 class KDTextDocument; 00039 QT_END_NAMESPACE 00040 00041 // TODO remove 00042 QRectF rotatedRect( const QRectF& pt, qreal rotation ); 00043 00044 namespace KDChart { 00045 class AbstractDiagram; 00046 class PaintContext; 00047 00052 class KDCHART_EXPORT AbstractLayoutItem : public QLayoutItem 00053 { 00054 public: 00055 AbstractLayoutItem( Qt::Alignment itemAlignment = 0 ) : 00056 QLayoutItem( itemAlignment ), 00057 mParent( 0 ), 00058 mParentLayout( 0 ) {} 00059 00066 virtual void paintAll( QPainter& painter ); 00067 00068 virtual void paint( QPainter* ) = 0; 00069 00070 virtual void paintCtx( PaintContext* context ); 00071 virtual void setParentWidget( QWidget* widget ); 00072 virtual void sizeHintChanged() const; 00073 00074 void setParentLayout( QLayout* lay ) 00075 { 00076 mParentLayout = lay; 00077 } 00078 QLayout* parentLayout() 00079 { 00080 return mParentLayout; 00081 } 00082 void removeFromParentLayout() 00083 { 00084 if( mParentLayout ){ 00085 if( widget() ) 00086 mParentLayout->removeWidget( widget() ); 00087 else 00088 mParentLayout->removeItem( this ); 00089 } 00090 } 00091 protected: 00092 QWidget* mParent; 00093 QLayout* mParentLayout; 00094 }; 00095 00100 class KDCHART_EXPORT TextLayoutItem : public AbstractLayoutItem 00101 { 00102 public: 00103 TextLayoutItem(); 00104 TextLayoutItem( const QString& text, 00105 const TextAttributes& attributes, 00106 const QObject* autoReferenceArea, 00107 KDChartEnums::MeasureOrientation autoReferenceOrientation, 00108 Qt::Alignment alignment = 0 ); 00109 00110 void setAutoReferenceArea( const QObject* area ); 00111 const QObject* autoReferenceArea() const; 00112 00113 void setText(const QString & text); 00114 QString text() const; 00115 00116 void setTextAlignment( Qt::Alignment ); 00117 Qt::Alignment textAlignment() const; 00118 00119 void setTextAttributes( const TextAttributes& a ); 00120 TextAttributes textAttributes() const; 00121 00123 virtual bool isEmpty() const; 00125 virtual Qt::Orientations expandingDirections() const; 00127 virtual QSize maximumSize() const; 00129 virtual QSize minimumSize() const; 00131 virtual QSize sizeHint() const; 00133 virtual void setGeometry( const QRect& r ); 00135 virtual QRect geometry() const; 00136 00137 virtual int marginWidth() const; 00138 00139 virtual QSize sizeHintUnrotated() const; 00140 00141 virtual bool intersects( const TextLayoutItem& other, const QPointF& myPos, const QPointF& otherPos ) const; 00142 virtual bool intersects( const TextLayoutItem& other, const QPoint& myPos, const QPoint& otherPos ) const; 00143 00144 virtual qreal realFontSize() const; 00145 virtual QFont realFont() const; 00146 00147 virtual void paint( QPainter* ); 00148 00149 QPolygon boundingPolygon() const; 00150 private: 00151 bool maybeUpdateRealFont() const; 00152 QSize unrotatedSizeHint( const QFont& fnt = QFont() ) const; 00153 QSize unrotatedTextSize( QFont fnt = QFont() ) const; 00154 QSize calcSizeHint( const QFont& font ) const; 00155 int marginWidth( const QSize& textSize ) const; 00156 00157 qreal fitFontSizeToGeometry() const; 00158 00159 QRect mRect; 00160 QString mText; 00161 Qt::Alignment mTextAlignment; 00162 TextAttributes mAttributes; 00163 const QObject* mAutoReferenceArea; 00164 KDChartEnums::MeasureOrientation mAutoReferenceOrientation; 00165 mutable QSize cachedSizeHint; 00166 mutable QPolygon mCachedBoundingPolygon; 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 mLegendLineSymbolAlignment, 00266 Qt::Alignment alignment = 0 ); 00267 00268 virtual Qt::Orientations expandingDirections() const; 00269 virtual QRect geometry() const; 00270 virtual bool isEmpty() const; 00271 virtual QSize maximumSize() const; 00272 virtual QSize minimumSize() const; 00273 virtual void setGeometry( const QRect& r ); 00274 virtual QSize sizeHint() const; 00275 00276 void setLegendLineSymbolAlignment(Qt::Alignment legendLineSymbolAlignment); 00277 virtual Qt::Alignment legendLineSymbolAlignment() const; 00278 00279 virtual void paint( QPainter* ); 00280 00281 static void paintIntoRect( 00282 QPainter* painter, 00283 const QRect& rect, 00284 const QPen& pen, 00285 Qt::Alignment lineAlignment); 00286 00287 private: 00288 AbstractDiagram* mDiagram; 00289 int mLength; 00290 QPen mPen; 00291 QRect mRect; 00292 Qt::Alignment mLegendLineSymbolAlignment; 00293 }; 00294 00299 class KDCHART_EXPORT LineWithMarkerLayoutItem : public AbstractLayoutItem 00300 { 00301 public: 00302 LineWithMarkerLayoutItem( AbstractDiagram* diagram, 00303 int lineLength, 00304 const QPen& linePen, 00305 int markerOffs, 00306 const MarkerAttributes& marker, 00307 const QBrush& markerBrush, 00308 const QPen& markerPen, 00309 Qt::Alignment alignment = 0 ); 00310 00311 virtual Qt::Orientations expandingDirections() const; 00312 virtual QRect geometry() const; 00313 virtual bool isEmpty() const; 00314 virtual QSize maximumSize() const; 00315 virtual QSize minimumSize() const; 00316 virtual void setGeometry( const QRect& r ); 00317 virtual QSize sizeHint() const; 00318 00319 virtual void paint( QPainter* ); 00320 00321 private: 00322 AbstractDiagram* mDiagram; 00323 QRect mRect; 00324 int mLineLength; 00325 QPen mLinePen; 00326 int mMarkerOffs; 00327 MarkerAttributes mMarker; 00328 QBrush mMarkerBrush; 00329 QPen mMarkerPen; 00330 }; 00331 00332 00337 class KDCHART_EXPORT HorizontalLineLayoutItem : public AbstractLayoutItem 00338 { 00339 public: 00340 HorizontalLineLayoutItem(); 00341 00342 virtual Qt::Orientations expandingDirections() const; 00343 virtual QRect geometry() const; 00344 virtual bool isEmpty() const; 00345 virtual QSize maximumSize() const; 00346 virtual QSize minimumSize() const; 00347 virtual void setGeometry( const QRect& r ); 00348 virtual QSize sizeHint() const; 00349 00350 virtual void paint( QPainter* ); 00351 00352 private: 00353 QRect mRect; 00354 }; 00355 00360 class KDCHART_EXPORT VerticalLineLayoutItem : public AbstractLayoutItem 00361 { 00362 public: 00363 VerticalLineLayoutItem(); 00364 00365 virtual Qt::Orientations expandingDirections() const; 00366 virtual QRect geometry() const; 00367 virtual bool isEmpty() const; 00368 virtual QSize maximumSize() const; 00369 virtual QSize minimumSize() const; 00370 virtual void setGeometry( const QRect& r ); 00371 virtual QSize sizeHint() const; 00372 00373 virtual void paint( QPainter* ); 00374 00375 private: 00376 QRect mRect; 00377 }; 00378 00449 class KDCHART_EXPORT AutoSpacerLayoutItem : public AbstractLayoutItem 00450 { 00451 public: 00452 AutoSpacerLayoutItem( 00453 bool layoutIsAtTopPosition, QHBoxLayout *rightLeftLayout, 00454 bool layoutIsAtLeftPosition, QVBoxLayout *topBottomLayout ); 00455 00456 virtual Qt::Orientations expandingDirections() const; 00457 virtual QRect geometry() const; 00458 virtual bool isEmpty() const; 00459 virtual QSize maximumSize() const; 00460 virtual QSize minimumSize() const; 00461 virtual void setGeometry( const QRect& r ); 00462 virtual QSize sizeHint() const; 00463 00464 virtual void paint( QPainter* ); 00465 00466 private: 00467 QRect mRect; 00468 bool mLayoutIsAtTopPosition; 00469 QHBoxLayout *mRightLeftLayout; 00470 bool mLayoutIsAtLeftPosition; 00471 QVBoxLayout *mTopBottomLayout; 00472 00473 mutable QBrush mCommonBrush; 00474 mutable QSize mCachedSize; 00475 }; 00476 00477 } 00478 00479 #endif /* KDCHARTLAYOUTITEMS_H */