19 #include <KDABLibFakes>
26 qDebug(
"Calling PolarGrid::calculateGrid()");
31 l = rawDataDimensions;
39 const qreal origResult = f.pointSizeF();
40 qreal result = origResult;
41 const QSizeF mySize = geometry.size();
45 const QString t = text;
50 if (textSize.height() <= mySize.height() && textSize.width() <= mySize.width())
56 f.setPointSizeF(result);
64 result -= sourceRect.topLeft();
65 result.setX(result.x() / sourceRect.width() * destRect.width());
66 result.setY(result.y() / sourceRect.height() * destRect.height());
67 result += destRect.topLeft();
71 QPointF
scaleToRect(
const QPointF &origin,
const QRectF &sourceRect,
const QRectF &destRect)
73 QPointF result(origin);
74 result -= sourceRect.topLeft();
75 result.setX(result.x() / sourceRect.width() * destRect.width());
76 result.setY(result.y() / sourceRect.height() * destRect.height());
77 result += destRect.topLeft();
83 const QBrush backupBrush(context->
painter()->brush());
84 context->
painter()->setBrush(QBrush());
87 Q_ASSERT(plane->diagram());
88 QPair<QPointF, QPointF> boundaries = plane->diagram()->dataBoundaries();
89 Q_ASSERT_X(plane,
"PolarGrid::drawGrid",
90 "Bad function call: PaintContext::coodinatePlane() NOT a polar plane.");
92 const GridAttributes gridAttrsCircular(plane->gridAttributes(
true));
93 const GridAttributes gridAttrsSagittal(plane->gridAttributes(
false));
105 if (
dynamic_cast<PieDiagram *
>(plane->diagrams().first()))
110 QPointF origin = plane->translate(QPointF(min, 0)) + context->
rectangle().topLeft();
119 QPointF topLeft = context->
rectangle().topLeft();
120 Q_ASSERT(plane->diagram()->model());
122 const int numberOfSpokes = ( int )(360 / plane->angleUnit());
126 QAbstractItemModel *model = plane->diagram()->model();
128 fontRect.setSize(QSizeF(fontRect.width(), step / 2.0));
130 QFont labelFont = ta.
font();
132 labelFont.setPointSizeF(labelFontSize);
133 const QFontMetricsF metric(labelFont);
134 const qreal labelHeight = metric.height();
136 destRect.setY(destRect.y() + 2 * labelHeight);
137 destRect.setHeight(destRect.height() - 4 * labelHeight);
138 offset.setY(labelHeight);
144 const qreal aWidth = metric.horizontalAdvance(QString::fromLatin1(
"A"));
146 for (
int i = 0; i < model->rowCount(); ++i) {
148 const int angle = ( int )startLine.angleTo(currentLine) % 360;
149 const qreal angleTest = qAbs(angle - 180);
150 const QString data = model->headerData(i, Qt::Vertical).toString();
151 const qreal xOffset = metric.horizontalAdvance(data) / 2.0;
153 context->
painter()->drawText(currentLine.pointAt(1) + QPointF(-xOffset, labelHeight + qAbs(min)), data);
154 else if (qAbs(angleTest - 180) < 5.0)
155 context->
painter()->drawText(currentLine.pointAt(1) - QPointF(xOffset, labelHeight + qAbs(min)), data);
156 else if (angle < 175 && angle > 5)
157 context->
painter()->drawText(currentLine.pointAt(1) - QPointF(xOffset * 2 + qAbs(min) + aWidth, -labelHeight / 2.0 + qAbs(min)), data);
158 else if (angle < 355 && angle > 185)
159 context->
painter()->drawText(currentLine.pointAt(1) + QPointF(qAbs(min) + aWidth, labelHeight / 2.0 + qAbs(min)), data);
163 if (plane->globalGridAttributes().isGridVisible()) {
166 for (
int i = 0; i < numberOfSpokes; ++i) {
168 context->
painter()->drawLine(oldPoint, newPoint);
171 context->
painter()->drawLine(origin, newPoint);
177 const QString text = QString::number(i * stepWidth);
179 const QFontMetrics metric(ta.
font() );
180 const qreal textLength = metric.horizontalAdvance(text);
181 const qreal textHeight = metric.height() / 2.0;
182 QPointF textOffset(textLength, -textHeight);
184 QPointF _topLeft = topLeft;
185 _topLeft.setY(translatedPoint.y());
186 QRectF boundary(_topLeft, (translatedPoint + QPointF(0, step / 2.0)));
188 if (fontSize != calcFontSize) {
189 QFont paintFont(ta.
font());
190 paintFont.setPointSizeF(calcFontSize);
193 const qreal textHeight2 = QFontMetricsF(paintFont).height() / 2.0;
194 textOffset.setY(-textHeight2);
196 context->
painter()->setFont(paintFont);
197 fontSize = calcFontSize;
199 context->
painter()->drawText(translatedPoint + destRect.topLeft() - textOffset, text);
202 plane->setTextAttributes(ta);
204 context->
painter()->setBrush(backupBrush);
QRectF rotatedRect(const QRectF &rect, qreal rotation)
QPointF scaleToRect(const QPointF &origin, const QRectF &sourceRect, const QRectF &destRect)
static qreal fitFontSizeToGeometry(const QString &text, const QFont &font, const QRectF &geometry, const TextAttributes &ta)
QPointF scaleToRealPosition(const QPointF &origin, const QRectF &sourceRect, const QRectF &destRect, const AbstractCoordinatePlane &plane)
Base class common for all coordinate planes, CartesianCoordinatePlane, PolarCoordinatePlane,...
virtual const QPointF translate(const QPointF &diagramPoint) const =0
const QPair< QPointF, QPointF > dataBoundaries() const
Return the bottom left and top right data point, that the diagram will display (unless the grid adjus...
Base class for diagrams based on a polar coordinate system.
virtual qreal numberOfGridRings() const =0
A set of attributes controlling the appearance of grids.
bool isGridVisible() const
Stores information about painting diagrams.
const QRectF rectangle() const
AbstractCoordinatePlane * coordinatePlane() const
QPainter * painter() const
PieDiagram defines a common pie diagram.
static QPen scalePen(const QPen &pen)
void drawGrid(PaintContext *context) override
A set of text attributes.
void setFontSize(const Measure &measure)
void setFont(const QFont &font)
QList< DataDimension > DataDimensionsList