12 #include "KDChartPolarDiagram_p.h"
15 #include "KDChartPainterSaver_p.h"
18 #include <KDABLibFakes>
22 PolarDiagram::Private::Private()
26 PolarDiagram::Private::~Private()
42 void PolarDiagram::init()
76 newDiagram->d->showDelimitersAtPosition =
d->showDelimitersAtPosition;
77 newDiagram->d->showLabelsAtPosition =
d->showLabelsAtPosition;
78 newDiagram->d->rotateCircularLabels =
d->rotateCircularLabels;
79 newDiagram->d->closeDatasets =
d->closeDatasets;
86 return QPair<QPointF, QPointF>(QPointF(0, 0), QPointF(0, 0));
87 const int rowCount = model()->rowCount(rootIndex());
88 const int colCount = model()->columnCount(rootIndex());
90 qreal xMax = colCount;
91 qreal yMin = 0, yMax = 0;
92 for (
int iCol = 0; iCol < colCount; ++iCol) {
93 for (
int iRow = 0; iRow <
rowCount; ++iRow) {
94 qreal value = model()->data(model()->index(iRow, iCol, rootIndex())).toReal();
95 yMax = qMax(yMax, value);
96 yMin = qMin(yMin, value);
99 QPointF bottomLeft(QPointF(xMin, yMin));
100 QPointF topRight(QPointF(xMax, yMax));
101 return QPair<QPointF, QPointF>(bottomLeft, topRight);
106 QPainter painter(viewport());
126 qreal dummy1, dummy2;
127 paint(ctx,
true, dummy1, dummy2);
128 paint(ctx,
false, dummy1, dummy2);
132 bool calculateListAndReturnScale,
133 qreal &newZoomX, qreal &newZoomY)
139 d->reverseMapper.clear();
141 const int rowCount = model()->rowCount(rootIndex());
142 const int colCount = model()->columnCount(rootIndex());
144 if (calculateListAndReturnScale) {
146 d->labelPaintCache.clear();
148 for (
int iCol = 0; iCol < colCount; ++iCol) {
149 for (
int iRow = 0; iRow <
rowCount; ++iRow) {
150 QModelIndex index = model()->index(iRow, iCol, rootIndex());
151 const qreal value = model()->data(index).toReal();
153 QPointF(value, iRow))
164 if (
d->labelPaintCache.paintReplay.count()) {
166 const qreal oldZoomX = newZoomX;
167 const qreal oldZoomY = newZoomY;
170 d->paintDataValueTextsAndMarkers(ctx,
d->labelPaintCache,
true,
true, &txtRectF);
171 const QRect txtRect = txtRectF.toRect();
173 const qreal gapX = qMin(txtRect.left() - curRect.left(), curRect.right() - txtRect.right());
174 const qreal gapY = qMin(txtRect.top() - curRect.top(), curRect.bottom() - txtRect.bottom());
176 newZoomX = oldZoomX * (1.0 + (gapX - 1.0) / curRect.width());
179 newZoomY = oldZoomY * (1.0 + (gapY - 1.0) / curRect.height());
184 for (
int iCol = 0; iCol < colCount; ++iCol) {
191 for (
int iRow = 0; iRow <
rowCount; ++iRow) {
192 QModelIndex index = model()->index(iRow, iCol, rootIndex());
193 const qreal value = model()->data(index).toReal();
196 polygon.append(point);
201 polygon.append(polygon.first());
204 PainterSaver painterSaver(ctx->
painter());
205 ctx->
painter()->setRenderHint(QPainter::Antialiasing);
208 if (p.style() != Qt::NoPen) {
210 ctx->
painter()->drawPolyline(polygon);
213 d->paintDataValueTextsAndMarkers(ctx,
d->labelPaintCache,
true);
224 return model()->rowCount(rootIndex());
230 return model() ? model()->rowCount(rootIndex()) : 0.0;
242 qWarning() <<
"Deprecated PolarDiagram::setZeroDegreePosition() called, setting ignored.";
247 qWarning() <<
"Deprecated PolarDiagram::zeroDegreePosition() called.";
258 return d->rotateCircularLabels;
268 return d->closeDatasets;
274 d->showDelimitersAtPosition[position.
value()] = showDelimiters;
280 d->showLabelsAtPosition[position.
value()] = showLabels;
285 return d->showDelimitersAtPosition[position.
value()];
290 return d->showLabelsAtPosition[position.
value()];
virtual const QPointF translate(const QPointF &diagramPoint) const =0
virtual qreal zoomFactorY() const
virtual qreal zoomFactorX() const
QRect geometry() const override
virtual bool checkInvariants(bool justReturnTheStatus=false) const
AbstractCoordinatePlane * coordinatePlane() const
Base class for diagrams based on a polar coordinate system.
Stores information about painting diagrams.
void setPainter(QPainter *painter)
void setRectangle(const QRectF &rect)
const QRectF rectangle() const
QPainter * painter() const
PolarDiagram defines a common polar diagram.
PolarDiagram(QWidget *parent=nullptr, PolarCoordinatePlane *plane=nullptr)
void setShowDelimitersAtPosition(Position position, bool showDelimiters)
void setRotateCircularLabels(bool rotateCircularLabels)
Q_DECL_DEPRECATED int zeroDegreePosition() const
bool closeDatasets() const
bool rotateCircularLabels() const
void setShowLabelsAtPosition(Position position, bool showLabels)
void paintEvent(QPaintEvent *) override
virtual PolarDiagram * clone() const
void paint(PaintContext *paintContext) override
qreal numberOfValuesPerDataset() const override
Q_DECL_DEPRECATED void setZeroDegreePosition(int degrees)
void resize(const QSizeF &area) override
virtual void paintPolarMarkers(PaintContext *ctx, const QPolygonF &polygon)
void setCloseDatasets(bool closeDatasets)
void resizeEvent(QResizeEvent *) override
qreal valueTotals() const override
const QPair< QPointF, QPointF > calculateDataBoundaries() const override
qreal numberOfGridRings() const override
bool showDelimitersAtPosition(Position position) const
bool showLabelsAtPosition(Position position) const
Stores the absolute target points of a Position.
Defines a position, using compass terminology.
static const Position & West
static const Position & South
static const Position & Floating
static const Position & North
static const Position & SouthWest
static const Position & NorthEast
static const Position & NorthWest
static const Position & SouthEast
static const Position & East
KDChartEnums::PositionValue value() const
static const Position & Center
static const Position & Unknown
static QPen scalePen(const QPen &pen)