KD Chart 2  [rev.2.5]
KDChartLayoutItems.h
Go to the documentation of this file.
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 */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Defines

Klarälvdalens Datakonsult AB (KDAB)
Qt-related services and products
http://www.kdab.com/
http://www.kdab.com/products/kd-chart/