KD Chart API Documentation  3.1
KDChartLayoutItems.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** This file is part of the KD Chart library.
4 **
5 ** SPDX-FileCopyrightText: 2001 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
6 **
7 ** SPDX-License-Identifier: MIT
8 **
9 ****************************************************************************/
10 
11 #ifndef KDCHARTLAYOUTITEMS_H
12 #define KDCHARTLAYOUTITEMS_H
13 
14 #include <QBrush>
15 #include <QFont>
16 #include <QFontMetricsF>
17 #include <QLayout>
18 #include <QLayoutItem>
19 #include <QPen>
20 
22 #include "KDChartTextAttributes.h"
23 
24 QT_BEGIN_NAMESPACE
25 class QPainter;
26 QT_END_NAMESPACE
27 
28 // TODO remove
29 QRectF rotatedRect(const QRectF &pt, qreal rotation);
30 
31 namespace KDChart {
32 class AbstractDiagram;
33 class PaintContext;
34 
39 class KDCHART_EXPORT AbstractLayoutItem : public QLayoutItem
40 {
41 public:
42  AbstractLayoutItem(Qt::Alignment itemAlignment = {})
43  : QLayoutItem(itemAlignment)
44  {
45  }
46 
53  virtual void paintAll(QPainter &painter);
54 
55  virtual void paint(QPainter *) = 0;
56 
57  virtual void paintCtx(PaintContext *context);
58  virtual void setParentWidget(QWidget *widget);
59  virtual void sizeHintChanged() const;
60 
61  void setParentLayout(QLayout *lay)
62  {
63  mParentLayout = lay;
64  }
65  QLayout *parentLayout()
66  {
67  return mParentLayout;
68  }
70  {
71  if (mParentLayout) {
72  if (widget())
73  mParentLayout->removeWidget(widget());
74  else
75  mParentLayout->removeItem(this);
76  }
77  }
78 
79 protected:
80  QWidget *mParent = nullptr;
81  QLayout *mParentLayout = nullptr;
82 };
83 
88 class KDCHART_EXPORT TextLayoutItem : public AbstractLayoutItem
89 {
90 public:
92  TextLayoutItem(const QString &text,
93  const TextAttributes &attributes,
94  const QObject *autoReferenceArea,
95  KDChartEnums::MeasureOrientation autoReferenceOrientation,
96  Qt::Alignment alignment = {});
97 
98  void setAutoReferenceArea(const QObject *area);
99  const QObject *autoReferenceArea() const;
100 
101  void setText(const QString &text);
102  QString text() const;
103 
104  void setTextAlignment(Qt::Alignment);
105  Qt::Alignment textAlignment() const;
106 
107  void setTextAttributes(const TextAttributes &a);
108  TextAttributes textAttributes() const;
109 
111  bool isEmpty() const override;
113  Qt::Orientations expandingDirections() const override;
115  QSize maximumSize() const override;
117  QSize minimumSize() const override;
119  QSize sizeHint() const override;
121  void setGeometry(const QRect &r) override;
123  QRect geometry() const override;
124 
125  virtual int marginWidth() const;
126 
127  virtual QSize sizeHintUnrotated() const;
128 
129  virtual bool intersects(const TextLayoutItem &other, const QPointF &myPos, const QPointF &otherPos) const;
130  virtual bool intersects(const TextLayoutItem &other, const QPoint &myPos, const QPoint &otherPos) const;
131 
132  virtual qreal realFontSize() const;
133  virtual QFont realFont() const;
134 
135  void paint(QPainter *) override;
136 
137  QPolygon boundingPolygon() const;
138 
139 private:
140  bool maybeUpdateRealFont() const;
141  QSize unrotatedSizeHint(const QFont &fnt = QFont()) const;
142  QSize unrotatedTextSize(QFont fnt = QFont()) const;
143  QSize calcSizeHint(const QFont &font) const;
144  int marginWidth(const QSize &textSize) const;
145 
146  qreal fitFontSizeToGeometry() const;
147 
148  QRect mRect;
149  QString mText;
150  Qt::Alignment mTextAlignment;
151  TextAttributes mAttributes;
152  const QObject *mAutoReferenceArea = nullptr;
154  mutable QSize cachedSizeHint;
155  mutable QPolygon mCachedBoundingPolygon;
156  mutable qreal cachedFontSize = 0.0;
157  mutable QFont cachedFont;
158 };
159 
160 class KDCHART_EXPORT TextBubbleLayoutItem : public AbstractLayoutItem
161 {
162 public:
164  TextBubbleLayoutItem(const QString &text,
165  const TextAttributes &attributes,
166  const QObject *autoReferenceArea,
167  KDChartEnums::MeasureOrientation autoReferenceOrientation,
168  Qt::Alignment alignment = {});
169 
170  ~TextBubbleLayoutItem() override;
171 
172  void setAutoReferenceArea(const QObject *area);
173  const QObject *autoReferenceArea() const;
174 
175  void setText(const QString &text);
176  QString text() const;
177 
178  void setTextAttributes(const TextAttributes &a);
179  TextAttributes textAttributes() const;
180 
182  bool isEmpty() const override;
184  Qt::Orientations expandingDirections() const override;
186  QSize maximumSize() const override;
188  QSize minimumSize() const override;
190  QSize sizeHint() const override;
192  void setGeometry(const QRect &r) override;
194  QRect geometry() const override;
195 
196  void paint(QPainter *painter) override;
197 
198 protected:
199  int borderWidth() const;
200 
201 private:
202  TextLayoutItem *const m_text;
203 };
204 
209 class KDCHART_EXPORT MarkerLayoutItem : public AbstractLayoutItem
210 {
211 public:
213  const MarkerAttributes &marker,
214  const QBrush &brush,
215  const QPen &pen,
216  Qt::Alignment alignment = {});
217 
218  Qt::Orientations expandingDirections() const override;
219  QRect geometry() const override;
220  bool isEmpty() const override;
221  QSize maximumSize() const override;
222  QSize minimumSize() const override;
223  void setGeometry(const QRect &r) override;
224  QSize sizeHint() const override;
225 
226  void paint(QPainter *) override;
227 
228  static void paintIntoRect(
229  QPainter *painter,
230  const QRect &rect,
231  AbstractDiagram *diagram,
232  const MarkerAttributes &marker,
233  const QBrush &brush,
234  const QPen &pen);
235 
236 private:
237  AbstractDiagram *mDiagram;
238  QRect mRect;
239  MarkerAttributes mMarker;
240  QBrush mBrush;
241  QPen mPen;
242 };
243 
248 class KDCHART_EXPORT LineLayoutItem : public AbstractLayoutItem
249 {
250 public:
252  int length,
253  const QPen &pen,
254  Qt::Alignment mLegendLineSymbolAlignment,
255  Qt::Alignment alignment = {});
256 
257  Qt::Orientations expandingDirections() const override;
258  QRect geometry() const override;
259  bool isEmpty() const override;
260  QSize maximumSize() const override;
261  QSize minimumSize() const override;
262  void setGeometry(const QRect &r) override;
263  QSize sizeHint() const override;
264 
265  void setLegendLineSymbolAlignment(Qt::Alignment legendLineSymbolAlignment);
266  virtual Qt::Alignment legendLineSymbolAlignment() const;
267 
268  void paint(QPainter *) override;
269 
270  static void paintIntoRect(
271  QPainter *painter,
272  const QRect &rect,
273  const QPen &pen,
274  Qt::Alignment lineAlignment);
275 
276 private:
277  AbstractDiagram *mDiagram; // TODO: not used. remove it
278  int mLength;
279  QPen mPen;
280  QRect mRect;
281  Qt::Alignment mLegendLineSymbolAlignment;
282 };
283 
288 class KDCHART_EXPORT LineWithMarkerLayoutItem : public AbstractLayoutItem
289 {
290 public:
292  int lineLength,
293  const QPen &linePen,
294  int markerOffs,
295  const MarkerAttributes &marker,
296  const QBrush &markerBrush,
297  const QPen &markerPen,
298  Qt::Alignment alignment = {});
299 
300  Qt::Orientations expandingDirections() const override;
301  QRect geometry() const override;
302  bool isEmpty() const override;
303  QSize maximumSize() const override;
304  QSize minimumSize() const override;
305  void setGeometry(const QRect &r) override;
306  QSize sizeHint() const override;
307 
308  void paint(QPainter *) override;
309 
310 private:
311  AbstractDiagram *mDiagram;
312  QRect mRect;
313  int mLineLength;
314  QPen mLinePen;
315  int mMarkerOffs;
316  MarkerAttributes mMarker;
317  QBrush mMarkerBrush;
318  QPen mMarkerPen;
319 };
320 
325 class KDCHART_EXPORT HorizontalLineLayoutItem : public AbstractLayoutItem
326 {
327 public:
329 
330  Qt::Orientations expandingDirections() const override;
331  QRect geometry() const override;
332  bool isEmpty() const override;
333  QSize maximumSize() const override;
334  QSize minimumSize() const override;
335  void setGeometry(const QRect &r) override;
336  QSize sizeHint() const override;
337 
338  void paint(QPainter *) override;
339 
340 private:
341  QRect mRect;
342 };
343 
348 class KDCHART_EXPORT VerticalLineLayoutItem : public AbstractLayoutItem
349 {
350 public:
352 
353  Qt::Orientations expandingDirections() const override;
354  QRect geometry() const override;
355  bool isEmpty() const override;
356  QSize maximumSize() const override;
357  QSize minimumSize() const override;
358  void setGeometry(const QRect &r) override;
359  QSize sizeHint() const override;
360 
361  void paint(QPainter *) override;
362 
363 private:
364  QRect mRect;
365 };
366 
437 class KDCHART_EXPORT AutoSpacerLayoutItem : public AbstractLayoutItem
438 {
439 public:
441  bool layoutIsAtTopPosition, QHBoxLayout *rightLeftLayout,
442  bool layoutIsAtLeftPosition, QVBoxLayout *topBottomLayout);
443 
444  Qt::Orientations expandingDirections() const override;
445  QRect geometry() const override;
446  bool isEmpty() const override;
447  QSize maximumSize() const override;
448  QSize minimumSize() const override;
449  void setGeometry(const QRect &r) override;
450  QSize sizeHint() const override;
451 
452  void paint(QPainter *) override;
453 
454 private:
455  QRect mRect;
456  bool mLayoutIsAtTopPosition;
457  QHBoxLayout *mRightLeftLayout;
458  bool mLayoutIsAtLeftPosition;
459  QVBoxLayout *mTopBottomLayout;
460 
461  mutable QBrush mCommonBrush;
462  mutable QSize mCachedSize;
463 };
464 }
465 
466 #endif /* KDCHARTLAYOUTITEMS_H */
QT_END_NAMESPACE QRectF rotatedRect(const QRectF &pt, qreal rotation)
static qreal fitFontSizeToGeometry(const QString &text, const QFont &font, const QRectF &geometry, const TextAttributes &ta)
@ MeasureOrientationHorizontal
Definition: KDChartEnums.h:288
AbstractDiagram defines the interface for diagram classes.
AbstractLayoutItem(Qt::Alignment itemAlignment={})
void setParentLayout(QLayout *lay)
virtual void paint(QPainter *)=0
A set of attributes controlling the appearance of data set markers.
Stores information about painting diagrams.
A set of text attributes.

© 2001 Klarälvdalens Datakonsult AB (KDAB)
"The Qt, C++ and OpenGL Experts"
https://www.kdab.com/
https://www.kdab.com/development-resources/qt-tools/kd-chart/
Generated by doxygen 1.9.1