##// END OF EJS Templates
Fix issues based on android testing...
Fix issues based on android testing -Some includes were missing -Widgets got on top of each other on openglSeries example -qmloscilloscope didn't show button texts properly Change-Id: I96cb64091275269f73d2a569ff53c2baae8b0f66 Reviewed-by: Titta Heikkala <titta.heikkala@theqtcompany.com>

File last commit:

r2826:78282651dc64
r2826:78282651dc64
Show More
chartpresenter.cpp
570 lines | 16.2 KiB | text/x-c | CppLexer
/ src / charts / chartpresenter.cpp
Jani Honkonen
Add license headers
r794 /****************************************************************************
Michal Klocek
Fixes header guard style issues
r969 **
Titta Heikkala
Copyright header changes...
r2776 ** Copyright (C) 2015 The Qt Company Ltd
Michal Klocek
Fixes header guard style issues
r969 ** All rights reserved.
Titta Heikkala
Copyright header changes...
r2776 ** For any questions to The Qt Company, please use contact form at http://qt.io
Michal Klocek
Fixes header guard style issues
r969 **
Titta Heikkala
Updated license headers...
r2740 ** This file is part of the Qt Charts module.
Michal Klocek
Fixes header guard style issues
r969 **
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.
Michal Klocek
Fixes header guard style issues
r969 **
** If you have questions regarding the use of this file, please use
Titta Heikkala
Updated license headers...
r2740 ** contact form at http://qt.io
Michal Klocek
Fixes header guard style issues
r969 **
****************************************************************************/
Titta Heikkala
Fix include syntax...
r2714 #include <private/chartpresenter_p.h>
#include <QtCharts/QChart>
#include <private/chartitem_p.h>
#include <private/qchart_p.h>
#include <QtCharts/QAbstractAxis>
#include <private/qabstractaxis_p.h>
#include <private/chartdataset_p.h>
#include <private/chartanimation_p.h>
#include <private/qabstractseries_p.h>
#include <QtCharts/QAreaSeries>
#include <private/chartaxiselement_p.h>
#include <private/chartbackground_p.h>
#include <private/cartesianchartlayout_p.h>
#include <private/polarchartlayout_p.h>
#include <private/charttitle_p.h>
#include <QtCore/QTimer>
#include <QtGui/QTextDocument>
Miikka Heikkinen
Fix issues based on android testing...
r2826 #include <QtWidgets/QGraphicsScene>
Michal Klocek
Refactors qchart , adds line animation...
r131
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Michal Klocek
Refactors qchart , adds line animation...
r131
Miikka Heikkinen
Add Polar chart support...
r2483 ChartPresenter::ChartPresenter(QChart *chart, QChart::ChartType type)
Jani Honkonen
src folder: another massive victory for coding style police
r2131 : QObject(chart),
m_chart(chart),
m_options(QChart::NoAnimation),
Titta Heikkala
Added possibility to set duration and easing curve for chart animation...
r2804 m_animationDuration(ChartAnimationDuration),
m_animationCurve(QEasingCurve::OutQuart),
Jani Honkonen
src folder: another massive victory for coding style police
r2131 m_state(ShowState),
m_background(0),
Miikka Heikkinen
Add API to specify plot area background....
r2498 m_plotAreaBackground(0),
Miikka Heikkinen
Added QChart::localizeNumbers...
r2707 m_title(0),
Miikka Heikkinen
Misc fixes...
r2710 m_localizeNumbers(false)
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 #ifndef QT_NO_OPENGL
, m_glWidget(0)
, m_glUseWidget(true)
#endif
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Miikka Heikkinen
Add Polar chart support...
r2483 if (type == QChart::ChartTypeCartesian)
m_layout = new CartesianChartLayout(this);
else if (type == QChart::ChartTypePolar)
m_layout = new PolarChartLayout(this);
Q_ASSERT(m_layout);
Michal Klocek
Refactors qchart , adds line animation...
r131 }
ChartPresenter::~ChartPresenter()
{
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 #ifndef QT_NO_OPENGL
delete m_glWidget.data();
#endif
Michal Klocek
Refactors qchart , adds line animation...
r131 }
Michal Klocek
Refactors internals...
r2273 void ChartPresenter::setGeometry(const QRectF rect)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Miikka Heikkinen
Add Polar chart support...
r2483 if (m_rect != rect) {
m_rect = rect;
foreach (ChartItem *chart, m_chartItems) {
chart->domain()->setSize(rect.size());
chart->setPos(rect.topLeft());
}
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 #ifndef QT_NO_OPENGL
if (!m_glWidget.isNull())
m_glWidget->setGeometry(m_rect.toRect());
#endif
Miikka Heikkinen
Added plotAreaChanged signal to chart....
r2716 emit plotAreaChanged(m_rect);
Miikka Heikkinen
Add Polar chart support...
r2483 }
Michal Klocek
Refactors internals...
r2273 }
Michal Klocek
Refactors Domain and Axis...
r1698
Michal Klocek
Refactors internals...
r2273 QRectF ChartPresenter::geometry() const
{
Miikka Heikkinen
Add Polar chart support...
r2483 return m_rect;
Michal Klocek
Refactors internals...
r2273 }
Michal Klocek
Refactors Domain and Axis...
r1698
Michal Klocek
Refactors internals...
r2273 void ChartPresenter::handleAxisAdded(QAbstractAxis *axis)
{
axis->d_ptr->initializeGraphics(rootItem());
Titta Heikkala
Added possibility to set duration and easing curve for chart animation...
r2804 axis->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
Miikka Heikkinen
Add Polar chart support...
r2483 ChartAxisElement *item = axis->d_ptr->axisItem();
Michal Klocek
Refactors internals...
r2273 item->setPresenter(this);
item->setThemeManager(m_chart->d_ptr->m_themeManager);
m_axisItems<<item;
m_axes<<axis;
Michal Klocek
Refactors layout:...
r2105 m_layout->invalidate();
Michal Klocek
Refactors axis handling...
r223 }
Jani Honkonen
src folder: another massive victory for coding style police
r2131 void ChartPresenter::handleAxisRemoved(QAbstractAxis *axis)
Michal Klocek
Refactors axis handling...
r223 {
Miikka Heikkinen
Add Polar chart support...
r2483 ChartAxisElement *item = axis->d_ptr->m_item.take();
Michal Klocek
Refactor Visibly methods of axis...
r1729 item->hide();
item->disconnect();
sauimone
fixed bug in series deletion
r1562 item->deleteLater();
Michal Klocek
Refactors internals...
r2273 m_axisItems.removeAll(item);
m_axes.removeAll(axis);
Michal Klocek
Removes legacy code - selectVisibleAxis
r2154 m_layout->invalidate();
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Refactors internals...
r2273 void ChartPresenter::handleSeriesAdded(QAbstractSeries *series)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Michal Klocek
Refactors internals...
r2273 series->d_ptr->initializeGraphics(rootItem());
Titta Heikkala
Added possibility to set duration and easing curve for chart animation...
r2804 series->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
Miikka Heikkinen
Added QChart::localizeNumbers...
r2707 series->d_ptr->setPresenter(this);
Michal Klocek
Refactors internals...
r2273 ChartItem *chart = series->d_ptr->chartItem();
chart->setPresenter(this);
chart->setThemeManager(m_chart->d_ptr->m_themeManager);
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 chart->setDataSet(m_chart->d_ptr->m_dataset);
Michal Klocek
Refactors internals...
r2273 chart->domain()->setSize(m_rect.size());
chart->setPos(m_rect.topLeft());
chart->handleDomainUpdated(); //this could be moved to intializeGraphics when animator is refactored
m_chartItems<<chart;
m_series<<series;
Michal Klocek
Refactors layout:...
r2105 m_layout->invalidate();
Michal Klocek
Refactors qchart , adds line animation...
r131 }
Jani Honkonen
src folder: another massive victory for coding style police
r2131 void ChartPresenter::handleSeriesRemoved(QAbstractSeries *series)
Michal Klocek
Refactored for MVP...
r139 {
Michal Klocek
Refactors internals...
r2273 ChartItem *chart = series->d_ptr->m_item.take();
chart->hide();
chart->disconnect();
chart->deleteLater();
Titta Heikkala
Fix animation crash...
r2767 if (chart->animation())
chart->animation()->stopAndDestroyLater();
Michal Klocek
Refactors internals...
r2273 m_chartItems.removeAll(chart);
m_series.removeAll(series);
m_layout->invalidate();
Michal Klocek
Adds missing ids to theme classes
r153 }
Michal Klocek
Adds animation settings handling
r298 void ChartPresenter::setAnimationOptions(QChart::AnimationOptions options)
{
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (m_options != options) {
Miikka Heikkinen
Fix resetting animation options mid-animation....
r2555 QChart::AnimationOptions oldOptions = m_options;
Jani Honkonen
src folder: another massive victory for coding style police
r2131 m_options = options;
Miikka Heikkinen
Fix resetting animation options mid-animation....
r2555 if (options.testFlag(QChart::SeriesAnimations) != oldOptions.testFlag(QChart::SeriesAnimations)) {
foreach (QAbstractSeries *series, m_series)
Titta Heikkala
Added possibility to set duration and easing curve for chart animation...
r2804 series->d_ptr->initializeAnimations(m_options, m_animationDuration,
m_animationCurve);
Michal Klocek
Refactors internals...
r2273 }
Miikka Heikkinen
Fix resetting animation options mid-animation....
r2555 if (options.testFlag(QChart::GridAxisAnimations) != oldOptions.testFlag(QChart::GridAxisAnimations)) {
foreach (QAbstractAxis *axis, m_axes)
Titta Heikkala
Added possibility to set duration and easing curve for chart animation...
r2804 axis->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
Michal Klocek
Refactors internals...
r2273 }
Miikka Heikkinen
Fix resetting animation options mid-animation....
r2555 m_layout->invalidate(); // So that existing animations don't just stop halfway
Jani Honkonen
src folder: another massive victory for coding style police
r2131 }
Michal Klocek
Adds scroll support...
r531 }
Titta Heikkala
Added possibility to set duration and easing curve for chart animation...
r2804 void ChartPresenter::setAnimationDuration(int msecs)
{
if (m_animationDuration != msecs) {
m_animationDuration = msecs;
foreach (QAbstractSeries *series, m_series)
series->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
foreach (QAbstractAxis *axis, m_axes)
axis->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
m_layout->invalidate(); // So that existing animations don't just stop halfway
}
}
void ChartPresenter::setAnimationEasingCurve(const QEasingCurve &curve)
{
if (m_animationCurve != curve) {
m_animationCurve = curve;
foreach (QAbstractSeries *series, m_series)
series->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
foreach (QAbstractAxis *axis, m_axes)
axis->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
m_layout->invalidate(); // So that existing animations don't just stop halfway
}
}
Michal Klocek
Refactors internals...
r2273 void ChartPresenter::setState(State state,QPointF point)
Michal Klocek
Refactor domain model...
r439 {
Michal Klocek
Refactors internals...
r2273 m_state=state;
m_statePoint=point;
Michal Klocek
Adds scroll support...
r531 }
Michal Klocek
Adds animation settings handling
r298 QChart::AnimationOptions ChartPresenter::animationOptions() const
{
return m_options;
}
Michal Klocek
Refactors layout managment...
r1534 void ChartPresenter::createBackgroundItem()
Michal Klocek
Refactor qledgend handling...
r855 {
Michal Klocek
Refactors layout...
r1965 if (!m_background) {
m_background = new ChartBackground(rootItem());
Miikka Heikkinen
Fix explicitly set default pen/brush/font getting overridden by theme...
r2516 m_background->setPen(Qt::NoPen); // Theme doesn't touch pen so don't use default
m_background->setBrush(QChartPrivate::defaultBrush());
Michal Klocek
Refactors layout...
r1965 m_background->setZValue(ChartPresenter::BackgroundZValue);
Michal Klocek
Refactors layout managment...
r1534 }
}
Michal Klocek
Refactor qledgend handling...
r855
Miikka Heikkinen
Add API to specify plot area background....
r2498 void ChartPresenter::createPlotAreaBackgroundItem()
{
if (!m_plotAreaBackground) {
if (m_chart->chartType() == QChart::ChartTypeCartesian)
m_plotAreaBackground = new QGraphicsRectItem(rootItem());
else
m_plotAreaBackground = new QGraphicsEllipseItem(rootItem());
// Use transparent pen instead of Qt::NoPen, as Qt::NoPen causes
// antialising artifacts with axis lines for some reason.
m_plotAreaBackground->setPen(QPen(Qt::transparent));
m_plotAreaBackground->setBrush(Qt::NoBrush);
m_plotAreaBackground->setZValue(ChartPresenter::PlotAreaZValue);
m_plotAreaBackground->setVisible(false);
}
}
Michal Klocek
Refactors layout managment...
r1534 void ChartPresenter::createTitleItem()
{
Michal Klocek
Refactors layout...
r1965 if (!m_title) {
m_title = new ChartTitle(rootItem());
m_title->setZValue(ChartPresenter::BackgroundZValue);
Michal Klocek
Refactors layout managment...
r1534 }
}
Tero Ahola
Added property definitions to QChart
r1524
Jani Honkonen
src folder: another massive victory for coding style police
r2131 void ChartPresenter::startAnimation(ChartAnimation *animation)
Michal Klocek
Refactors layout managment...
r1534 {
Miikka Heikkinen
Fix resetting animation options mid-animation....
r2555 animation->stop();
QTimer::singleShot(0, animation, SLOT(startChartAnimation()));
Michal Klocek
Refactors layout managment...
r1534 }
Michal Klocek
Refactor qledgend handling...
r855
Jani Honkonen
src folder: another massive victory for coding style police
r2131 void ChartPresenter::setBackgroundBrush(const QBrush &brush)
Michal Klocek
Refactors layout managment...
r1534 {
createBackgroundItem();
Michal Klocek
Refactors layout...
r1965 m_background->setBrush(brush);
Michal Klocek
Refactors layout managment...
r1534 m_layout->invalidate();
}
Michal Klocek
Refactor qledgend handling...
r855
Michal Klocek
Refactors layout managment...
r1534 QBrush ChartPresenter::backgroundBrush() const
{
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (!m_background)
return QBrush();
Michal Klocek
Refactors layout...
r1965 return m_background->brush();
Michal Klocek
Refactors layout managment...
r1534 }
Michal Klocek
Refactor qledgend handling...
r855
Jani Honkonen
src folder: another massive victory for coding style police
r2131 void ChartPresenter::setBackgroundPen(const QPen &pen)
Michal Klocek
Refactors layout managment...
r1534 {
createBackgroundItem();
Michal Klocek
Refactors layout...
r1965 m_background->setPen(pen);
Michal Klocek
Refactors layout managment...
r1534 m_layout->invalidate();
}
Michal Klocek
Refactor qledgend handling...
r855
Michal Klocek
Refactors layout managment...
r1534 QPen ChartPresenter::backgroundPen() const
{
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (!m_background)
return QPen();
Michal Klocek
Refactors layout...
r1965 return m_background->pen();
Michal Klocek
Refactors layout managment...
r1534 }
Michal Klocek
Add minimum size back to chartview and qchart
r913
Miikka Heikkinen
Added API to set chart background roundness...
r2549 void ChartPresenter::setBackgroundRoundness(qreal diameter)
{
createBackgroundItem();
m_background->setDiameter(diameter);
m_layout->invalidate();
}
qreal ChartPresenter::backgroundRoundness() const
{
if (!m_background)
return 0;
return m_background->diameter();
}
Miikka Heikkinen
Add API to specify plot area background....
r2498 void ChartPresenter::setPlotAreaBackgroundBrush(const QBrush &brush)
{
createPlotAreaBackgroundItem();
m_plotAreaBackground->setBrush(brush);
m_layout->invalidate();
}
QBrush ChartPresenter::plotAreaBackgroundBrush() const
{
if (!m_plotAreaBackground)
return QBrush();
return m_plotAreaBackground->brush();
}
void ChartPresenter::setPlotAreaBackgroundPen(const QPen &pen)
{
createPlotAreaBackgroundItem();
m_plotAreaBackground->setPen(pen);
m_layout->invalidate();
}
QPen ChartPresenter::plotAreaBackgroundPen() const
{
if (!m_plotAreaBackground)
return QPen();
return m_plotAreaBackground->pen();
}
Jani Honkonen
src folder: another massive victory for coding style police
r2131 void ChartPresenter::setTitle(const QString &title)
Michal Klocek
Refactors layout managment...
r1534 {
createTitleItem();
Michal Klocek
Refactors layout...
r1965 m_title->setText(title);
Michal Klocek
Refactors layout managment...
r1534 m_layout->invalidate();
}
Michal Klocek
Add minimum size back to chartview and qchart
r913
Michal Klocek
Refactors layout managment...
r1534 QString ChartPresenter::title() const
{
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (!m_title)
return QString();
Michal Klocek
Refactors layout...
r1965 return m_title->text();
Michal Klocek
Refactors layout managment...
r1534 }
Michal Klocek
Refactor qledgend handling...
r855
Jani Honkonen
src folder: another massive victory for coding style police
r2131 void ChartPresenter::setTitleFont(const QFont &font)
Michal Klocek
Refactors layout managment...
r1534 {
createTitleItem();
Michal Klocek
Refactors layout...
r1965 m_title->setFont(font);
Michal Klocek
Refactors layout managment...
r1534 m_layout->invalidate();
}
Michal Klocek
Refactor qledgend handling...
r855
Michal Klocek
Refactors layout managment...
r1534 QFont ChartPresenter::titleFont() const
{
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (!m_title)
return QFont();
Michal Klocek
Refactors layout...
r1965 return m_title->font();
Michal Klocek
Refactors layout managment...
r1534 }
Michal Klocek
Add minimum size back to chartview and qchart
r913
Michal Klocek
Refactors layout managment...
r1534 void ChartPresenter::setTitleBrush(const QBrush &brush)
{
createTitleItem();
Miikka Heikkinen
Added HTML support for various text items...
r2539 m_title->setDefaultTextColor(brush.color());
Michal Klocek
Refactors layout managment...
r1534 m_layout->invalidate();
}
Michal Klocek
Bugfixes for unnesery geometry changes
r869
Michal Klocek
Refactors layout managment...
r1534 QBrush ChartPresenter::titleBrush() const
{
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (!m_title)
return QBrush();
Miikka Heikkinen
Added HTML support for various text items...
r2539 return QBrush(m_title->defaultTextColor());
Michal Klocek
Refactors layout managment...
r1534 }
void ChartPresenter::setBackgroundVisible(bool visible)
{
createBackgroundItem();
Michal Klocek
Refactors layout...
r1965 m_background->setVisible(visible);
Michal Klocek
Refactors layout managment...
r1534 }
Michal Klocek
Refactor , move dataset legend presentr connections to one place
r871
Michal Klocek
Refactor qledgend handling...
r855
Michal Klocek
Refactors layout managment...
r1534 bool ChartPresenter::isBackgroundVisible() const
{
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (!m_background)
return false;
Michal Klocek
Refactors layout...
r1965 return m_background->isVisible();
Michal Klocek
Refactor qledgend handling...
r855 }
Miikka Heikkinen
Add API to specify plot area background....
r2498 void ChartPresenter::setPlotAreaBackgroundVisible(bool visible)
{
createPlotAreaBackgroundItem();
m_plotAreaBackground->setVisible(visible);
}
bool ChartPresenter::isPlotAreaBackgroundVisible() const
{
if (!m_plotAreaBackground)
return false;
return m_plotAreaBackground->isVisible();
}
Michal Klocek
Refactors layout managment...
r1534 void ChartPresenter::setBackgroundDropShadowEnabled(bool enabled)
Michal Klocek
Refactor qledgend handling...
r855 {
Michal Klocek
Refactors layout managment...
r1534 createBackgroundItem();
Michal Klocek
Refactors layout...
r1965 m_background->setDropShadowEnabled(enabled);
Michal Klocek
Refactor qledgend handling...
r855 }
Michal Klocek
Refactors layout managment...
r1534 bool ChartPresenter::isBackgroundDropShadowEnabled() const
Michal Klocek
Refactor qledgend handling...
r855 {
Jani Honkonen
src folder: another massive victory for coding style police
r2131 if (!m_background)
return false;
Michal Klocek
Refactors layout...
r1965 return m_background->isDropShadowEnabled();
Michal Klocek
Refactor qledgend handling...
r855 }
Michal Klocek
Refactor themes...
r143
Miikka Heikkinen
Added QChart::localizeNumbers...
r2707 void ChartPresenter::setLocalizeNumbers(bool localize)
{
m_localizeNumbers = localize;
m_layout->invalidate();
}
Miikka Heikkinen
Added QChart::locale property...
r2708 void ChartPresenter::setLocale(const QLocale &locale)
Miikka Heikkinen
Added QChart::localizeNumbers...
r2707 {
Miikka Heikkinen
Added QChart::locale property...
r2708 m_locale = locale;
m_layout->invalidate();
Miikka Heikkinen
Added QChart::localizeNumbers...
r2707 }
Miikka Heikkinen
Add Polar chart support...
r2483 AbstractChartLayout *ChartPresenter::layout()
Michal Klocek
Refactors axis animation, line animations
r1241 {
Michal Klocek
Refactors layout managment...
r1534 return m_layout;
Michal Klocek
Refactors axis animation, line animations
r1241 }
Jani Honkonen
src folder: another massive victory for coding style police
r2131 QLegend *ChartPresenter::legend()
Michal Klocek
Refactors layout managment...
r1534 {
return m_chart->legend();
}
Michal Klocek
Refactors layout...
r1965 void ChartPresenter::setVisible(bool visible)
{
m_chart->setVisible(visible);
}
Jani Honkonen
src folder: another massive victory for coding style police
r2131 ChartBackground *ChartPresenter::backgroundElement()
Michal Klocek
Refactors layout...
r1965 {
return m_background;
}
Miikka Heikkinen
Add API to specify plot area background....
r2498 QAbstractGraphicsShapeItem *ChartPresenter::plotAreaElement()
{
return m_plotAreaBackground;
}
Miikka Heikkinen
Add Polar chart support...
r2483 QList<ChartAxisElement *> ChartPresenter::axisItems() const
Michal Klocek
Refactors layout managment...
r1534 {
Michal Klocek
Refactors internals...
r2273 return m_axisItems;
Michal Klocek
Refactors layout managment...
r1534 }
Michal Klocek
Refactors internals...
r2273 QList<ChartItem *> ChartPresenter::chartItems() const
Michal Klocek
Refactors layout:...
r2105 {
Michal Klocek
Refactors internals...
r2273 return m_chartItems;
Michal Klocek
Refactors layout:...
r2105 }
Jani Honkonen
src folder: another massive victory for coding style police
r2131 ChartTitle *ChartPresenter::titleElement()
Michal Klocek
Refactors layout managment...
r1534 {
Michal Klocek
Refactors layout...
r1965 return m_title;
Michal Klocek
Refactors axis animation, line animations
r1241 }
Miikka Heikkinen
Added HTML support for various text items...
r2539 QRectF ChartPresenter::textBoundingRect(const QFont &font, const QString &text, qreal angle)
{
Miikka Heikkinen
Clean up static variables a bit...
r2543 static QGraphicsTextItem dummyTextItem;
Miikka Heikkinen
Fix text item margins...
r2592 static bool initMargin = true;
if (initMargin) {
dummyTextItem.document()->setDocumentMargin(textMargin());
initMargin = false;
}
Miikka Heikkinen
Added HTML support for various text items...
r2539
Miikka Heikkinen
Clean up static variables a bit...
r2543 dummyTextItem.setFont(font);
dummyTextItem.setHtml(text);
QRectF boundingRect = dummyTextItem.boundingRect();
Miikka Heikkinen
Added HTML support for various text items...
r2539
// Take rotation into account
if (angle) {
QTransform transform;
transform.rotate(angle);
boundingRect = transform.mapRect(boundingRect);
}
return boundingRect;
}
// boundingRect parameter returns the rotated bounding rect of the text
QString ChartPresenter::truncatedText(const QFont &font, const QString &text, qreal angle,
Titta Heikkala
Fix long labels visibility for QBarChart...
r2604 qreal maxWidth, qreal maxHeight, QRectF &boundingRect)
Miikka Heikkinen
Added HTML support for various text items...
r2539 {
QString truncatedString(text);
boundingRect = textBoundingRect(font, truncatedString, angle);
Titta Heikkala
Fix long labels visibility for QBarChart...
r2604 if (boundingRect.width() > maxWidth || boundingRect.height() > maxHeight) {
Miikka Heikkinen
Optimize string truncation algorithm...
r2541 // It can be assumed that almost any amount of string manipulation is faster
// than calculating one bounding rectangle, so first prepare a list of truncated strings
// to try.
Titta Heikkala
Qt Charts project file structure change...
r2712 static QRegExp truncateMatcher(QStringLiteral("&#?[0-9a-zA-Z]*;$"));
Miikka Heikkinen
Clean up static variables a bit...
r2543
Miikka Heikkinen
Optimize string truncation algorithm...
r2541 QVector<QString> testStrings(text.length());
int count(0);
static QLatin1Char closeTag('>');
static QLatin1Char openTag('<');
static QLatin1Char semiColon(';');
static QLatin1String ellipsis("...");
while (truncatedString.length() > 1) {
int chopIndex(-1);
int chopCount(1);
QChar lastChar(truncatedString.at(truncatedString.length() - 1));
if (lastChar == closeTag)
chopIndex = truncatedString.lastIndexOf(openTag);
else if (lastChar == semiColon)
Miikka Heikkinen
Clean up static variables a bit...
r2543 chopIndex = truncateMatcher.indexIn(truncatedString, 0);
Miikka Heikkinen
Optimize string truncation algorithm...
r2541
if (chopIndex != -1)
chopCount = truncatedString.length() - chopIndex;
truncatedString.chop(chopCount);
testStrings[count] = truncatedString + ellipsis;
count++;
}
Miikka Heikkinen
Added HTML support for various text items...
r2539
Miikka Heikkinen
Optimize string truncation algorithm...
r2541 // Binary search for best fit
int minIndex(0);
int maxIndex(count - 1);
int bestIndex(count);
QRectF checkRect;
Titta Heikkala
Fix long labels visibility for QBarChart...
r2604
Miikka Heikkinen
Optimize string truncation algorithm...
r2541 while (maxIndex >= minIndex) {
int mid = (maxIndex + minIndex) / 2;
checkRect = textBoundingRect(font, testStrings.at(mid), angle);
Titta Heikkala
Fix long labels visibility for QBarChart...
r2604 if (checkRect.width() > maxWidth || checkRect.height() > maxHeight) {
Miikka Heikkinen
Optimize string truncation algorithm...
r2541 // Checked index too large, all under this are also too large
minIndex = mid + 1;
} else {
// Checked index fits, all over this also fit
maxIndex = mid - 1;
bestIndex = mid;
boundingRect = checkRect;
}
}
// Default to "..." if nothing fits
if (bestIndex == count) {
boundingRect = textBoundingRect(font, ellipsis, angle);
truncatedString = ellipsis;
} else {
truncatedString = testStrings.at(bestIndex);
Miikka Heikkinen
Added HTML support for various text items...
r2539 }
}
return truncatedString;
}
Miikka Heikkinen
Added QChart::localizeNumbers...
r2707 QString ChartPresenter::numberToString(double value, char f, int prec)
{
if (m_localizeNumbers)
return m_locale.toString(value, f, prec);
else
return QString::number(value, f, prec);
}
Miikka Heikkinen
Additional fixes to label localization...
r2709 QString ChartPresenter::numberToString(int value)
{
if (m_localizeNumbers)
return m_locale.toString(value);
else
return QString::number(value);
}
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 void ChartPresenter::ensureGLWidget()
{
#ifndef QT_NO_OPENGL
// GLWidget pointer is wrapped in QPointer as its parent is not in our control, and therefore
// can potentially get deleted unexpectedly.
if (m_glWidget.isNull() && m_glUseWidget && m_chart->scene()) {
QObject *parent = m_chart->scene()->parent();
while (parent) {
QWidget *parentWidget = qobject_cast<QWidget *>(parent);
if (parentWidget) {
m_glWidget = new GLWidget(m_chart->d_ptr->m_dataset->glXYSeriesDataManager(),
parentWidget);
m_glWidget->setGeometry(m_rect.toRect());
m_glWidget->show();
break;
}
parent = parent->parent();
}
}
#endif
}
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "moc_chartpresenter_p.cpp"
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE