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
00048 class KDCHART_EXPORT AbstractLayoutItem : public QLayoutItem
00049 {
00050 public:
00051 AbstractLayoutItem( Qt::Alignment itemAlignment = 0 ) :
00052 QLayoutItem( itemAlignment ),
00053 mParent( 0 ),
00054 mParentLayout( 0 ) {}
00055
00062 virtual void paintAll( QPainter& painter );
00063
00064 virtual void paint( QPainter* ) = 0;
00065
00066 virtual void paintCtx( PaintContext* context );
00067 virtual void setParentWidget( QWidget* widget );
00068 virtual void sizeHintChanged()const;
00069
00070 void setParentLayout( QLayout* lay )
00071 {
00072 mParentLayout = lay;
00073 }
00074 QLayout* parentLayout()
00075 {
00076 return mParentLayout;
00077 }
00078 void removeFromParentLayout()
00079 {
00080 if( mParentLayout ){
00081 if( widget() )
00082 mParentLayout->removeWidget( widget() );
00083 else
00084 mParentLayout->removeItem( this );
00085 }
00086 }
00087 protected:
00088 QWidget* mParent;
00089 QLayout* mParentLayout;
00090 };
00091
00094 class KDCHART_EXPORT TextLayoutItem : public AbstractLayoutItem
00095 {
00096 public:
00097 TextLayoutItem();
00098 TextLayoutItem( const QString& text,
00099 const TextAttributes& attributes,
00100 const QObject* autoReferenceArea,
00101 KDChartEnums::MeasureOrientation autoReferenceOrientation,
00102 Qt::Alignment alignment = 0 );
00103
00104 void setAutoReferenceArea( const QObject* area );
00105 const QObject* autoReferenceArea() const;
00106
00107 void setText(const QString & text);
00108 QString text() const;
00109
00110 void setTextAttributes( const TextAttributes& a );
00111 TextAttributes textAttributes() const;
00112
00114 virtual bool isEmpty() const;
00116 virtual Qt::Orientations expandingDirections() const;
00118 virtual QSize maximumSize() const;
00120 virtual QSize minimumSize() const;
00122 virtual QSize sizeHint() const;
00124 virtual void setGeometry( const QRect& r );
00126 virtual QRect geometry() const;
00127
00128 virtual bool intersects( const TextLayoutItem& other, const QPointF& myPos, const QPointF& otherPos ) const;
00129 virtual bool intersects( const TextLayoutItem& other, const QPoint& myPos, const QPoint& otherPos ) const;
00130
00131 virtual qreal realFontSize() const;
00132 virtual QFont realFont() const;
00133
00134 virtual void paint( QPainter* );
00135
00136 private:
00137 QPolygon rotatedCorners() const;
00138 bool realFontWasRecalculated() const;
00139 QSize unrotatedSizeHint( QFont fnt = QFont() ) const;
00140 QSize calcSizeHint( QFont fnt ) const;
00141
00142 QRect mRect;
00143 QString mText;
00144 TextAttributes mAttributes;
00145 const QObject* mAutoReferenceArea;
00146 KDChartEnums::MeasureOrientation mAutoReferenceOrientation;
00147 mutable QSize cachedSizeHint;
00148 mutable qreal cachedFontSize;
00149 mutable QFont cachedFont;
00150 };
00151
00154 class KDCHART_EXPORT MarkerLayoutItem : public AbstractLayoutItem
00155 {
00156 public:
00157 MarkerLayoutItem( AbstractDiagram* diagram,
00158 const MarkerAttributes& marker,
00159 const QBrush& brush,
00160 const QPen& pen,
00161 Qt::Alignment alignment = 0 );
00162
00163 virtual Qt::Orientations expandingDirections() const;
00164 virtual QRect geometry() const;
00165 virtual bool isEmpty() const;
00166 virtual QSize maximumSize() const;
00167 virtual QSize minimumSize() const;
00168 virtual void setGeometry( const QRect& r );
00169 virtual QSize sizeHint() const;
00170
00171 virtual void paint( QPainter* );
00172
00173 static void paintIntoRect(
00174 QPainter* painter,
00175 const QRect& rect,
00176 AbstractDiagram* diagram,
00177 const MarkerAttributes& marker,
00178 const QBrush& brush,
00179 const QPen& pen );
00180
00181 private:
00182 AbstractDiagram* mDiagram;
00183 QRect mRect;
00184 MarkerAttributes mMarker;
00185 QBrush mBrush;
00186 QPen mPen;
00187 };
00188
00191 class KDCHART_EXPORT LineLayoutItem : public AbstractLayoutItem
00192 {
00193 public:
00194 LineLayoutItem( AbstractDiagram* diagram,
00195 int length,
00196 const QPen& pen,
00197 Qt::Alignment alignment = 0 );
00198
00199 virtual Qt::Orientations expandingDirections() const;
00200 virtual QRect geometry() const;
00201 virtual bool isEmpty() const;
00202 virtual QSize maximumSize() const;
00203 virtual QSize minimumSize() const;
00204 virtual void setGeometry( const QRect& r );
00205 virtual QSize sizeHint() const;
00206
00207 virtual void paint( QPainter* );
00208
00209 static void paintIntoRect(
00210 QPainter* painter,
00211 const QRect& rect,
00212 const QPen& pen );
00213
00214 private:
00215 AbstractDiagram* mDiagram;
00216 int mLength;
00217 QPen mPen;
00218 QRect mRect;
00219 };
00220
00223 class KDCHART_EXPORT LineWithMarkerLayoutItem : public AbstractLayoutItem
00224 {
00225 public:
00226 LineWithMarkerLayoutItem( AbstractDiagram* diagram,
00227 int lineLength,
00228 const QPen& linePen,
00229 int markerOffs,
00230 const MarkerAttributes& marker,
00231 const QBrush& markerBrush,
00232 const QPen& markerPen,
00233 Qt::Alignment alignment = 0 );
00234
00235 virtual Qt::Orientations expandingDirections() const;
00236 virtual QRect geometry() const;
00237 virtual bool isEmpty() const;
00238 virtual QSize maximumSize() const;
00239 virtual QSize minimumSize() const;
00240 virtual void setGeometry( const QRect& r );
00241 virtual QSize sizeHint() const;
00242
00243 virtual void paint( QPainter* );
00244
00245 private:
00246 AbstractDiagram* mDiagram;
00247 QRect mRect;
00248 int mLineLength;
00249 QPen mLinePen;
00250 int mMarkerOffs;
00251 MarkerAttributes mMarker;
00252 QBrush mMarkerBrush;
00253 QPen mMarkerPen;
00254 };
00255
00256
00259 class KDCHART_EXPORT HorizontalLineLayoutItem : public AbstractLayoutItem
00260 {
00261 public:
00262 HorizontalLineLayoutItem();
00263
00264 virtual Qt::Orientations expandingDirections() const;
00265 virtual QRect geometry() const;
00266 virtual bool isEmpty() const;
00267 virtual QSize maximumSize() const;
00268 virtual QSize minimumSize() const;
00269 virtual void setGeometry( const QRect& r );
00270 virtual QSize sizeHint() const;
00271
00272 virtual void paint( QPainter* );
00273
00274 private:
00275 QRect mRect;
00276 };
00277
00280 class KDCHART_EXPORT VerticalLineLayoutItem : public AbstractLayoutItem
00281 {
00282 public:
00283 VerticalLineLayoutItem();
00284
00285 virtual Qt::Orientations expandingDirections() const;
00286 virtual QRect geometry() const;
00287 virtual bool isEmpty() const;
00288 virtual QSize maximumSize() const;
00289 virtual QSize minimumSize() const;
00290 virtual void setGeometry( const QRect& r );
00291 virtual QSize sizeHint() const;
00292
00293 virtual void paint( QPainter* );
00294
00295 private:
00296 QRect mRect;
00297 };
00298
00367 class KDCHART_EXPORT AutoSpacerLayoutItem : public AbstractLayoutItem
00368 {
00369 public:
00370 AutoSpacerLayoutItem(
00371 bool layoutIsAtTopPosition, QHBoxLayout *rightLeftLayout,
00372 bool layoutIsAtLeftPosition, QVBoxLayout *topBottomLayout );
00373
00374 virtual Qt::Orientations expandingDirections() const;
00375 virtual QRect geometry() const;
00376 virtual bool isEmpty() const;
00377 virtual QSize maximumSize() const;
00378 virtual QSize minimumSize() const;
00379 virtual void setGeometry( const QRect& r );
00380 virtual QSize sizeHint() const;
00381
00382 virtual void paint( QPainter* );
00383
00384 private:
00385 QRect mRect;
00386 bool mLayoutIsAtTopPosition;
00387 QHBoxLayout *mRightLeftLayout;
00388 bool mLayoutIsAtLeftPosition;
00389 QVBoxLayout *mTopBottomLayout;
00390
00391 mutable QBrush mCommonBrush;
00392 mutable QSize mCachedSize;
00393 };
00394
00395 }
00396
00397 #endif
00398