KD Chart 2  [rev.2.6]
KDChartLayoutItems.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2001-2019 Klaralvdalens Datakonsult AB. All rights reserved.
3 **
4 ** This file is part of the KD Chart library.
5 **
6 ** Licensees holding valid commercial KD Chart licenses may use this file in
7 ** accordance with the KD Chart Commercial License Agreement provided with
8 ** the Software.
9 **
10 **
11 ** This file may be distributed and/or modified under the terms of the
12 ** GNU General Public License version 2 and version 3 as published by the
13 ** Free Software Foundation and appearing in the file LICENSE.GPL.txt included.
14 **
15 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17 **
18 ** Contact info@kdab.com if any conditions of this licensing are not
19 ** clear to you.
20 **
21 **********************************************************************/
22 
23 #ifndef KDCHARTLAYOUTITEMS_H
24 #define KDCHARTLAYOUTITEMS_H
25 
26 #include <QBrush>
27 #include <QFont>
28 #include <QFontMetricsF>
29 #include <QLayout>
30 #include <QLayoutItem>
31 #include <QPen>
32 
33 #include "KDChartTextAttributes.h"
35 
36 QT_BEGIN_NAMESPACE
37 class QPainter;
38 class KDTextDocument;
39 QT_END_NAMESPACE
40 
41 // TODO remove
42 QRectF rotatedRect( const QRectF& pt, qreal rotation );
43 
44 namespace KDChart {
45  class AbstractDiagram;
46  class PaintContext;
47 
52  class KDCHART_EXPORT AbstractLayoutItem : public QLayoutItem
53  {
54  public:
55  AbstractLayoutItem( Qt::Alignment itemAlignment = 0 ) :
56  QLayoutItem( itemAlignment ),
57  mParent( 0 ),
58  mParentLayout( 0 ) {}
59 
66  virtual void paintAll( QPainter& painter );
67 
68  virtual void paint( QPainter* ) = 0;
69 
70  virtual void paintCtx( PaintContext* context );
71  virtual void setParentWidget( QWidget* widget );
72  virtual void sizeHintChanged() const;
73 
74  void setParentLayout( QLayout* lay )
75  {
76  mParentLayout = lay;
77  }
78  QLayout* parentLayout()
79  {
80  return mParentLayout;
81  }
83  {
84  if ( mParentLayout ) {
85  if ( widget() )
86  mParentLayout->removeWidget( widget() );
87  else
88  mParentLayout->removeItem( this );
89  }
90  }
91  protected:
93  QLayout* mParentLayout;
94  };
95 
100  class KDCHART_EXPORT TextLayoutItem : public AbstractLayoutItem
101  {
102  public:
103  TextLayoutItem();
104  TextLayoutItem( const QString& text,
105  const TextAttributes& attributes,
106  const QObject* autoReferenceArea,
107  KDChartEnums::MeasureOrientation autoReferenceOrientation,
108  Qt::Alignment alignment = 0 );
109 
110  void setAutoReferenceArea( const QObject* area );
111  const QObject* autoReferenceArea() const;
112 
113  void setText(const QString & text);
114  QString text() const;
115 
116  void setTextAlignment( Qt::Alignment );
117  Qt::Alignment textAlignment() const;
118 
119  void setTextAttributes( const TextAttributes& a );
120  TextAttributes textAttributes() const;
121 
123  virtual bool isEmpty() const;
125  virtual Qt::Orientations expandingDirections() const;
127  virtual QSize maximumSize() const;
129  virtual QSize minimumSize() const;
131  virtual QSize sizeHint() const;
133  virtual void setGeometry( const QRect& r );
135  virtual QRect geometry() const;
136 
137  virtual int marginWidth() const;
138 
139  virtual QSize sizeHintUnrotated() const;
140 
141  virtual bool intersects( const TextLayoutItem& other, const QPointF& myPos, const QPointF& otherPos ) const;
142  virtual bool intersects( const TextLayoutItem& other, const QPoint& myPos, const QPoint& otherPos ) const;
143 
144  virtual qreal realFontSize() const;
145  virtual QFont realFont() const;
146 
147  virtual void paint( QPainter* );
148 
149  QPolygon boundingPolygon() const;
150  private:
151  bool maybeUpdateRealFont() const;
152  QSize unrotatedSizeHint( const QFont& fnt = QFont() ) const;
153  QSize unrotatedTextSize( QFont fnt = QFont() ) const;
154  QSize calcSizeHint( const QFont& font ) const;
155  int marginWidth( const QSize& textSize ) const;
156 
157  qreal fitFontSizeToGeometry() const;
158 
159  QRect mRect;
160  QString mText;
161  Qt::Alignment mTextAlignment;
162  TextAttributes mAttributes;
163  const QObject* mAutoReferenceArea;
164  KDChartEnums::MeasureOrientation mAutoReferenceOrientation;
165  mutable QSize cachedSizeHint;
166  mutable QPolygon mCachedBoundingPolygon;
167  mutable qreal cachedFontSize;
168  mutable QFont cachedFont;
169  };
170 
171  class KDCHART_EXPORT TextBubbleLayoutItem : public AbstractLayoutItem
172  {
173  public:
175  TextBubbleLayoutItem( const QString& text,
176  const TextAttributes& attributes,
177  const QObject* autoReferenceArea,
178  KDChartEnums::MeasureOrientation autoReferenceOrientation,
179  Qt::Alignment alignment = 0 );
180 
182 
183  void setAutoReferenceArea( const QObject* area );
184  const QObject* autoReferenceArea() const;
185 
186  void setText(const QString & text);
187  QString text() const;
188 
189  void setTextAttributes( const TextAttributes& a );
190  TextAttributes textAttributes() const;
191 
193  virtual bool isEmpty() const;
195  virtual Qt::Orientations expandingDirections() const;
197  virtual QSize maximumSize() const;
199  virtual QSize minimumSize() const;
201  virtual QSize sizeHint() const;
203  virtual void setGeometry( const QRect& r );
205  virtual QRect geometry() const;
206 
207  virtual void paint( QPainter* painter );
208 
209  protected:
210  int borderWidth() const;
211 
212  private:
213  TextLayoutItem* const m_text;
214  };
215 
220  class KDCHART_EXPORT MarkerLayoutItem : public AbstractLayoutItem
221  {
222  public:
224  const MarkerAttributes& marker,
225  const QBrush& brush,
226  const QPen& pen,
227  Qt::Alignment alignment = 0 );
228 
229  virtual Qt::Orientations expandingDirections() const;
230  virtual QRect geometry() const;
231  virtual bool isEmpty() const;
232  virtual QSize maximumSize() const;
233  virtual QSize minimumSize() const;
234  virtual void setGeometry( const QRect& r );
235  virtual QSize sizeHint() const;
236 
237  virtual void paint( QPainter* );
238 
239  static void paintIntoRect(
240  QPainter* painter,
241  const QRect& rect,
242  AbstractDiagram* diagram,
243  const MarkerAttributes& marker,
244  const QBrush& brush,
245  const QPen& pen );
246 
247  private:
248  AbstractDiagram* mDiagram;
249  QRect mRect;
250  MarkerAttributes mMarker;
251  QBrush mBrush;
252  QPen mPen;
253  };
254 
259  class KDCHART_EXPORT LineLayoutItem : public AbstractLayoutItem
260  {
261  public:
263  int length,
264  const QPen& pen,
265  Qt::Alignment mLegendLineSymbolAlignment,
266  Qt::Alignment alignment = 0 );
267 
268  virtual Qt::Orientations expandingDirections() const;
269  virtual QRect geometry() const;
270  virtual bool isEmpty() const;
271  virtual QSize maximumSize() const;
272  virtual QSize minimumSize() const;
273  virtual void setGeometry( const QRect& r );
274  virtual QSize sizeHint() const;
275 
276  void setLegendLineSymbolAlignment(Qt::Alignment legendLineSymbolAlignment);
277  virtual Qt::Alignment legendLineSymbolAlignment() const;
278 
279  virtual void paint( QPainter* );
280 
281  static void paintIntoRect(
282  QPainter* painter,
283  const QRect& rect,
284  const QPen& pen,
285  Qt::Alignment lineAlignment);
286 
287  private:
288  AbstractDiagram* mDiagram; //TODO: not used. remove it
289  int mLength;
290  QPen mPen;
291  QRect mRect;
292  Qt::Alignment mLegendLineSymbolAlignment;
293  };
294 
299  class KDCHART_EXPORT LineWithMarkerLayoutItem : public AbstractLayoutItem
300  {
301  public:
303  int lineLength,
304  const QPen& linePen,
305  int markerOffs,
306  const MarkerAttributes& marker,
307  const QBrush& markerBrush,
308  const QPen& markerPen,
309  Qt::Alignment alignment = 0 );
310 
311  virtual Qt::Orientations expandingDirections() const;
312  virtual QRect geometry() const;
313  virtual bool isEmpty() const;
314  virtual QSize maximumSize() const;
315  virtual QSize minimumSize() const;
316  virtual void setGeometry( const QRect& r );
317  virtual QSize sizeHint() const;
318 
319  virtual void paint( QPainter* );
320 
321  private:
322  AbstractDiagram* mDiagram;
323  QRect mRect;
324  int mLineLength;
325  QPen mLinePen;
326  int mMarkerOffs;
327  MarkerAttributes mMarker;
328  QBrush mMarkerBrush;
329  QPen mMarkerPen;
330  };
331 
332 
337  class KDCHART_EXPORT HorizontalLineLayoutItem : public AbstractLayoutItem
338  {
339  public:
341 
342  virtual Qt::Orientations expandingDirections() const;
343  virtual QRect geometry() const;
344  virtual bool isEmpty() const;
345  virtual QSize maximumSize() const;
346  virtual QSize minimumSize() const;
347  virtual void setGeometry( const QRect& r );
348  virtual QSize sizeHint() const;
349 
350  virtual void paint( QPainter* );
351 
352  private:
353  QRect mRect;
354  };
355 
360  class KDCHART_EXPORT VerticalLineLayoutItem : public AbstractLayoutItem
361  {
362  public:
364 
365  virtual Qt::Orientations expandingDirections() const;
366  virtual QRect geometry() const;
367  virtual bool isEmpty() const;
368  virtual QSize maximumSize() const;
369  virtual QSize minimumSize() const;
370  virtual void setGeometry( const QRect& r );
371  virtual QSize sizeHint() const;
372 
373  virtual void paint( QPainter* );
374 
375  private:
376  QRect mRect;
377  };
378 
449  class KDCHART_EXPORT AutoSpacerLayoutItem : public AbstractLayoutItem
450  {
451  public:
453  bool layoutIsAtTopPosition, QHBoxLayout *rightLeftLayout,
454  bool layoutIsAtLeftPosition, QVBoxLayout *topBottomLayout );
455 
456  virtual Qt::Orientations expandingDirections() const;
457  virtual QRect geometry() const;
458  virtual bool isEmpty() const;
459  virtual QSize maximumSize() const;
460  virtual QSize minimumSize() const;
461  virtual void setGeometry( const QRect& r );
462  virtual QSize sizeHint() const;
463 
464  virtual void paint( QPainter* );
465 
466  private:
467  QRect mRect;
468  bool mLayoutIsAtTopPosition;
469  QHBoxLayout *mRightLeftLayout;
470  bool mLayoutIsAtLeftPosition;
471  QVBoxLayout *mTopBottomLayout;
472 
473  mutable QBrush mCommonBrush;
474  mutable QSize mCachedSize;
475  };
476 
477 }
478 
479 #endif /* KDCHARTLAYOUTITEMS_H */
MeasureOrientation
Measure orientation mode: the way how the absolute value of a KDChart::Measure is determined during K...
Definition: KDChartEnums.h:290
Layout item showing a coloured line and a data point marker.
Layout item showing a text.
KDTextDocument is an internally used enhanced QTextDocument.
AbstractDiagram defines the interface for diagram classes.
Layout item showing a data point marker.
QT_END_NAMESPACE QRectF rotatedRect(const QRectF &pt, qreal rotation)
Class only listed here to document inheritance of some KDChart classes.
Layout item showing a horizontal line.
Base class for all layout items of KD Chart.
AbstractLayoutItem(Qt::Alignment itemAlignment=0)
Layout item showing a vertial line.
Stores information about painting diagrams.
A set of attributes controlling the appearance of data set markers.
Layout item showing a coloured line.
Class only listed here to document inheritance of some KDChart classes.
void setParentLayout(QLayout *lay)
Class only listed here to document inheritance of some KDChart classes.
static qreal fitFontSizeToGeometry(const QString &text, const QFont &font, const QRectF &geometry, const TextAttributes &ta)
A set of text attributes.

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