1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QTGRAPHS_QPIESERIES_H
5#define QTGRAPHS_QPIESERIES_H
6
7#include <QtGraphs/qabstractseries.h>
8#include <QtGraphs/qgraphsglobal.h>
9#include <QtGraphs/qpieslice.h>
10
11QT_BEGIN_NAMESPACE
12
13class QPieSeriesPrivate;
14
15class Q_GRAPHS_EXPORT QPieSeries : public QAbstractSeries
16{
17 Q_OBJECT
18 Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
19 Q_PROPERTY(qreal horizontalPosition READ horizontalPosition WRITE setHorizontalPosition NOTIFY
20 horizontalPositionChanged FINAL)
21 Q_PROPERTY(qreal verticalPosition READ verticalPosition WRITE setVerticalPosition NOTIFY
22 verticalPositionChanged FINAL)
23 Q_PROPERTY(qreal pieSize READ pieSize WRITE setPieSize NOTIFY pieSizeChanged FINAL)
24 Q_PROPERTY(qreal startAngle READ startAngle WRITE setStartAngle NOTIFY startAngleChanged FINAL)
25 Q_PROPERTY(qreal endAngle READ endAngle WRITE setEndAngle NOTIFY endAngleChanged FINAL)
26 Q_PROPERTY(qsizetype count READ count NOTIFY countChanged FINAL)
27 Q_PROPERTY(qreal sum READ sum NOTIFY sumChanged FINAL)
28 Q_PROPERTY(qreal holeSize READ holeSize WRITE setHoleSize NOTIFY holeSizeChanged FINAL)
29 Q_PROPERTY(qreal angleSpanVisibleLimit READ angleSpanVisibleLimit WRITE setAngleSpanVisibleLimit
30 NOTIFY angleSpanVisibleLimitChanged REVISION(6, 10))
31 Q_PROPERTY(LabelVisibility angleSpanLabelVisibility READ angleSpanLabelVisibility
32 WRITE setAngleSpanLabelVisibility NOTIFY angleSpanLabelVisibilityChanged REVISION(6, 10))
33 QML_NAMED_ELEMENT(PieSeries)
34
35public:
36 enum class LabelVisibility {
37 None,
38 First,
39 Even,
40 Odd,
41 };
42 Q_ENUM(LabelVisibility)
43
44 explicit QPieSeries(QObject *parent = nullptr);
45 ~QPieSeries() override;
46 QAbstractSeries::SeriesType type() const override;
47
48 Q_INVOKABLE bool append(QPieSlice *slice);
49 Q_INVOKABLE bool append(const QList<QPieSlice *> &slices);
50 Q_INVOKABLE bool insert(qsizetype index, QPieSlice *slice);
51 Q_INVOKABLE bool remove(QPieSlice *slice);
52 Q_INVOKABLE void clear();
53 Q_INVOKABLE QPieSlice *append(const QString &label, qreal value);
54 Q_INVOKABLE QPieSlice *at(qsizetype index);
55 Q_INVOKABLE QPieSlice *find(const QString &label);
56 Q_INVOKABLE bool replace(qsizetype index, QPieSlice *slice);
57 Q_INVOKABLE void removeMultiple(qsizetype index, int count);
58 Q_INVOKABLE bool remove(qsizetype index);
59 Q_INVOKABLE bool replace(QPieSlice *oldSlice, QPieSlice *newSlice);
60 Q_INVOKABLE bool replace(const QList<QPieSlice *> &slices);
61 Q_INVOKABLE bool take(QPieSlice *slice);
62
63 QPieSeries &operator<<(QPieSlice *slice);
64
65 QList<QPieSlice *> slices() const;
66 qsizetype count() const;
67
68 bool isEmpty() const;
69
70 qreal sum() const;
71
72 void setHorizontalPosition(qreal relativePosition);
73 qreal horizontalPosition() const;
74
75 void setVerticalPosition(qreal relativePosition);
76 qreal verticalPosition() const;
77 void setPieSize(qreal relativeSize);
78 qreal pieSize() const;
79
80 void setStartAngle(qreal startAngle);
81 qreal startAngle() const;
82
83 void setEndAngle(qreal endAngle);
84 qreal endAngle() const;
85
86 void setHoleSize(qreal holeSize);
87 qreal holeSize() const;
88
89 void setLabelsVisible(bool visible);
90 void setLabelsPosition(QPieSlice::LabelPosition position);
91
92 qreal angleSpanVisibleLimit() const;
93 void setAngleSpanVisibleLimit(qreal newAngleSpanVisibleLimit);
94
95 LabelVisibility angleSpanLabelVisibility() const;
96 void setAngleSpanLabelVisibility(LabelVisibility newAngleSpanVisibleMode);
97
98public Q_SLOTS:
99 void handleSliceChange();
100
101protected:
102 QPieSeries(QPieSeriesPrivate &dd, QObject *parent = nullptr);
103 void componentComplete() override;
104
105Q_SIGNALS:
106 void added(const QList<QPieSlice *> &slices);
107 void removed(const QList<QPieSlice *> &slices);
108 void replaced(const QList<QPieSlice *> &slices);
109 void countChanged();
110 void sumChanged();
111 void pieSizeChanged();
112 void startAngleChanged();
113 void endAngleChanged();
114 void horizontalPositionChanged();
115 void verticalPositionChanged();
116 void holeSizeChanged();
117
118 Q_REVISION(6, 9) void clicked(QPieSlice *slice);
119 Q_REVISION(6, 9) void doubleClicked(QPieSlice *slice);
120 Q_REVISION(6, 9) void pressed(QPieSlice *slice);
121 Q_REVISION(6, 9) void released(QPieSlice *slice);
122
123 Q_REVISION(6, 10) void angleSpanVisibleLimitChanged(qreal limit);
124 Q_REVISION(6, 10) void angleSpanLabelVisibilityChanged(LabelVisibility visibility);
125
126private:
127 friend class PieRenderer;
128 Q_DECLARE_PRIVATE(QPieSeries)
129 Q_DISABLE_COPY(QPieSeries)
130};
131
132QT_END_NAMESPACE
133
134#endif // QTGRAPHS_QPIESERIES_H
135

source code of qtgraphs/src/graphs2d/piechart/qpieseries.h