##// END OF EJS Templates
Added possibility to set labels position for QCategoryAxis...
Added possibility to set labels position for QCategoryAxis The position of the labels in QCategyAxis can now be set to center of the category or to the high end of the category. The first and the last labels may overlap with other axes labels when positioned on value. Change-Id: Ide0f12b723ffabf6682001e03ea5080f9642da22 Task-number: QTRD-1715 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>

File last commit:

r2776:bc1f6aa59d42
r2780:740f4f94adf8
Show More
chartdatetimeaxisy.cpp
132 lines | 4.3 KiB | text/x-c | CppLexer
/ src / charts / axis / datetimeaxis / chartdatetimeaxisy.cpp
Marek Rosa
Added QDateTimeAxis
r1717 /****************************************************************************
**
Titta Heikkala
Copyright header changes...
r2776 ** Copyright (C) 2015 The Qt Company Ltd
Marek Rosa
Added QDateTimeAxis
r1717 ** All rights reserved.
Titta Heikkala
Copyright header changes...
r2776 ** For any questions to The Qt Company, please use contact form at http://qt.io
Marek Rosa
Added QDateTimeAxis
r1717 **
Titta Heikkala
Updated license headers...
r2740 ** This file is part of the Qt Charts module.
Marek Rosa
Added QDateTimeAxis
r1717 **
Titta Heikkala
Updated license headers...
r2740 ** Licensees holding valid commercial license for Qt may use this file in
** accordance with the Qt License Agreement provided with the Software
** or, alternatively, in accordance with the terms contained in a written
Titta Heikkala
Copyright header changes...
r2776 ** agreement between you and The Qt Company.
Marek Rosa
Added QDateTimeAxis
r1717 **
** If you have questions regarding the use of this file, please use
Titta Heikkala
Updated license headers...
r2740 ** contact form at http://qt.io
Marek Rosa
Added QDateTimeAxis
r1717 **
****************************************************************************/
Titta Heikkala
Fix include syntax...
r2714 #include <private/chartdatetimeaxisy_p.h>
#include <private/chartpresenter_p.h>
#include <QtCharts/QDateTimeAxis>
#include <private/abstractchartlayout_p.h>
#include <QtWidgets/QGraphicsLayout>
#include <QtCore/QDateTime>
#include <QtCore/QtMath>
Michal Klocek
Refactor animator...
r1735
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Marek Rosa
Added QDateTimeAxis
r1717
Miikka Heikkinen
Add Polar chart support...
r2483 ChartDateTimeAxisY::ChartDateTimeAxisY(QDateTimeAxis *axis, QGraphicsItem *item)
Michal Klocek
Refactors internals...
r2273 : VerticalAxis(axis, item),
Jani Honkonen
src folder: another massive victory for coding style police
r2131 m_axis(axis)
Marek Rosa
Added QDateTimeAxis
r1717 {
Miikka Heikkinen
Add Polar chart support...
r2483 QObject::connect(m_axis, SIGNAL(tickCountChanged(int)), this, SLOT(handleTickCountChanged(int)));
QObject::connect(m_axis, SIGNAL(formatChanged(QString)), this, SLOT(handleFormatChanged(QString)));
Marek Rosa
Added QDateTimeAxis
r1717 }
ChartDateTimeAxisY::~ChartDateTimeAxisY()
{
}
QVector<qreal> ChartDateTimeAxisY::calculateLayout() const
{
Michal Klocek
Refactors internals...
r2273 int tickCount = m_axis->tickCount();
Q_ASSERT(tickCount >= 2);
Marek Rosa
Added QDateTimeAxis
r1717
QVector<qreal> points;
Michal Klocek
Refactors internals...
r2273 points.resize(tickCount);
Jani Honkonen
src folder: another massive victory for coding style police
r2131 const QRectF &gridRect = gridGeometry();
Miikka Heikkinen
Fix int-qreal rounding errors in axislayout calculations...
r2447 const qreal deltaY = gridRect.height() / (qreal(tickCount) - 1.0);
for (int i = 0; i < tickCount; ++i)
points[i] = qreal(i) * -deltaY + gridRect.bottom();
Marek Rosa
Added QDateTimeAxis
r1717
return points;
}
void ChartDateTimeAxisY::updateGeometry()
{
Miikka Heikkinen
Add Polar chart support...
r2483 const QVector<qreal> &layout = ChartAxisElement::layout();
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (layout.isEmpty())
return;
Miikka Heikkinen
Add Polar chart support...
r2483 setLabels(createDateTimeLabels(min(), max(), layout.size(), m_axis->format()));
Michal Klocek
Refactors axis updateGeometry handling...
r2111 VerticalAxis::updateGeometry();
Marek Rosa
Added QDateTimeAxis
r1717 }
Michal Klocek
Refactors internals...
r2273 void ChartDateTimeAxisY::handleTickCountChanged(int tick)
Marek Rosa
Added QDateTimeAxis
r1717 {
Michal Klocek
Refactors internals...
r2273 Q_UNUSED(tick)
Michal Klocek
Fixes more missing update layout calls
r2334 QGraphicsLayoutItem::updateGeometry();
Miikka Heikkinen
Add Polar chart support...
r2483 if (presenter())
presenter()->layout()->invalidate();
Marek Rosa
Added QDateTimeAxis
r1717 }
Marek Rosa
Fixed: datetimeaxis not redrawing when datetime format changed
r2326 void ChartDateTimeAxisY::handleFormatChanged(const QString &format)
{
Q_UNUSED(format);
Michal Klocek
Fixes more missing update layout calls
r2334 QGraphicsLayoutItem::updateGeometry();
Miikka Heikkinen
Add Polar chart support...
r2483 if (presenter())
presenter()->layout()->invalidate();
Marek Rosa
Fixed: datetimeaxis not redrawing when datetime format changed
r2326 }
Jani Honkonen
src folder: another massive victory for coding style police
r2131 QSizeF ChartDateTimeAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
Michal Klocek
Refactors layout...
r1965 {
Q_UNUSED(constraint)
QSizeF sh;
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 QSizeF base = VerticalAxis::sizeHint(which, constraint);
Miikka Heikkinen
Add Polar chart support...
r2483 QStringList ticksList = createDateTimeLabels(min(), max(), m_axis->tickCount(), m_axis->format());
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 qreal width = 0;
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 // Height of vertical axis sizeHint indicates the maximum distance labels can extend past
// first and last ticks. Base height is irrelevant.
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 qreal height = 0;
Michal Klocek
Refactors layout:...
r2105
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 if (ticksList.empty())
Michal Klocek
Refactors internals...
r2273 return sh;
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 switch (which) {
case Qt::MinimumSize: {
Titta Heikkala
Qt Charts project file structure change...
r2712 QRectF boundingRect = ChartPresenter::textBoundingRect(axis()->labelsFont(),
QStringLiteral("..."),
axis()->labelsAngle());
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 width = boundingRect.width() + labelPadding() + base.width() + 1.0;
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 height = boundingRect.height() / 2.0;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 sh = QSizeF(width, height);
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 break;
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 }
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 case Qt::PreferredSize: {
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 qreal labelWidth = 0.0;
qreal firstHeight = -1.0;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 foreach (const QString& s, ticksList) {
Miikka Heikkinen
Added HTML support for various text items...
r2539 QRectF rect = ChartPresenter::textBoundingRect(axis()->labelsFont(), s, axis()->labelsAngle());
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 labelWidth = qMax(rect.width(), labelWidth);
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 height = rect.height();
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 if (firstHeight < 0.0)
Miikka Heikkinen
Fix vanishing labels for first and last ticks....
r2443 firstHeight = height;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 }
Miikka Heikkinen
Fix multiline axis label positioning....
r2534 width = labelWidth + labelPadding() + base.width() + 2.0; //two pixels of tolerance
height = qMax(height, firstHeight) / 2.0;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 sh = QSizeF(width, height);
Michal Klocek
Adds sizeHints for datetimeaxis
r2137 break;
}
default:
Jani Honkonen
src folder: another massive victory for coding style police
r2131 break;
}
Michal Klocek
Refactors layout...
r1965
Jani Honkonen
src folder: another massive victory for coding style police
r2131 return sh;
Michal Klocek
Refactors layout...
r1965 }
Marek Rosa
Added QDateTimeAxis
r1717
Michal Klocek
Refactors internals...
r2273 #include "moc_chartdatetimeaxisy_p.cpp"
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE