chartdataset.cpp
534 lines
| 14.1 KiB
| text/x-c
|
CppLexer
/ src / chartdataset.cpp
Michal Klocek
|
r771 | /**************************************************************************** | ||
** | ||||
Miikka Heikkinen
|
r2432 | ** Copyright (C) 2013 Digia Plc | ||
Michal Klocek
|
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
|
r131 | #include "chartdataset_p.h" | ||
Michal Klocek
|
r2273 | #include "chartpresenter_p.h" | ||
Jani Honkonen
|
r1314 | #include "qchart.h" | ||
Michal Klocek
|
r2273 | #include "qchart_p.h" | ||
Marek Rosa
|
r1805 | #include "qvalueaxis.h" | ||
Marek Rosa
|
r1810 | #include "qbarcategoryaxis.h" | ||
Marek Rosa
|
r1805 | #include "qvalueaxis_p.h" | ||
Marek Rosa
|
r1817 | #include "qcategoryaxis.h" | ||
Tero Ahola
|
r988 | #include "qabstractseries_p.h" | ||
sauimone
|
r1586 | #include "qabstractbarseries.h" | ||
sauimone
|
r338 | #include "qstackedbarseries.h" | ||
#include "qpercentbarseries.h" | ||||
Jani Honkonen
|
r146 | #include "qpieseries.h" | ||
Michal Klocek
|
r2273 | #include "chartitem_p.h" | ||
Marek Rosa
|
r2275 | #include "xydomain_p.h" | ||
Marek Rosa
|
r2280 | #include "xlogydomain_p.h" | ||
#include "logxydomain_p.h" | ||||
#include "logxlogydomain_p.h" | ||||
Michal Klocek
|
r131 | |||
Marek Rosa
|
r1867 | #ifndef QT_ON_ARM | ||
Jani Honkonen
|
r2097 | #include "qdatetimeaxis.h" | ||
Marek Rosa
|
r1867 | #endif | ||
Michal Klocek
|
r131 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||
Michal Klocek
|
r2273 | ChartDataSet::ChartDataSet(QChart *chart) | ||
: QObject(chart), | ||||
m_chart(chart) | ||||
Michal Klocek
|
r131 | { | ||
Michal Klocek
|
r1556 | |||
Michal Klocek
|
r131 | } | ||
ChartDataSet::~ChartDataSet() | ||||
{ | ||||
Michal Klocek
|
r2284 | deleteAllSeries(); | ||
deleteAllAxes(); | ||||
Michal Klocek
|
r131 | } | ||
Michal Klocek
|
r2273 | /* | ||
* This method adds series to chartdataset, series ownership is taken from caller. | ||||
*/ | ||||
Jani Honkonen
|
r2104 | void ChartDataSet::addSeries(QAbstractSeries *series) | ||
Michal Klocek
|
r131 | { | ||
Michal Klocek
|
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
|
r910 | |||
Michal Klocek
|
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
|
r439 | return; | ||
} | ||||
Michal Klocek
|
r223 | |||
Michal Klocek
|
r2273 | axis->d_ptr->setAlignment(aligment); | ||
Michal Klocek
|
r1695 | |||
Michal Klocek
|
r2273 | if(!axis->alignment()) { | ||
qWarning()<< QObject::tr("No alignment specified !"); | ||||
return; | ||||
}; | ||||
Michal Klocek
|
r1695 | |||
Marek Rosa
|
r2275 | QSharedPointer<AbstractDomain> domain(new XYDomain()); | ||
Michal Klocek
|
r2273 | axis->d_ptr->initializeDomain(domain.data()); | ||
Michal Klocek
|
r223 | |||
Michal Klocek
|
r2273 | axis->setParent(this); | ||
axis->d_ptr->m_chart = m_chart; | ||||
m_axisList.append(axis); | ||||
Michal Klocek
|
r421 | |||
Michal Klocek
|
r2273 | emit axisAdded(axis); | ||
Michal Klocek
|
r1695 | } | ||
Michal Klocek
|
r2273 | /* | ||
* This method removes series form chartdataset, series ownership is passed back to caller. | ||||
*/ | ||||
Jani Honkonen
|
r2104 | void ChartDataSet::removeSeries(QAbstractSeries *series) | ||
Michal Klocek
|
r1695 | { | ||
Michal Klocek
|
r2273 | if (! m_seriesList.contains(series)) { | ||
qWarning() << QObject::tr("Can not remove series. Series not found on the chart."); | ||||
Michal Klocek
|
r1695 | return; | ||
} | ||||
Michal Klocek
|
r2273 | QList<QAbstractAxis*> axes = series->d_ptr->m_axes; | ||
Michal Klocek
|
r1695 | |||
Michal Klocek
|
r2273 | foreach(QAbstractAxis* axis, axes) { | ||
Michal Klocek
|
r2299 | detachAxis(series,axis); | ||
Michal Klocek
|
r910 | } | ||
Michal Klocek
|
r2284 | |||
Michal Klocek
|
r2299 | emit seriesRemoved(series); | ||
m_seriesList.removeAll(series); | ||||
series->setParent(0); | ||||
series->d_ptr->m_chart = 0; | ||||
Michal Klocek
|
r1695 | } | ||
Michal Klocek
|
r910 | |||
Michal Klocek
|
r2273 | /* | ||
* This method removes axis form chartdataset, series ownership is passed back to caller. | ||||
*/ | ||||
void ChartDataSet::removeAxis(QAbstractAxis *axis) | ||||
Michal Klocek
|
r1577 | { | ||
Michal Klocek
|
r2273 | if (! m_axisList.contains(axis)) { | ||
qWarning() << QObject::tr("Can not remove axis. Axis not found on the chart."); | ||||
Tero Ahola
|
r1813 | return; | ||
Michal Klocek
|
r1588 | } | ||
Michal Klocek
|
r1577 | |||
Michal Klocek
|
r2299 | QList<QAbstractSeries*> series = axis->d_ptr->m_series; | ||
foreach(QAbstractSeries* s, series) { | ||||
detachAxis(s,axis); | ||||
} | ||||
Michal Klocek
|
r2273 | emit axisRemoved(axis); | ||
m_axisList.removeAll(axis); | ||||
Michal Klocek
|
r1577 | |||
Michal Klocek
|
r2273 | axis->setParent(0); | ||
axis->d_ptr->m_chart = 0; | ||||
Michal Klocek
|
r1577 | } | ||
Michal Klocek
|
r2273 | /* | ||
Michal Klocek
|
r2284 | * This method attaches axis to series, return true if success. | ||
Michal Klocek
|
r2273 | */ | ||
bool ChartDataSet::attachAxis(QAbstractSeries* series,QAbstractAxis *axis) | ||||
Michal Klocek
|
r1588 | { | ||
Michal Klocek
|
r2273 | Q_ASSERT(series); | ||
Q_ASSERT(axis); | ||||
Michal Klocek
|
r1588 | |||
Michal Klocek
|
r2273 | QList<QAbstractSeries* > attachedSeriesList = axis->d_ptr->m_series; | ||
QList<QAbstractAxis* > attachedAxisList = series->d_ptr->m_axes; | ||||
Michal Klocek
|
r1588 | |||
Michal Klocek
|
r2273 | if (!m_seriesList.contains(series)) { | ||
qWarning() << QObject::tr("Can not find series on the chart."); | ||||
return false; | ||||
} | ||||
Michal Klocek
|
r1588 | |||
Michal Klocek
|
r2273 | if (axis && !m_axisList.contains(axis)) { | ||
qWarning() << QObject::tr("Can not find axis on the chart."); | ||||
return false; | ||||
} | ||||
Michal Klocek
|
r1588 | |||
Michal Klocek
|
r2273 | if (attachedAxisList.contains(axis)) { | ||
qWarning() << QObject::tr("Axis already attached to series."); | ||||
return false; | ||||
Michal Klocek
|
r1695 | } | ||
Michal Klocek
|
r1588 | |||
Michal Klocek
|
r2284 | if (attachedSeriesList.contains(series)) { | ||
qWarning() << QObject::tr("Axis already attached to series."); | ||||
return false; | ||||
} | ||||
Michal Klocek
|
r2285 | AbstractDomain* domain = series->d_ptr->domain(); | ||
Michal Klocek
|
r2284 | AbstractDomain::DomainType type = selectDomain(attachedAxisList<<axis); | ||
if(type == AbstractDomain::UndefinedDomain) return false; | ||||
Michal Klocek
|
r910 | |||
Michal Klocek
|
r2284 | if(domain->type()!=type){ | ||
Marek Rosa
|
r2373 | AbstractDomain *old = domain; | ||
Michal Klocek
|
r2285 | domain = createDomain(type); | ||
Marek Rosa
|
r2373 | domain->setRange(old->minX(), old->maxX(), old->minY(), old->maxY()); | ||
Michal Klocek
|
r439 | } | ||
Michal Klocek
|
r223 | |||
Michal Klocek
|
r2285 | if(!domain) return false; | ||
Michal Klocek
|
r2284 | |||
if(!domain->attachAxis(axis)) return false; | ||||
Michal Klocek
|
r2288 | if(domain!=series->d_ptr->domain()){ | ||
Michal Klocek
|
r2292 | foreach(QAbstractAxis* axis,series->d_ptr->m_axes){ | ||
series->d_ptr->domain()->detachAxis(axis); | ||||
domain->attachAxis(axis); | ||||
} | ||||
Michal Klocek
|
r2288 | series->d_ptr->setDomain(domain); | ||
series->d_ptr->initializeDomain(); | ||||
} | ||||
Michal Klocek
|
r2292 | |||
series->d_ptr->m_axes<<axis; | ||||
axis->d_ptr->m_series<<series; | ||||
Michal Klocek
|
r2273 | series->d_ptr->initializeAxes(); | ||
Michal Klocek
|
r2285 | axis->d_ptr->initializeDomain(domain); | ||
Michal Klocek
|
r2273 | |||
return true; | ||||
Michal Klocek
|
r139 | } | ||
Michal Klocek
|
r2273 | /* | ||
Michal Klocek
|
r2284 | * This method detaches axis to series, return true if success. | ||
Michal Klocek
|
r2273 | */ | ||
bool ChartDataSet::detachAxis(QAbstractSeries* series,QAbstractAxis *axis) | ||||
Michal Klocek
|
r1725 | { | ||
Michal Klocek
|
r2273 | Q_ASSERT(series); | ||
Q_ASSERT(axis); | ||||
Michal Klocek
|
r1725 | |||
Michal Klocek
|
r2273 | QList<QAbstractSeries* > attachedSeriesList = axis->d_ptr->m_series; | ||
QList<QAbstractAxis* > attachedAxisList = series->d_ptr->m_axes; | ||||
Michal Klocek
|
r2285 | AbstractDomain* domain = series->d_ptr->domain(); | ||
Michal Klocek
|
r1725 | |||
Michal Klocek
|
r2273 | if (!m_seriesList.contains(series)) { | ||
qWarning() << QObject::tr("Can not find series on the chart."); | ||||
return false; | ||||
} | ||||
Michal Klocek
|
r1725 | |||
Michal Klocek
|
r2273 | if (axis && !m_axisList.contains(axis)) { | ||
qWarning() << QObject::tr("Can not find axis on the chart."); | ||||
return false; | ||||
} | ||||
Michal Klocek
|
r1725 | |||
Michal Klocek
|
r2273 | if (!attachedAxisList.contains(axis)) { | ||
qWarning() << QObject::tr("Axis not attached to series."); | ||||
return false; | ||||
Michal Klocek
|
r1725 | } | ||
Michal Klocek
|
r2273 | Q_ASSERT(axis->d_ptr->m_series.contains(series)); | ||
Michal Klocek
|
r2284 | domain->detachAxis(axis); | ||
Michal Klocek
|
r2273 | series->d_ptr->m_axes.removeAll(axis); | ||
axis->d_ptr->m_series.removeAll(series); | ||||
Michal Klocek
|
r139 | |||
Michal Klocek
|
r2273 | return true; | ||
Michal Klocek
|
r139 | } | ||
Michal Klocek
|
r2273 | void ChartDataSet::createDefaultAxes() | ||
Michal Klocek
|
r139 | { | ||
Michal Klocek
|
r2273 | if (m_seriesList.isEmpty()) | ||
return; | ||||
Michal Klocek
|
r1593 | |||
Michal Klocek
|
r2273 | QAbstractAxis::AxisTypes typeX(0); | ||
QAbstractAxis::AxisTypes typeY(0); | ||||
Michal Klocek
|
r1652 | |||
Michal Klocek
|
r2273 | // Remove possibly existing axes | ||
Michal Klocek
|
r2284 | deleteAllAxes(); | ||
Michal Klocek
|
r1593 | |||
Michal Klocek
|
r2273 | Q_ASSERT(m_axisList.isEmpty()); | ||
Michal Klocek
|
r1593 | |||
Michal Klocek
|
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
|
r223 | } | ||
Michal Klocek
|
r1593 | |||
Michal Klocek
|
r2273 | // Create the axes of the types selected | ||
createAxes(typeX, Qt::Horizontal); | ||||
createAxes(typeY, Qt::Vertical); | ||||
Michal Klocek
|
r1593 | |||
Michal Klocek
|
r439 | } | ||
Michal Klocek
|
r223 | |||
Michal Klocek
|
r2273 | void ChartDataSet::createAxes(QAbstractAxis::AxisTypes type, Qt::Orientation orientation) | ||
Michal Klocek
|
r439 | { | ||
Michal Klocek
|
r2273 | QAbstractAxis *axis = 0; | ||
//decide what axis should be created | ||||
Michal Klocek
|
r1593 | |||
Michal Klocek
|
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
|
r439 | } | ||
Michal Klocek
|
r1593 | |||
Michal Klocek
|
r2273 | if (axis) { | ||
//create one axis for all | ||||
Michal Klocek
|
r1593 | |||
Michal Klocek
|
r2273 | addAxis(axis,orientation==Qt::Horizontal?Qt::AlignBottom:Qt::AlignLeft); | ||
Michal Klocek
|
r2408 | qreal min = 0; | ||
qreal max = 0; | ||||
findMinMaxForSeries(m_seriesList,orientation,min,max); | ||||
Michal Klocek
|
r2273 | foreach(QAbstractSeries *s, m_seriesList) { | ||
attachAxis(s,axis); | ||||
Michal Klocek
|
r1738 | } | ||
Michal Klocek
|
r2408 | axis->setRange(min,max); | ||
Michal Klocek
|
r910 | } | ||
Michal Klocek
|
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
|
r538 | } | ||
} | ||||
Michal Klocek
|
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); | ||||
} | ||||
Mika Salmela
|
r2414 | if (min == max) { | ||
min -= 0.5; | ||||
max += 0.5; | ||||
} | ||||
Michal Klocek
|
r2408 | } | ||
Michal Klocek
|
r2284 | void ChartDataSet::deleteAllSeries() | ||
sauimone
|
r1554 | { | ||
Michal Klocek
|
r2284 | foreach (QAbstractSeries *s , m_seriesList){ | ||
Michal Klocek
|
r2273 | removeSeries(s); | ||
Michal Klocek
|
r2299 | s->deleteLater(); | ||
Michal Klocek
|
r2284 | } | ||
Michal Klocek
|
r2273 | Q_ASSERT(m_seriesList.count() == 0); | ||
sauimone
|
r1554 | } | ||
Michal Klocek
|
r2284 | void ChartDataSet::deleteAllAxes() | ||
Michal Klocek
|
r223 | { | ||
Michal Klocek
|
r2284 | foreach (QAbstractAxis *a , m_axisList){ | ||
Michal Klocek
|
r2273 | removeAxis(a); | ||
Michal Klocek
|
r2299 | a->deleteLater(); | ||
Michal Klocek
|
r2284 | } | ||
Michal Klocek
|
r2273 | Q_ASSERT(m_axisList.count() == 0); | ||
Michal Klocek
|
r223 | } | ||
Michal Klocek
|
r2273 | void ChartDataSet::zoomInDomain(const QRectF &rect) | ||
sauimone
|
r1554 | { | ||
Marek Rosa
|
r2275 | QList<AbstractDomain*> domains; | ||
Michal Klocek
|
r2273 | foreach(QAbstractSeries *s, m_seriesList) { | ||
Michal Klocek
|
r2285 | AbstractDomain* domain = s->d_ptr->domain(); | ||
Michal Klocek
|
r2289 | s->d_ptr->m_domain->blockRangeSignals(true); | ||
Michal Klocek
|
r2273 | domains<<domain; | ||
Michal Klocek
|
r1699 | } | ||
Marek Rosa
|
r2275 | foreach(AbstractDomain *domain, domains) | ||
Michal Klocek
|
r2273 | domain->zoomIn(rect); | ||
Michal Klocek
|
r1564 | |||
Marek Rosa
|
r2275 | foreach(AbstractDomain *domain, domains) | ||
Michal Klocek
|
r2289 | domain->blockRangeSignals(false); | ||
Michal Klocek
|
r2273 | } | ||
Michal Klocek
|
r1564 | |||
Michal Klocek
|
r2273 | void ChartDataSet::zoomOutDomain(const QRectF &rect) | ||
{ | ||||
Marek Rosa
|
r2275 | QList<AbstractDomain*> domains; | ||
Michal Klocek
|
r2273 | foreach(QAbstractSeries *s, m_seriesList) { | ||
Michal Klocek
|
r2285 | AbstractDomain* domain = s->d_ptr->domain(); | ||
Michal Klocek
|
r2289 | s->d_ptr->m_domain->blockRangeSignals(true); | ||
Michal Klocek
|
r2273 | domains<<domain; | ||
Michal Klocek
|
r1564 | } | ||
Marek Rosa
|
r2275 | foreach(AbstractDomain *domain, domains) | ||
Michal Klocek
|
r2273 | domain->zoomOut(rect); | ||
Michal Klocek
|
r1564 | |||
Marek Rosa
|
r2275 | foreach(AbstractDomain *domain, domains) | ||
Michal Klocek
|
r2289 | domain->blockRangeSignals(false); | ||
Michal Klocek
|
r2273 | } | ||
Tero Ahola
|
r1813 | |||
Michal Klocek
|
r2273 | void ChartDataSet::scrollDomain(qreal dx, qreal dy) | ||
{ | ||||
Marek Rosa
|
r2275 | QList<AbstractDomain*> domains; | ||
Michal Klocek
|
r2273 | foreach(QAbstractSeries *s, m_seriesList) { | ||
Michal Klocek
|
r2289 | AbstractDomain* domain = s->d_ptr->domain(); | ||
s->d_ptr->m_domain->blockRangeSignals(true); | ||||
Michal Klocek
|
r2273 | domains<<domain; | ||
Michal Klocek
|
r1577 | } | ||
Michal Klocek
|
r1564 | |||
Marek Rosa
|
r2275 | foreach(AbstractDomain *domain, domains) | ||
Michal Klocek
|
r2273 | domain->move(dx, dy); | ||
Michal Klocek
|
r1564 | |||
Marek Rosa
|
r2275 | foreach(AbstractDomain *domain, domains) | ||
Michal Klocek
|
r2289 | domain->blockRangeSignals(false); | ||
Michal Klocek
|
r1542 | } | ||
Marek Rosa
|
r2344 | QPointF ChartDataSet::mapToValue(const QPointF &position, QAbstractSeries *series) | ||
{ | ||||
QPointF point; | ||||
if (series == 0 && !m_seriesList.isEmpty()) | ||||
series = m_seriesList.first(); | ||||
Marek Rosa
|
r2351 | if (series && series->type() == QAbstractSeries::SeriesTypePie) | ||
return point; | ||||
Marek Rosa
|
r2344 | if (series && m_seriesList.contains(series)) | ||
Marek Rosa
|
r2351 | point = series->d_ptr->m_domain->calculateDomainPoint(position - m_chart->plotArea().topLeft()); | ||
Marek Rosa
|
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
|
r2351 | if (series && series->type() == QAbstractSeries::SeriesTypePie) | ||
return QPoint(0, 0); | ||||
Marek Rosa
|
r2356 | bool ok; | ||
Marek Rosa
|
r2344 | if (series && m_seriesList.contains(series)) | ||
Marek Rosa
|
r2356 | point += series->d_ptr->m_domain->calculateGeometryPoint(value, ok); | ||
Marek Rosa
|
r2344 | return point; | ||
} | ||||
Michal Klocek
|
r2273 | QList<QAbstractAxis*> ChartDataSet::axes() const | ||
Michal Klocek
|
r531 | { | ||
Michal Klocek
|
r2273 | return m_axisList; | ||
Michal Klocek
|
r1078 | } | ||
Jani Honkonen
|
r2104 | QList<QAbstractSeries *> ChartDataSet::series() const | ||
Michal Klocek
|
r1078 | { | ||
Michal Klocek
|
r2273 | return m_seriesList; | ||
Michal Klocek
|
r531 | } | ||
Michal Klocek
|
r2273 | |||
Michal Klocek
|
r2284 | AbstractDomain::DomainType ChartDataSet::selectDomain(QList<QAbstractAxis*> axes) | ||
{ | ||||
enum Type { | ||||
Michal Klocek
|
r2288 | Undefined = 0, | ||
Michal Klocek
|
r2284 | LogType = 0x1, | ||
ValueType = 0x2 | ||||
}; | ||||
Michal Klocek
|
r2288 | int horizontal(Undefined); | ||
int vertical(Undefined); | ||||
Michal Klocek
|
r2284 | |||
foreach(QAbstractAxis* axis, axes) | ||||
{ | ||||
switch(axis->type()) { | ||||
case QAbstractAxis::AxisTypeLogValue: | ||||
Michal Klocek
|
r2288 | |||
if(axis->orientation()==Qt::Horizontal) { | ||||
horizontal|=LogType; | ||||
} | ||||
if(axis->orientation()==Qt::Vertical) { | ||||
vertical|=LogType; | ||||
} | ||||
Michal Klocek
|
r2284 | break; | ||
case QAbstractAxis::AxisTypeValue: | ||||
case QAbstractAxis::AxisTypeBarCategory: | ||||
case QAbstractAxis::AxisTypeCategory: | ||||
case QAbstractAxis::AxisTypeDateTime: | ||||
Michal Klocek
|
r2288 | if(axis->orientation()==Qt::Horizontal) { | ||
horizontal|=ValueType; | ||||
} | ||||
if(axis->orientation()==Qt::Vertical) { | ||||
vertical|=ValueType; | ||||
} | ||||
Michal Klocek
|
r2284 | break; | ||
default: | ||||
qWarning()<<"Undefined type"; | ||||
break; | ||||
} | ||||
} | ||||
Michal Klocek
|
r2288 | if(vertical==Undefined) vertical=ValueType; | ||
if(horizontal==Undefined) horizontal=ValueType; | ||||
Michal Klocek
|
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
|
r2287 | return AbstractDomain::LogXLogYDomain; | ||
Michal Klocek
|
r2284 | } | ||
return AbstractDomain::UndefinedDomain; | ||||
} | ||||
//refactor create factory | ||||
AbstractDomain* ChartDataSet::createDomain(AbstractDomain::DomainType type) | ||||
{ | ||||
switch(type) | ||||
{ | ||||
Michal Klocek
|
r2287 | case AbstractDomain::LogXLogYDomain: | ||
return new LogXLogYDomain(); | ||||
Michal Klocek
|
r2284 | case AbstractDomain::XYDomain: | ||
return new XYDomain(); | ||||
case AbstractDomain::XLogYDomain: | ||||
Michal Klocek
|
r2287 | return new XLogYDomain(); | ||
Michal Klocek
|
r2284 | case AbstractDomain::LogXYDomain: | ||
Michal Klocek
|
r2287 | return new LogXYDomain(); | ||
Michal Klocek
|
r2284 | default: | ||
return 0; | ||||
} | ||||
} | ||||
Michal Klocek
|
r131 | #include "moc_chartdataset_p.cpp" | ||
QTCOMMERCIALCHART_END_NAMESPACE | ||||