##// END OF EJS Templates
Optimize polar chart radius calculation a bit....
Optimize polar chart radius calculation a bit. Current algorithm still results in an occasional extra unneeded iteration, as it uses only crude approximation for radius reduction. However, any speedup gained by accurately calculating needed reduction would be very minor compared to approximations used, so it doesn't seem worth the effort to figure out the complex math. Change-Id: If670a1b058a85cd0305b93f62e6388b463bafd0d Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>

File last commit:

r2483:f494279b6366
r2542:189023d9a551
Show More
chartdataset.cpp
607 lines | 17.4 KiB | text/x-c | CppLexer
/ src / chartdataset.cpp
Michal Klocek
Updates chartdataset unit test
r771 /****************************************************************************
**
Miikka Heikkinen
Fixed the copyright year 2012 -> 2013
r2432 ** Copyright (C) 2013 Digia Plc
Michal Klocek
Updates chartdataset unit test
r771 ** 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$
**
****************************************************************************/
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "chartdataset_p.h"
Michal Klocek
Refactors internals...
r2273 #include "chartpresenter_p.h"
Jani Honkonen
Implemented QAbstractSeries::chart()...
r1314 #include "qchart.h"
Michal Klocek
Refactors internals...
r2273 #include "qchart_p.h"
Marek Rosa
renamed QValueAxis related files
r1805 #include "qvalueaxis.h"
Marek Rosa
renamed QBarCategoryAxis related files
r1810 #include "qbarcategoryaxis.h"
Marek Rosa
renamed QValueAxis related files
r1805 #include "qvalueaxis_p.h"
Marek Rosa
Renamed QCategoryAxis related files
r1817 #include "qcategoryaxis.h"
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 #include "qabstractseries_p.h"
sauimone
renamed barseries files to abstractbarseries
r1586 #include "qabstractbarseries.h"
sauimone
Naming convention change for barcharts. QBarChartSeries is now QBarSeries etc.
r338 #include "qstackedbarseries.h"
#include "qpercentbarseries.h"
Jani Honkonen
Moved pie stuff to own .pri file and rename stuff
r146 #include "qpieseries.h"
Michal Klocek
Refactors internals...
r2273 #include "chartitem_p.h"
Marek Rosa
Domains added
r2275 #include "xydomain_p.h"
Miikka Heikkinen
Add Polar chart support...
r2483 #include "xypolardomain_p.h"
Marek Rosa
Log domains zoomin, zoomout and move added
r2280 #include "xlogydomain_p.h"
#include "logxydomain_p.h"
#include "logxlogydomain_p.h"
Miikka Heikkinen
Add Polar chart support...
r2483 #include "xlogypolardomain_p.h"
#include "logxypolardomain_p.h"
#include "logxlogypolardomain_p.h"
Michal Klocek
Refactors qchart , adds line animation...
r131
Marek Rosa
Disabled QDateTimeAxis on ARM
r1867 #ifndef QT_ON_ARM
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 #include "qdatetimeaxis.h"
Marek Rosa
Disabled QDateTimeAxis on ARM
r1867 #endif
Michal Klocek
Refactors qchart , adds line animation...
r131 QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Refactors internals...
r2273 ChartDataSet::ChartDataSet(QChart *chart)
: QObject(chart),
m_chart(chart)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556
Michal Klocek
Refactors qchart , adds line animation...
r131 }
ChartDataSet::~ChartDataSet()
{
Michal Klocek
Adds domains swap logic
r2284 deleteAllSeries();
deleteAllAxes();
Michal Klocek
Refactors qchart , adds line animation...
r131 }
Michal Klocek
Refactors internals...
r2273 /*
* This method adds series to chartdataset, series ownership is taken from caller.
*/
Jani Honkonen
more coding style fixes for src-folder...
r2104 void ChartDataSet::addSeries(QAbstractSeries *series)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Michal Klocek
Refactors internals...
r2273 if (m_seriesList.contains(series)) {
qWarning() << QObject::tr("Can not add series. Series already on the chart.");
return;
}
Miikka Heikkinen
Add Polar chart support...
r2483 // Ignore unsupported series added to polar chart
if (m_chart && m_chart->chartType() == QChart::ChartTypePolar) {
if (!(series->type() == QAbstractSeries::SeriesTypeArea
|| series->type() == QAbstractSeries::SeriesTypeLine
|| series->type() == QAbstractSeries::SeriesTypeScatter
|| series->type() == QAbstractSeries::SeriesTypeSpline)) {
qWarning() << QObject::tr("Can not add series. Series type is not supported by a polar chart.");
return;
}
series->d_ptr->setDomain(new XYPolarDomain());
} else {
series->d_ptr->setDomain(new XYDomain());
}
Michal Klocek
Refactors internals...
r2273 series->d_ptr->initializeDomain();
m_seriesList.append(series);
series->setParent(this); // take ownership
series->d_ptr->m_chart = m_chart;
emit seriesAdded(series);
}
Michal Klocek
Fix indexing issue of series
r910
Michal Klocek
Refactors internals...
r2273 /*
* This method adds axis to chartdataset, axis ownership is taken from caller.
*/
Miikka Heikkinen
Add Polar chart support...
r2483 void ChartDataSet::addAxis(QAbstractAxis *axis, Qt::Alignment aligment)
Michal Klocek
Refactors internals...
r2273 {
if (m_axisList.contains(axis)) {
qWarning() << QObject::tr("Can not add axis. Axis already on the chart.");
Michal Klocek
Refactor domain model...
r439 return;
}
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Refactors internals...
r2273 axis->d_ptr->setAlignment(aligment);
Michal Klocek
Adds axis domain intialization
r1695
Miikka Heikkinen
Add Polar chart support...
r2483 if (!axis->alignment()) {
qWarning() << QObject::tr("No alignment specified !");
Michal Klocek
Refactors internals...
r2273 return;
};
Michal Klocek
Adds axis domain intialization
r1695
Miikka Heikkinen
Add Polar chart support...
r2483 AbstractDomain *newDomain;
if (m_chart && m_chart->chartType() == QChart::ChartTypePolar) {
foreach (QAbstractAxis *existingAxis, axes()) {
if (existingAxis->orientation() == axis->orientation()) {
qWarning() << QObject::tr("Cannot add multiple axes of same orientation to a polar chart!");
return;
}
}
newDomain = new XYPolarDomain();
} else {
newDomain = new XYDomain();
}
QSharedPointer<AbstractDomain> domain(newDomain);
Michal Klocek
Refactors internals...
r2273 axis->d_ptr->initializeDomain(domain.data());
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Refactors internals...
r2273 axis->setParent(this);
axis->d_ptr->m_chart = m_chart;
m_axisList.append(axis);
Michal Klocek
Adds area chart...
r421
Michal Klocek
Refactors internals...
r2273 emit axisAdded(axis);
Michal Klocek
Adds axis domain intialization
r1695 }
Michal Klocek
Refactors internals...
r2273 /*
* This method removes series form chartdataset, series ownership is passed back to caller.
*/
Jani Honkonen
more coding style fixes for src-folder...
r2104 void ChartDataSet::removeSeries(QAbstractSeries *series)
Michal Klocek
Adds axis domain intialization
r1695 {
Michal Klocek
Refactors internals...
r2273 if (! m_seriesList.contains(series)) {
qWarning() << QObject::tr("Can not remove series. Series not found on the chart.");
Michal Klocek
Adds axis domain intialization
r1695 return;
}
Michal Klocek
Refactors internals...
r2273 QList<QAbstractAxis*> axes = series->d_ptr->m_axes;
Michal Klocek
Adds axis domain intialization
r1695
Michal Klocek
Refactors internals...
r2273 foreach(QAbstractAxis* axis, axes) {
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 detachAxis(series,axis);
Michal Klocek
Fix indexing issue of series
r910 }
Michal Klocek
Adds domains swap logic
r2284
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 emit seriesRemoved(series);
m_seriesList.removeAll(series);
Miikka Heikkinen
Add Polar chart support...
r2483 // Reset domain to default
series->d_ptr->setDomain(new XYDomain());
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 series->setParent(0);
series->d_ptr->m_chart = 0;
Michal Klocek
Adds axis domain intialization
r1695 }
Michal Klocek
Fix indexing issue of series
r910
Michal Klocek
Refactors internals...
r2273 /*
* This method removes axis form chartdataset, series ownership is passed back to caller.
*/
void ChartDataSet::removeAxis(QAbstractAxis *axis)
Michal Klocek
Refactor QChart API...
r1577 {
Michal Klocek
Refactors internals...
r2273 if (! m_axisList.contains(axis)) {
qWarning() << QObject::tr("Can not remove axis. Axis not found on the chart.");
Tero Ahola
Refactored QML axis handling
r1813 return;
Michal Klocek
Adds createDefaultAxes logic
r1588 }
Michal Klocek
Refactor QChart API...
r1577
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 QList<QAbstractSeries*> series = axis->d_ptr->m_series;
foreach(QAbstractSeries* s, series) {
detachAxis(s,axis);
}
Michal Klocek
Refactors internals...
r2273 emit axisRemoved(axis);
m_axisList.removeAll(axis);
Michal Klocek
Refactor QChart API...
r1577
Michal Klocek
Refactors internals...
r2273 axis->setParent(0);
axis->d_ptr->m_chart = 0;
Michal Klocek
Refactor QChart API...
r1577 }
Michal Klocek
Refactors internals...
r2273 /*
Michal Klocek
Adds domains swap logic
r2284 * This method attaches axis to series, return true if success.
Michal Klocek
Refactors internals...
r2273 */
Miikka Heikkinen
Add Polar chart support...
r2483 bool ChartDataSet::attachAxis(QAbstractSeries *series,QAbstractAxis *axis)
Michal Klocek
Adds createDefaultAxes logic
r1588 {
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(series);
Q_ASSERT(axis);
Michal Klocek
Adds createDefaultAxes logic
r1588
Miikka Heikkinen
Add Polar chart support...
r2483 QList<QAbstractSeries *> attachedSeriesList = axis->d_ptr->m_series;
QList<QAbstractAxis *> attachedAxisList = series->d_ptr->m_axes;
Michal Klocek
Adds createDefaultAxes logic
r1588
Michal Klocek
Refactors internals...
r2273 if (!m_seriesList.contains(series)) {
qWarning() << QObject::tr("Can not find series on the chart.");
return false;
}
Michal Klocek
Adds createDefaultAxes logic
r1588
Michal Klocek
Refactors internals...
r2273 if (axis && !m_axisList.contains(axis)) {
qWarning() << QObject::tr("Can not find axis on the chart.");
return false;
}
Michal Klocek
Adds createDefaultAxes logic
r1588
Michal Klocek
Refactors internals...
r2273 if (attachedAxisList.contains(axis)) {
qWarning() << QObject::tr("Axis already attached to series.");
return false;
Michal Klocek
Adds axis domain intialization
r1695 }
Michal Klocek
Adds createDefaultAxes logic
r1588
Michal Klocek
Adds domains swap logic
r2284 if (attachedSeriesList.contains(series)) {
qWarning() << QObject::tr("Axis already attached to series.");
return false;
}
Miikka Heikkinen
Add Polar chart support...
r2483 AbstractDomain *domain = series->d_ptr->domain();
Michal Klocek
Adds domains swap logic
r2284 AbstractDomain::DomainType type = selectDomain(attachedAxisList<<axis);
Miikka Heikkinen
Add Polar chart support...
r2483 if (type == AbstractDomain::UndefinedDomain) return false;
Michal Klocek
Fix indexing issue of series
r910
Miikka Heikkinen
Add Polar chart support...
r2483 if (domain->type() != type) {
Marek Rosa
Preset range on LogAxis fix
r2373 AbstractDomain *old = domain;
Miikka Heikkinen
Add Polar chart support...
r2483 domain = createDomain(type);
Marek Rosa
Preset range on LogAxis fix
r2373 domain->setRange(old->minX(), old->maxX(), old->minY(), old->maxY());
Miikka Heikkinen
Add Polar chart support...
r2483 // Initialize domain size to old domain size, as it won't get updated
// unless geometry changes.
domain->setSize(old->size());
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Refactors axis handling...
r223
Miikka Heikkinen
Add Polar chart support...
r2483 if (!domain)
return false;
if (!domain->attachAxis(axis))
return false;
Michal Klocek
Adds domains swap logic
r2284
Miikka Heikkinen
Add Polar chart support...
r2483 QList<AbstractDomain *> blockedDomains;
domain->blockRangeSignals(true);
blockedDomains << domain;
Michal Klocek
Adds domains swap logic
r2284
Miikka Heikkinen
Add Polar chart support...
r2483 if (domain != series->d_ptr->domain()) {
foreach (QAbstractAxis *axis, series->d_ptr->m_axes) {
Michal Klocek
bugfix signals not reconnected when domain changed
r2292 series->d_ptr->domain()->detachAxis(axis);
domain->attachAxis(axis);
Miikka Heikkinen
Add Polar chart support...
r2483 foreach (QAbstractSeries *otherSeries, axis->d_ptr->m_series) {
if (otherSeries != series && otherSeries->d_ptr->domain()) {
if (!otherSeries->d_ptr->domain()->rangeSignalsBlocked()) {
otherSeries->d_ptr->domain()->blockRangeSignals(true);
blockedDomains << otherSeries->d_ptr->domain();
}
}
}
Michal Klocek
bugfix signals not reconnected when domain changed
r2292 }
Michal Klocek
Fix domain switching
r2288 series->d_ptr->setDomain(domain);
series->d_ptr->initializeDomain();
}
Michal Klocek
bugfix signals not reconnected when domain changed
r2292
series->d_ptr->m_axes<<axis;
axis->d_ptr->m_series<<series;
Michal Klocek
Refactors internals...
r2273 series->d_ptr->initializeAxes();
Michal Klocek
Domain not sharable again
r2285 axis->d_ptr->initializeDomain(domain);
Michal Klocek
Refactors internals...
r2273
Miikka Heikkinen
Add Polar chart support...
r2483 foreach (AbstractDomain *blockedDomain, blockedDomains)
blockedDomain->blockRangeSignals(false);
Michal Klocek
Refactors internals...
r2273 return true;
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Refactors internals...
r2273 /*
Michal Klocek
Adds domains swap logic
r2284 * This method detaches axis to series, return true if success.
Michal Klocek
Refactors internals...
r2273 */
bool ChartDataSet::detachAxis(QAbstractSeries* series,QAbstractAxis *axis)
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725 {
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(series);
Q_ASSERT(axis);
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725
Michal Klocek
Refactors internals...
r2273 QList<QAbstractSeries* > attachedSeriesList = axis->d_ptr->m_series;
QList<QAbstractAxis* > attachedAxisList = series->d_ptr->m_axes;
Michal Klocek
Domain not sharable again
r2285 AbstractDomain* domain = series->d_ptr->domain();
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725
Michal Klocek
Refactors internals...
r2273 if (!m_seriesList.contains(series)) {
qWarning() << QObject::tr("Can not find series on the chart.");
return false;
}
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725
Michal Klocek
Refactors internals...
r2273 if (axis && !m_axisList.contains(axis)) {
qWarning() << QObject::tr("Can not find axis on the chart.");
return false;
}
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725
Michal Klocek
Refactors internals...
r2273 if (!attachedAxisList.contains(axis)) {
qWarning() << QObject::tr("Axis not attached to series.");
return false;
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725 }
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(axis->d_ptr->m_series.contains(series));
Michal Klocek
Adds domains swap logic
r2284 domain->detachAxis(axis);
Michal Klocek
Refactors internals...
r2273 series->d_ptr->m_axes.removeAll(axis);
axis->d_ptr->m_series.removeAll(series);
Michal Klocek
Refactored for MVP...
r139
Michal Klocek
Refactors internals...
r2273 return true;
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Refactors internals...
r2273 void ChartDataSet::createDefaultAxes()
Michal Klocek
Refactored for MVP...
r139 {
Michal Klocek
Refactors internals...
r2273 if (m_seriesList.isEmpty())
return;
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 QAbstractAxis::AxisTypes typeX(0);
QAbstractAxis::AxisTypes typeY(0);
Michal Klocek
Fixes tst_qchartview
r1652
Michal Klocek
Refactors internals...
r2273 // Remove possibly existing axes
Michal Klocek
Adds domains swap logic
r2284 deleteAllAxes();
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(m_axisList.isEmpty());
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 // Select the required axis x and axis y types based on the types of the current series
foreach(QAbstractSeries* s, m_seriesList) {
typeX |= s->d_ptr->defaultAxisType(Qt::Horizontal);
typeY |= s->d_ptr->defaultAxisType(Qt::Vertical);
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 // Create the axes of the types selected
createAxes(typeX, Qt::Horizontal);
createAxes(typeY, Qt::Vertical);
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Refactors internals...
r2273 void ChartDataSet::createAxes(QAbstractAxis::AxisTypes type, Qt::Orientation orientation)
Michal Klocek
Refactor domain model...
r439 {
Michal Klocek
Refactors internals...
r2273 QAbstractAxis *axis = 0;
//decide what axis should be created
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 switch (type) {
case QAbstractAxis::AxisTypeValue:
axis = new QValueAxis(this);
break;
case QAbstractAxis::AxisTypeBarCategory:
axis = new QBarCategoryAxis(this);
break;
case QAbstractAxis::AxisTypeCategory:
axis = new QCategoryAxis(this);
break;
#ifndef Q_WS_QWS
case QAbstractAxis::AxisTypeDateTime:
axis = new QDateTimeAxis(this);
break;
#endif
default:
axis = 0;
break;
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 if (axis) {
//create one axis for all
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 addAxis(axis,orientation==Qt::Horizontal?Qt::AlignBottom:Qt::AlignLeft);
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 qreal min = 0;
qreal max = 0;
findMinMaxForSeries(m_seriesList,orientation,min,max);
Michal Klocek
Refactors internals...
r2273 foreach(QAbstractSeries *s, m_seriesList) {
attachAxis(s,axis);
Michal Klocek
Fixes nicenumbers missing update issue
r1738 }
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 axis->setRange(min,max);
Michal Klocek
Fix indexing issue of series
r910 }
Michal Klocek
Refactors internals...
r2273 else if (!type.testFlag(QAbstractAxis::AxisTypeNoAxis)) {
//create separate axis
foreach(QAbstractSeries *s, m_seriesList) {
QAbstractAxis *axis = s->d_ptr->createDefaultAxis(orientation);
if(axis) {
addAxis(axis,orientation==Qt::Horizontal?Qt::AlignBottom:Qt::AlignLeft);
attachAxis(s,axis);
}
}
Tero Ahola
Fixed bug with changing theme when several series exist
r538 }
}
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 void ChartDataSet::findMinMaxForSeries(QList<QAbstractSeries *> series,Qt::Orientations orientation, qreal &min, qreal &max)
{
Q_ASSERT(!series.isEmpty());
Miikka Heikkinen
Add Polar chart support...
r2483 AbstractDomain *domain = series.first()->d_ptr->domain();
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 min = (orientation == Qt::Vertical) ? domain->minY() : domain->minX();
max = (orientation == Qt::Vertical) ? domain->maxY() : domain->maxX();
Miikka Heikkinen
Add Polar chart support...
r2483 for (int i = 1; i< series.size(); i++) {
AbstractDomain *domain = series[i]->d_ptr->domain();
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 min = qMin((orientation == Qt::Vertical) ? domain->minY() : domain->minX(), min);
max = qMax((orientation == Qt::Vertical) ? domain->maxY() : domain->maxX(), max);
}
Mika Salmela
Check if min and max are same on findMinMaxForSeries
r2414 if (min == max) {
min -= 0.5;
max += 0.5;
}
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 }
Michal Klocek
Adds domains swap logic
r2284 void ChartDataSet::deleteAllSeries()
sauimone
added map for yaxises methods to set axis
r1554 {
Michal Klocek
Adds domains swap logic
r2284 foreach (QAbstractSeries *s , m_seriesList){
Michal Klocek
Refactors internals...
r2273 removeSeries(s);
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 s->deleteLater();
Michal Klocek
Adds domains swap logic
r2284 }
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(m_seriesList.count() == 0);
sauimone
added map for yaxises methods to set axis
r1554 }
Michal Klocek
Adds domains swap logic
r2284 void ChartDataSet::deleteAllAxes()
Michal Klocek
Refactors axis handling...
r223 {
Michal Klocek
Adds domains swap logic
r2284 foreach (QAbstractAxis *a , m_axisList){
Michal Klocek
Refactors internals...
r2273 removeAxis(a);
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 a->deleteLater();
Michal Klocek
Adds domains swap logic
r2284 }
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(m_axisList.count() == 0);
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Refactors internals...
r2273 void ChartDataSet::zoomInDomain(const QRectF &rect)
sauimone
added map for yaxises methods to set axis
r1554 {
Marek Rosa
Domains added
r2275 QList<AbstractDomain*> domains;
Michal Klocek
Refactors internals...
r2273 foreach(QAbstractSeries *s, m_seriesList) {
Michal Klocek
Domain not sharable again
r2285 AbstractDomain* domain = s->d_ptr->domain();
Michal Klocek
Bugfix resize event during zoomin
r2289 s->d_ptr->m_domain->blockRangeSignals(true);
Michal Klocek
Refactors internals...
r2273 domains<<domain;
Michal Klocek
Adds tst_qvaluesaxis stub implementation
r1699 }
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Refactors internals...
r2273 domain->zoomIn(rect);
Michal Klocek
Update of chartdataset_tst
r1564
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Bugfix resize event during zoomin
r2289 domain->blockRangeSignals(false);
Michal Klocek
Refactors internals...
r2273 }
Michal Klocek
Update of chartdataset_tst
r1564
Michal Klocek
Refactors internals...
r2273 void ChartDataSet::zoomOutDomain(const QRectF &rect)
{
Marek Rosa
Domains added
r2275 QList<AbstractDomain*> domains;
Michal Klocek
Refactors internals...
r2273 foreach(QAbstractSeries *s, m_seriesList) {
Michal Klocek
Domain not sharable again
r2285 AbstractDomain* domain = s->d_ptr->domain();
Michal Klocek
Bugfix resize event during zoomin
r2289 s->d_ptr->m_domain->blockRangeSignals(true);
Michal Klocek
Refactors internals...
r2273 domains<<domain;
Michal Klocek
Update of chartdataset_tst
r1564 }
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Refactors internals...
r2273 domain->zoomOut(rect);
Michal Klocek
Update of chartdataset_tst
r1564
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Bugfix resize event during zoomin
r2289 domain->blockRangeSignals(false);
Michal Klocek
Refactors internals...
r2273 }
Tero Ahola
Refactored QML axis handling
r1813
Michal Klocek
Refactors internals...
r2273 void ChartDataSet::scrollDomain(qreal dx, qreal dy)
{
Marek Rosa
Domains added
r2275 QList<AbstractDomain*> domains;
Michal Klocek
Refactors internals...
r2273 foreach(QAbstractSeries *s, m_seriesList) {
Michal Klocek
Bugfix resize event during zoomin
r2289 AbstractDomain* domain = s->d_ptr->domain();
s->d_ptr->m_domain->blockRangeSignals(true);
Michal Klocek
Refactors internals...
r2273 domains<<domain;
Michal Klocek
Refactor QChart API...
r1577 }
Michal Klocek
Update of chartdataset_tst
r1564
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Refactors internals...
r2273 domain->move(dx, dy);
Michal Klocek
Update of chartdataset_tst
r1564
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Bugfix resize event during zoomin
r2289 domain->blockRangeSignals(false);
Michal Klocek
Adds missing functions to qchart API
r1542 }
Marek Rosa
Mapping functions added to QChart. Callout example updated
r2344 QPointF ChartDataSet::mapToValue(const QPointF &position, QAbstractSeries *series)
{
QPointF point;
if (series == 0 && !m_seriesList.isEmpty())
series = m_seriesList.first();
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 if (series && series->type() == QAbstractSeries::SeriesTypePie)
return point;
Marek Rosa
Mapping functions added to QChart. Callout example updated
r2344 if (series && m_seriesList.contains(series))
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 point = series->d_ptr->m_domain->calculateDomainPoint(position - m_chart->plotArea().topLeft());
Marek Rosa
Mapping functions added to QChart. Callout example updated
r2344 return point;
}
QPointF ChartDataSet::mapToPosition(const QPointF &value, QAbstractSeries *series)
{
QPointF point = m_chart->plotArea().topLeft();
if (series == 0 && !m_seriesList.isEmpty())
series = m_seriesList.first();
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 if (series && series->type() == QAbstractSeries::SeriesTypePie)
return QPoint(0, 0);
Marek Rosa
Negative values with log axis handled
r2356 bool ok;
Marek Rosa
Mapping functions added to QChart. Callout example updated
r2344 if (series && m_seriesList.contains(series))
Marek Rosa
Negative values with log axis handled
r2356 point += series->d_ptr->m_domain->calculateGeometryPoint(value, ok);
Marek Rosa
Mapping functions added to QChart. Callout example updated
r2344 return point;
}
Miikka Heikkinen
Add Polar chart support...
r2483 QList<QAbstractAxis *> ChartDataSet::axes() const
Michal Klocek
Adds scroll support...
r531 {
Michal Klocek
Refactors internals...
r2273 return m_axisList;
Michal Klocek
Refactor axis hadnling...
r1078 }
Jani Honkonen
more coding style fixes for src-folder...
r2104 QList<QAbstractSeries *> ChartDataSet::series() const
Michal Klocek
Refactor axis hadnling...
r1078 {
Michal Klocek
Refactors internals...
r2273 return m_seriesList;
Michal Klocek
Adds scroll support...
r531 }
Michal Klocek
Refactors internals...
r2273
Miikka Heikkinen
Add Polar chart support...
r2483 AbstractDomain::DomainType ChartDataSet::selectDomain(QList<QAbstractAxis *> axes)
Michal Klocek
Adds domains swap logic
r2284 {
enum Type {
Michal Klocek
Fix domain switching
r2288 Undefined = 0,
Michal Klocek
Adds domains swap logic
r2284 LogType = 0x1,
ValueType = 0x2
};
Michal Klocek
Fix domain switching
r2288 int horizontal(Undefined);
int vertical(Undefined);
Michal Klocek
Adds domains swap logic
r2284
Miikka Heikkinen
Add Polar chart support...
r2483 // Assume cartesian chart type, unless chart is set
QChart::ChartType chartType(QChart::ChartTypeCartesian);
if (m_chart)
chartType = m_chart->chartType();
Michal Klocek
Fix domain switching
r2288
Miikka Heikkinen
Add Polar chart support...
r2483 foreach (QAbstractAxis *axis, axes)
{
switch (axis->type()) {
case QAbstractAxis::AxisTypeLogValue:
if (axis->orientation() == Qt::Horizontal)
horizontal |= LogType;
if (axis->orientation() == Qt::Vertical)
vertical |= LogType;
Michal Klocek
Adds domains swap logic
r2284 break;
Miikka Heikkinen
Add Polar chart support...
r2483 case QAbstractAxis::AxisTypeValue:
case QAbstractAxis::AxisTypeBarCategory:
case QAbstractAxis::AxisTypeCategory:
case QAbstractAxis::AxisTypeDateTime:
if (axis->orientation() == Qt::Horizontal)
horizontal |= ValueType;
if (axis->orientation() == Qt::Vertical)
vertical |= ValueType;
Michal Klocek
Adds domains swap logic
r2284 break;
Miikka Heikkinen
Add Polar chart support...
r2483 default:
qWarning() << "Undefined type";
Michal Klocek
Adds domains swap logic
r2284 break;
}
}
Miikka Heikkinen
Add Polar chart support...
r2483 if (vertical == Undefined)
vertical = ValueType;
if (horizontal == Undefined)
horizontal = ValueType;
Michal Klocek
Fix domain switching
r2288
Miikka Heikkinen
Add Polar chart support...
r2483 if (vertical == ValueType && horizontal == ValueType) {
if (chartType == QChart::ChartTypeCartesian)
return AbstractDomain::XYDomain;
else if (chartType == QChart::ChartTypePolar)
return AbstractDomain::XYPolarDomain;
Michal Klocek
Adds domains swap logic
r2284 }
Miikka Heikkinen
Add Polar chart support...
r2483 if (vertical == LogType && horizontal == ValueType) {
if (chartType == QChart::ChartTypeCartesian)
return AbstractDomain::XLogYDomain;
if (chartType == QChart::ChartTypePolar)
return AbstractDomain::XLogYPolarDomain;
Michal Klocek
Adds domains swap logic
r2284 }
Miikka Heikkinen
Add Polar chart support...
r2483 if (vertical == ValueType && horizontal == LogType) {
if (chartType == QChart::ChartTypeCartesian)
return AbstractDomain::LogXYDomain;
else if (chartType == QChart::ChartTypePolar)
return AbstractDomain::LogXYPolarDomain;
Michal Klocek
Adds domains swap logic
r2284 }
Miikka Heikkinen
Add Polar chart support...
r2483 if (vertical == LogType && horizontal == LogType) {
if (chartType == QChart::ChartTypeCartesian)
return AbstractDomain::LogXLogYDomain;
else if (chartType == QChart::ChartTypePolar)
return AbstractDomain::LogXLogYPolarDomain;
Michal Klocek
Adds domains swap logic
r2284 }
return AbstractDomain::UndefinedDomain;
}
//refactor create factory
AbstractDomain* ChartDataSet::createDomain(AbstractDomain::DomainType type)
{
Miikka Heikkinen
Add Polar chart support...
r2483 switch (type)
{
case AbstractDomain::LogXLogYDomain:
return new LogXLogYDomain();
case AbstractDomain::XYDomain:
return new XYDomain();
case AbstractDomain::XLogYDomain:
return new XLogYDomain();
case AbstractDomain::LogXYDomain:
return new LogXYDomain();
case AbstractDomain::XYPolarDomain:
return new XYPolarDomain();
case AbstractDomain::XLogYPolarDomain:
return new XLogYPolarDomain();
case AbstractDomain::LogXYPolarDomain:
return new LogXYPolarDomain();
case AbstractDomain::LogXLogYPolarDomain:
return new LogXLogYPolarDomain();
default:
return 0;
}
Michal Klocek
Adds domains swap logic
r2284 }
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "moc_chartdataset_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE