KDChartLayoutItems.h

Go to the documentation of this file.
00001 /****************************************************************************
00002  ** Copyright (C) 2007 Klarälvdalens Datakonsult AB.  All rights reserved.
00003  **
00004  ** This file is part of the KD Chart library.
00005  **
00006  ** This file may be distributed and/or modified under the terms of the
00007  ** GNU General Public License version 2 as published by the Free Software
00008  ** Foundation and appearing in the file LICENSE.GPL included in the
00009  ** packaging of this file.
00010  **
00011  ** Licensees holding valid commercial KD Chart licenses may use this file in
00012  ** accordance with the KD Chart Commercial License Agreement provided with
00013  ** the Software.
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  ** See http://www.kdab.net/kdchart for
00019  **   information about KDChart Commercial License Agreements.
00020  **
00021  ** Contact info@kdab.net if any conditions of this
00022  ** licensing are not clear to you.
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 /* KDCHARTLAYOUTITEMS_H */

Generated on Mon Sep 17 16:16:50 2007 for KD Chart 2 by  doxygen 1.5.1