##// END OF EJS Templates
Fix label truncate issues with multiple axes...
Fix label truncate issues with multiple axes If there were multiple axes on single side of the chart, the axes wider/higher than average never got their preferred size, causing labels to truncate. Fixed by calculating the required squeeze ratio instead of just blindly using even fraction of available space. Task-number: QTRD-1897 Reviewed-by: Mika Salmela

File last commit:

r2408:f065af9daaed
r2411:6fca0e6f42a3
Show More
chartdataset.cpp
530 lines | 14.1 KiB | text/x-c | CppLexer
/ src / chartdataset.cpp
Michal Klocek
Updates chartdataset unit test
r771 /****************************************************************************
**
** 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$
**
****************************************************************************/
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"
Marek Rosa
Log domains zoomin, zoomout and move added
r2280 #include "xlogydomain_p.h"
#include "logxydomain_p.h"
#include "logxlogydomain_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;
}
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.
*/
void ChartDataSet::addAxis(QAbstractAxis *axis,Qt::Alignment aligment)
{
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
Michal Klocek
Refactors internals...
r2273 if(!axis->alignment()) {
qWarning()<< QObject::tr("No alignment specified !");
return;
};
Michal Klocek
Adds axis domain intialization
r1695
Marek Rosa
Domains added
r2275 QSharedPointer<AbstractDomain> domain(new XYDomain());
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);
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 */
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
Michal Klocek
Refactors internals...
r2273 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;
}
Michal Klocek
Domain not sharable again
r2285 AbstractDomain* domain = series->d_ptr->domain();
Michal Klocek
Adds domains swap logic
r2284 AbstractDomain::DomainType type = selectDomain(attachedAxisList<<axis);
if(type == AbstractDomain::UndefinedDomain) return false;
Michal Klocek
Fix indexing issue of series
r910
Michal Klocek
Adds domains swap logic
r2284 if(domain->type()!=type){
Marek Rosa
Preset range on LogAxis fix
r2373 AbstractDomain *old = domain;
Michal Klocek
Domain not sharable again
r2285 domain = createDomain(type);
Marek Rosa
Preset range on LogAxis fix
r2373 domain->setRange(old->minX(), old->maxX(), old->minY(), old->maxY());
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Domain not sharable again
r2285 if(!domain) return false;
Michal Klocek
Adds domains swap logic
r2284
if(!domain->attachAxis(axis)) return false;
Michal Klocek
Fix domain switching
r2288 if(domain!=series->d_ptr->domain()){
Michal Klocek
bugfix signals not reconnected when domain changed
r2292 foreach(QAbstractAxis* axis,series->d_ptr->m_axes){
series->d_ptr->domain()->detachAxis(axis);
domain->attachAxis(axis);
}
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
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());
AbstractDomain* domain = series.first()->d_ptr->domain();
min = (orientation == Qt::Vertical) ? domain->minY() : domain->minX();
max = (orientation == Qt::Vertical) ? domain->maxY() : domain->maxX();
for(int i = 1; i< series.size(); i++) {
AbstractDomain* domain = series[i]->d_ptr->domain();
min = qMin((orientation == Qt::Vertical) ? domain->minY() : domain->minX(), min);
max = qMax((orientation == Qt::Vertical) ? domain->maxY() : domain->maxX(), max);
}
}
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;
}
Michal Klocek
Refactors internals...
r2273 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
Michal Klocek
Adds domains swap logic
r2284 AbstractDomain::DomainType ChartDataSet::selectDomain(QList<QAbstractAxis*> axes)
{
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
foreach(QAbstractAxis* axis, axes)
{
switch(axis->type()) {
case QAbstractAxis::AxisTypeLogValue:
Michal Klocek
Fix domain switching
r2288
if(axis->orientation()==Qt::Horizontal) {
horizontal|=LogType;
}
if(axis->orientation()==Qt::Vertical) {
vertical|=LogType;
}
Michal Klocek
Adds domains swap logic
r2284 break;
case QAbstractAxis::AxisTypeValue:
case QAbstractAxis::AxisTypeBarCategory:
case QAbstractAxis::AxisTypeCategory:
case QAbstractAxis::AxisTypeDateTime:
Michal Klocek
Fix domain switching
r2288 if(axis->orientation()==Qt::Horizontal) {
horizontal|=ValueType;
}
if(axis->orientation()==Qt::Vertical) {
vertical|=ValueType;
}
Michal Klocek
Adds domains swap logic
r2284 break;
default:
qWarning()<<"Undefined type";
break;
}
}
Michal Klocek
Fix domain switching
r2288 if(vertical==Undefined) vertical=ValueType;
if(horizontal==Undefined) horizontal=ValueType;
Michal Klocek
Adds domains swap logic
r2284 if(vertical==ValueType && horizontal== ValueType) {
return AbstractDomain::XYDomain;
}
if(vertical==LogType && horizontal== ValueType) {
return AbstractDomain::XLogYDomain;
}
if(vertical==ValueType && horizontal== LogType) {
return AbstractDomain::LogXYDomain;
}
if(vertical==LogType && horizontal== LogType) {
Michal Klocek
Adds logdomains to factory method
r2287 return AbstractDomain::LogXLogYDomain;
Michal Klocek
Adds domains swap logic
r2284 }
return AbstractDomain::UndefinedDomain;
}
//refactor create factory
AbstractDomain* ChartDataSet::createDomain(AbstractDomain::DomainType type)
{
switch(type)
{
Michal Klocek
Adds logdomains to factory method
r2287 case AbstractDomain::LogXLogYDomain:
return new LogXLogYDomain();
Michal Klocek
Adds domains swap logic
r2284 case AbstractDomain::XYDomain:
return new XYDomain();
case AbstractDomain::XLogYDomain:
Michal Klocek
Adds logdomains to factory method
r2287 return new XLogYDomain();
Michal Klocek
Adds domains swap logic
r2284 case AbstractDomain::LogXYDomain:
Michal Klocek
Adds logdomains to factory method
r2287 return new LogXYDomain();
Michal Klocek
Adds domains swap logic
r2284 default:
return 0;
}
}
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "moc_chartdataset_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE