##// END OF EJS Templates
Fix legend drawing on font change...
Fix legend drawing on font change The legend items are hidden when the font is changed to avoid flashing on update. The correct visibility is set for legend items when new geometry is set for LegendLayout. Task-number: QTRD-2523 Change-Id: If5907a1c4d7fa538a08d628c30972f2d0fa3ed84 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>

File last commit:

r2604:776457a845dd
r2652:e2168840d81f
Show More
chartpresenter.cpp
480 lines | 12.9 KiB | text/x-c | CppLexer
/ src / chartpresenter.cpp
Jani Honkonen
Add license headers
r794 /****************************************************************************
Michal Klocek
Fixes header guard style issues
r969 **
Miikka Heikkinen
Fixed the copyright year 2012 -> 2013
r2432 ** Copyright (C) 2013 Digia Plc
Michal Klocek
Fixes header guard style issues
r969 ** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
Miikka Heikkinen
Qt Commercial -> Qt Enterprise...
r2574 ** This file is part of the Qt Enterprise Charts Add-on.
Michal Klocek
Fixes header guard style issues
r969 **
** $QT_BEGIN_LICENSE$
Miikka Heikkinen
Qt Commercial -> Qt Enterprise...
r2574 ** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
Michal Klocek
Fixes header guard style issues
r969 ** 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$
**
****************************************************************************/
#include "chartpresenter_p.h"
Michal Klocek
Refactored for MVP...
r139 #include "qchart.h"
Michal Klocek
Refactors internals...
r2273 #include "chartitem_p.h"
Michal Klocek
Refactor qledgend handling...
r855 #include "qchart_p.h"
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 #include "qabstractaxis.h"
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556 #include "qabstractaxis_p.h"
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "chartdataset_p.h"
Michal Klocek
Refactors axis animation, line animations
r1241 #include "chartanimation_p.h"
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 #include "qabstractseries_p.h"
Michal Klocek
Adds area chart...
r421 #include "qareaseries.h"
Miikka Heikkinen
Add Polar chart support...
r2483 #include "chartaxiselement_p.h"
Michal Klocek
Changes QChartAxis -> QAxis
r1006 #include "chartbackground_p.h"
Miikka Heikkinen
Add Polar chart support...
r2483 #include "cartesianchartlayout_p.h"
#include "polarchartlayout_p.h"
Michal Klocek
Refactors layout...
r1965 #include "charttitle_p.h"
Michal Klocek
Refactors axis animation, line animations
r1241 #include <QTimer>
Miikka Heikkinen
Fix text item margins...
r2592 #include <QTextDocument>
Michal Klocek
Refactors qchart , adds line animation...
r131
QTCOMMERCIALCHART_BEGIN_NAMESPACE
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),
m_state(ShowState),
m_background(0),
Miikka Heikkinen
Add API to specify plot area background....
r2498 m_plotAreaBackground(0),
Jani Honkonen
src folder: another massive victory for coding style police
r2131 m_title(0)
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()
{
Michal Klocek
Refactors internals...
r2273
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());
}
}
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());
axis->d_ptr->initializeAnimations(m_options);
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());
series->d_ptr->initializeAnimations(m_options);
ChartItem *chart = series->d_ptr->chartItem();
chart->setPresenter(this);
chart->setThemeManager(m_chart->d_ptr->m_themeManager);
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();
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)
series->d_ptr->initializeAnimations(m_options);
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)
axis->d_ptr->initializeAnimations(m_options);
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 }
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
Michal Klocek
Refactors layout managment...
r1534
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.
Miikka Heikkinen
Clean up static variables a bit...
r2543 static const char *truncateMatchString = "&#?[0-9a-zA-Z]*;$";
static QRegExp truncateMatcher(truncateMatchString);
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;
}
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "moc_chartpresenter_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE