##// END OF EJS Templates
Fix axis geometry when there is no axis title...
Fix axis geometry when there is no axis title SizeHint won't include title padding when there is no title, yet updateGeometry() always assumed it was there when determining space for labels, causing truncated labels when title was missing. Also made missing/empty/hidden axis title work consistently. Now axis geometries should be updated correctly always when title text or visibility status changes. Task-number: QTRD-1903 Reviewed-by: Mika Salmela

File last commit:

r2412:38736d0999b4
r2415:65ea14fdb747
Show More
chartbarcategoryaxisy.cpp
146 lines | 4.3 KiB | text/x-c | CppLexer
/ src / axis / barcategoryaxis / chartbarcategoryaxisy.cpp
Marek Rosa
Added Chart classes for value and categories axis
r1555 /****************************************************************************
Michal Klocek
Adds scroll support for categories axis
r1716 **
** Copyright (C) 2012 Digia Plc
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
** This file is part of the Qt Commercial Charts Add-on.
**
** $QT_BEGIN_LICENSE$
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com
** $QT_END_LICENSE$
**
****************************************************************************/
Marek Rosa
Added Chart classes for value and categories axis
r1555
Marek Rosa
renamed QBarCategoryAxis related files
r1810 #include "chartbarcategoryaxisy_p.h"
Marek Rosa
Added Chart classes for value and categories axis
r1555 #include "chartpresenter_p.h"
Marek Rosa
renamed QBarCategoryAxis related files
r1810 #include "qbarcategoryaxis_p.h"
Michal Klocek
Fixes layout rounding issue
r2306 #include "chartlayout_p.h"
Michal Klocek
Fixes rounding issue with labels numbering
r1720 #include <qmath.h>
Michal Klocek
Refactors layout...
r1965 #include <QFontMetrics>
Michal Klocek
Updates axis drawing code...
r2133 #include <QDebug>
Marek Rosa
Added Chart classes for value and categories axis
r1555
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Refactors internals...
r2273 ChartBarCategoryAxisY::ChartBarCategoryAxisY(QBarCategoryAxis *axis, QGraphicsItem* item)
: VerticalAxis(axis, item, true),
Jani Honkonen
src folder: another massive victory for coding style police
r2131 m_categoriesAxis(axis)
Marek Rosa
Added Chart classes for value and categories axis
r1555 {
Michal Klocek
Fixes layout rounding issue
r2306 QObject::connect( m_categoriesAxis,SIGNAL(categoriesChanged()),this, SLOT(handleCategoriesChanged()));
handleCategoriesChanged();
Marek Rosa
Added Chart classes for value and categories axis
r1555 }
Marek Rosa
Renamed barcategory grephics item class which has been previously ommited
r1918 ChartBarCategoryAxisY::~ChartBarCategoryAxisY()
Marek Rosa
Added Chart classes for value and categories axis
r1555 {
}
Marek Rosa
Renamed barcategory grephics item class which has been previously ommited
r1918 QVector<qreal> ChartBarCategoryAxisY::calculateLayout() const
Marek Rosa
Added Chart classes for value and categories axis
r1555 {
QVector<qreal> points;
Michal Klocek
Reimplement zoom/scroll hanling for barcategoryaxis Y
r2145 const QRectF& gridRect = gridGeometry();
qreal range = max() - min();
const qreal delta = gridRect.height()/range;
Marek Rosa
Added Chart classes for value and categories axis
r1555
Michal Klocek
Reimplement zoom/scroll hanling for barcategoryaxis Y
r2145 if(delta<2) return points;
Michal Klocek
Refactors axis updateGeometry handling...
r2111
qreal offset = - min() - 0.5;
Michal Klocek
Reimplement zoom/scroll hanling for barcategoryaxis Y
r2145 offset = int(offset * delta)%int(delta);
Michal Klocek
Adds scroll support for categories axis
r1716
Michal Klocek
Reimplement zoom/scroll hanling for barcategoryaxis Y
r2145 int count = qFloor(range);
if(count < 1 ) return points;
Michal Klocek
Bugfixes for layout...
r1837
Michal Klocek
Reimplement zoom/scroll hanling for barcategoryaxis Y
r2145 points.resize(count+2);
Michal Klocek
Adds scroll support for categories axis
r1716
Michal Klocek
Reimplement zoom/scroll hanling for barcategoryaxis Y
r2145 for (int i = 0; i < count+2; ++i) {
points[i] = gridRect.bottom() - i * delta -offset;
Marek Rosa
Added Chart classes for value and categories axis
r1555 }
Michal Klocek
Reimplement zoom/scroll hanling for barcategoryaxis Y
r2145
Marek Rosa
Added Chart classes for value and categories axis
r1555 return points;
}
Marek Rosa
Renamed barcategory grephics item class which has been previously ommited
r1918 QStringList ChartBarCategoryAxisY::createCategoryLabels(const QVector<qreal>& layout) const
Michal Klocek
Fixes rounding issue with labels numbering
r1720 {
QStringList result;
Jani Honkonen
src folder: another massive victory for coding style police
r2131 const QRectF &gridRect = gridGeometry();
qreal d = (max() - min()) / gridRect.height();
Michal Klocek
Reimplement zoom/scroll hanling for barcategoryaxis Y
r2145
Jani Honkonen
src folder: another massive victory for coding style police
r2131 for (int i = 0; i < layout.count() - 1; ++i) {
qreal x = qFloor(((gridRect.height() - (layout[i + 1] + layout[i]) / 2 + gridRect.top()) * d + min() + 0.5));
Michal Klocek
Refactors layout:...
r2105 if ((x < m_categoriesAxis->categories().count()) && (x >= 0)) {
Michal Klocek
Fixes rounding issue with labels numbering
r1720 result << m_categoriesAxis->categories().at(x);
Jani Honkonen
src folder: another massive victory for coding style police
r2131 } else {
Michal Klocek
Refactors layout:...
r2105 // No label for x coordinate
result << "";
}
Michal Klocek
Fixes rounding issue with labels numbering
r1720 }
result << "";
return result;
}
Marek Rosa
Renamed barcategory grephics item class which has been previously ommited
r1918 void ChartBarCategoryAxisY::updateGeometry()
Marek Rosa
Added Chart classes for value and categories axis
r1555 {
const QVector<qreal>& layout = ChartAxis::layout();
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (layout.isEmpty())
return;
Michal Klocek
Refactors axis updateGeometry handling...
r2111 setLabels(createCategoryLabels(layout));
VerticalAxis::updateGeometry();
Marek Rosa
Added Chart classes for value and categories axis
r1555 }
Michal Klocek
Fixes layout rounding issue
r2306 void ChartBarCategoryAxisY::handleCategoriesChanged()
Michal Klocek
Fixes missing update barcategory...
r1643 {
Michal Klocek
Fixes layout rounding issue
r2306 QGraphicsLayoutItem::updateGeometry();
if(presenter()) presenter()->layout()->invalidate();
Michal Klocek
Fixes missing update barcategory...
r1643 }
Jani Honkonen
src folder: another massive victory for coding style police
r2131 QSizeF ChartBarCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
Michal Klocek
Refactors layout...
r1965 {
Q_UNUSED(constraint)
Michal Klocek
Refactors axis updateGeometry handling...
r2111 QFontMetrics fn(font());
Michal Klocek
Refactors layout...
r1965 QSizeF sh;
Michal Klocek
Refactors ChartAxis...
r2138 QSizeF base = VerticalAxis::sizeHint(which, constraint);
Michal Klocek
Fixes layout rounding issue
r2306 QStringList ticksList = m_categoriesAxis->categories();
Michal Klocek
Updates axis drawing code...
r2133 qreal width=0;
qreal height=0;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 switch (which) {
case Qt::MinimumSize: {
QRectF boundingRect = labelBoundingRect(fn, "...");
width = boundingRect.width() + labelPadding();
width += base.width();
if (base.width() > 0)
width += labelPadding();
height = qMax(boundingRect.height(), base.height());
sh = QSizeF(width, height);
Michal Klocek
Updates axis drawing code...
r2133 break;
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 }
Michal Klocek
Updates axis drawing code...
r2133 case Qt::PreferredSize:{
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 int labelWidth = 0;
foreach (const QString& s, ticksList) {
QRect rect = labelBoundingRect(fn, s);
labelWidth = qMax(rect.width(), labelWidth);
height += rect.height();
Michal Klocek
Updates axis drawing code...
r2133 }
Miikka Heikkinen
Fix axis sizehints when labels are angled...
r2412 width = labelWidth + labelPadding() + 1;
width += base.width();
if (base.width() > 0)
width += labelPadding();
height = qMax(height, base.height());
sh = QSizeF(width, height);
Michal Klocek
Updates axis drawing code...
r2133 break;
}
default:
break;
}
return sh;
Michal Klocek
Refactors layout...
r1965 }
Michal Klocek
Fixes layout rounding issue
r2306 #include "moc_chartbarcategoryaxisy_p.cpp"
Marek Rosa
Added Chart classes for value and categories axis
r1555 QTCOMMERCIALCHART_END_NAMESPACE