KD Chart API Documentation 3.1
Loading...
Searching...
No Matches
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
23
24QT_BEGIN_NAMESPACE
25class QPainter;
26QT_END_NAMESPACE
27
28// TODO remove
29QRectF rotatedRect(const QRectF &pt, qreal rotation);
30
31namespace KDChart {
32class AbstractDiagram;
33class PaintContext;
34
39class KDCHART_EXPORT AbstractLayoutItem : public QLayoutItem
40{
41public:
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
62 {
63 mParentLayout = lay;
64 }
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
79protected:
80 QWidget *mParent = nullptr;
81 QLayout *mParentLayout = nullptr;
82};
83
88class KDCHART_EXPORT TextLayoutItem : public AbstractLayoutItem
89{
90public:
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
139private:
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
160class KDCHART_EXPORT TextBubbleLayoutItem : public AbstractLayoutItem
161{
162public:
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
198protected:
199 int borderWidth() const;
200
201private:
202 TextLayoutItem *const m_text;
203};
204
209class KDCHART_EXPORT MarkerLayoutItem : public AbstractLayoutItem
210{
211public:
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
236private:
237 AbstractDiagram *mDiagram;
238 QRect mRect;
239 MarkerAttributes mMarker;
240 QBrush mBrush;
241 QPen mPen;
242};
243
248class KDCHART_EXPORT LineLayoutItem : public AbstractLayoutItem
249{
250public:
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
276private:
277 AbstractDiagram *mDiagram; // TODO: not used. remove it
278 int mLength;
279 QPen mPen;
280 QRect mRect;
281 Qt::Alignment mLegendLineSymbolAlignment;
282};
283
288class KDCHART_EXPORT LineWithMarkerLayoutItem : public AbstractLayoutItem
289{
290public:
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
310private:
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
325class KDCHART_EXPORT HorizontalLineLayoutItem : public AbstractLayoutItem
326{
327public:
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
340private:
341 QRect mRect;
342};
343
348class KDCHART_EXPORT VerticalLineLayoutItem : public AbstractLayoutItem
349{
350public:
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
363private:
364 QRect mRect;
365};
366
437class KDCHART_EXPORT AutoSpacerLayoutItem : public AbstractLayoutItem
438{
439public:
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
454private:
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
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.
typedef Alignment
typedef Orientations

© 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 on Wed May 1 2024 00:01:10 for KD Chart API Documentation by doxygen 1.9.8