##// END OF EJS Templates
enablers for tooltip and floating values, bug fixing, updated examples. tidying up the code
enablers for tooltip and floating values, bug fixing, updated examples. tidying up the code

File last commit:

r293:c84fc5fb7b13
r296:8254aab7233d
Show More
chartpresenter.cpp
241 lines | 8.5 KiB | text/x-c | CppLexer
/ src / chartpresenter.cpp
Michal Klocek
Refactored for MVP...
r139 #include "qchart.h"
Michal Klocek
Adds refactored axis to presenter
r140 #include "qchartaxis.h"
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "chartpresenter_p.h"
#include "chartdataset_p.h"
Michal Klocek
Refactor themes...
r143 #include "charttheme_p.h"
Michal Klocek
Refactored for MVP...
r139 //series
sauimone
Common naming convention for barcharts
r216 #include "qbarchartseries.h"
#include "qstackedbarchartseries.h"
#include "qpercentbarchartseries.h"
Michal Klocek
Fix previous broken commit
r145 #include "qlinechartseries.h"
Jani Honkonen
Pie chart refactoring
r142 #include "qpieseries.h"
Tero Ahola
Integrated scatter again. Missing functionality....
r158 #include "qscatterseries.h"
Michal Klocek
Refactored for MVP...
r139 //items
Michal Klocek
Adds refactored axis to presenter
r140 #include "axisitem_p.h"
sauimone
Common naming convention for barcharts
r216 #include "barpresenter.h"
#include "stackedbarpresenter.h"
Michal Klocek
Fix previous broken commit
r145 #include "linechartitem_p.h"
sauimone
Common naming convention for barcharts
r216 #include "percentbarpresenter.h"
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "linechartanimationitem_p.h"
Jani Honkonen
Moved pie stuff to own .pri file and rename stuff
r146 #include "piepresenter.h"
Tero Ahola
Moved scatter impl into a subfolder
r194 #include "scatterpresenter_p.h"
Michal Klocek
Refactors qchart , adds line animation...
r131
QTCOMMERCIALCHART_BEGIN_NAMESPACE
ChartPresenter::ChartPresenter(QChart* chart,ChartDataSet* dataset):QObject(chart),
m_chart(chart),
m_dataset(dataset),
Michal Klocek
Refactor themes...
r143 m_chartTheme(0),
Michal Klocek
Refactored for MVP...
r139 m_marginSize(0),
Michal Klocek
Refactors qchart , adds line animation...
r131 m_rect(QRectF(QPoint(0,0),m_chart->size()))
{
Michal Klocek
Refactors axis handling...
r223 createConnections();
Michal Klocek
Adds missing ids to theme classes
r153 setChartTheme(QChart::ChartThemeDefault);
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Refactors qchart , adds line animation...
r131 }
ChartPresenter::~ChartPresenter()
{
}
Michal Klocek
Adds refactored axis to presenter
r140 void ChartPresenter::createConnections()
Michal Klocek
Refactors qchart , adds line animation...
r131 {
QObject::connect(m_chart,SIGNAL(geometryChanged()),this,SLOT(handleGeometryChanged()));
QObject::connect(m_dataset,SIGNAL(seriesAdded(QChartSeries*)),this,SLOT(handleSeriesAdded(QChartSeries*)));
Michal Klocek
Refactors axis handling...
r223 QObject::connect(m_dataset,SIGNAL(seriesRemoved(QChartSeries*)),this,SLOT(handleSeriesRemoved(QChartSeries*)));
QObject::connect(m_dataset,SIGNAL(axisAdded(QChartAxis*)),this,SLOT(handleAxisAdded(QChartAxis*)));
QObject::connect(m_dataset,SIGNAL(axisRemoved(QChartAxis*)),this,SLOT(handleAxisRemoved(QChartAxis*)));
QObject::connect(m_dataset,SIGNAL(seriesDomainChanged(QChartSeries*,const Domain&)),this,SLOT(handleSeriesDomainChanged(QChartSeries*,const Domain&)));
QObject::connect(m_dataset,SIGNAL(axisLabelsChanged(QChartAxis*,const QStringList&)),this,SLOT(handleAxisLabelsChanged(QChartAxis*,const QStringList&)));
}
QRectF ChartPresenter::geometry() const
{
return m_rect;
Michal Klocek
Refactors qchart , adds line animation...
r131 }
void ChartPresenter::handleGeometryChanged()
{
m_rect = QRectF(QPoint(0,0),m_chart->size());
Michal Klocek
Refactored for MVP...
r139 m_rect.adjust(m_marginSize,m_marginSize, -m_marginSize, -m_marginSize);
Michal Klocek
Fix test application to have valid window size
r147 Q_ASSERT(m_rect.isValid());
Michal Klocek
Refactored for MVP...
r139 emit geometryChanged(m_rect);
}
Michal Klocek
Refactors qchart , adds line animation...
r131
Michal Klocek
Refactored for MVP...
r139 int ChartPresenter::margin() const
{
return m_marginSize;
}
Michal Klocek
Refactors qchart , adds line animation...
r131
Michal Klocek
Refactored for MVP...
r139 void ChartPresenter::setMargin(int margin)
{
m_marginSize = margin;
Michal Klocek
Refactors qchart , adds line animation...
r131 }
Michal Klocek
Refactors axis handling...
r223 void ChartPresenter::handleAxisAdded(QChartAxis* axis)
{
AxisItem* item ;
if(axis==m_dataset->axisX()){
item = new AxisItem(AxisItem::X_AXIS,m_chart);
}else{
item = new AxisItem(AxisItem::Y_AXIS,m_chart);
}
QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
QObject::connect(axis,SIGNAL(update(QChartAxis*)),item,SLOT(handleAxisUpdate(QChartAxis*)));
Michal Klocek
Bugfix no geometry call when axis removed and added again
r259
item->handleAxisUpdate(axis);
item->handleGeometryChanged(m_rect);
Michal Klocek
Refactors axis handling...
r223 m_chartTheme->decorate(axis,item);
m_axisItems.insert(axis,item);
}
void ChartPresenter::handleAxisRemoved(QChartAxis* axis)
{
AxisItem* item = m_axisItems.take(axis);
Q_ASSERT(item);
delete item;
}
Michal Klocek
Refactors qchart , adds line animation...
r131 void ChartPresenter::handleSeriesAdded(QChartSeries* series)
{
switch(series->type())
{
case QChartSeries::SeriesTypeLine: {
Michal Klocek
Fix previous broken commit
r145 QLineChartSeries* lineSeries = static_cast<QLineChartSeries*>(series);
LineChartItem* item = new LineChartAnimationItem(this,lineSeries,m_chart);
Michal Klocek
Refactor themes...
r143 m_chartTheme->decorate(item,lineSeries,m_chartItems.count());
Michal Klocek
Refactored for MVP...
r139 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
QObject::connect(lineSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
m_chartItems.insert(series,item);
break;
}
case QChartSeries::SeriesTypeBar: {
sauimone
Common naming convention for barcharts
r216 QBarChartSeries* barSeries = static_cast<QBarChartSeries*>(series);
sauimone
moved tooltip to presenter
r288 BarPresenter* item = new BarPresenter(barSeries,m_chart);
Michal Klocek
Refactor themes...
r143 m_chartTheme->decorate(item,barSeries,m_chartItems.count());
Michal Klocek
Refactored for MVP...
r139 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
QObject::connect(barSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
Michal Klocek
Refactors qchart , adds line animation...
r131 m_chartItems.insert(series,item);
Michal Klocek
Refactored for MVP...
r139 // m_axisXItem->setVisible(false);
Michal Klocek
Refactors qchart , adds line animation...
r131 break;
}
Michal Klocek
Refactored for MVP...
r139 case QChartSeries::SeriesTypeStackedBar: {
sauimone
Common naming convention for barcharts
r216 QStackedBarChartSeries* stackedBarSeries = static_cast<QStackedBarChartSeries*>(series);
sauimone
moved tooltip to presenter
r288 StackedBarPresenter* item = new StackedBarPresenter(stackedBarSeries,m_chart);
Michal Klocek
Refactor themes...
r143 m_chartTheme->decorate(item,stackedBarSeries,m_chartItems.count());
Michal Klocek
Refactored for MVP...
r139 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
QObject::connect(stackedBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
m_chartItems.insert(series,item);
break;
}
case QChartSeries::SeriesTypePercentBar: {
sauimone
Common naming convention for barcharts
r216 QPercentBarChartSeries* percentBarSeries = static_cast<QPercentBarChartSeries*>(series);
sauimone
moved tooltip to presenter
r288 PercentBarPresenter* item = new PercentBarPresenter(percentBarSeries,m_chart);
Michal Klocek
Refactor themes...
r143 m_chartTheme->decorate(item,percentBarSeries ,m_chartItems.count());
Michal Klocek
Refactored for MVP...
r139 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
QObject::connect(percentBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
m_chartItems.insert(series,item);
break;
Michal Klocek
Adds refactored axis to presenter
r140 }
Tero Ahola
Integrated scatter again. Missing functionality....
r158 case QChartSeries::SeriesTypeScatter: {
QScatterSeries *scatterSeries = qobject_cast<QScatterSeries *>(series);
ScatterPresenter *scatterPresenter = new ScatterPresenter(scatterSeries, m_chart);
QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)),
scatterPresenter, SLOT(handleGeometryChanged(const QRectF&)));
Tero Ahola
Enabled theme colors in scatter again
r182 m_chartTheme->decorate(scatterPresenter, scatterSeries, m_chartItems.count());
Tero Ahola
Integrated scatter again. Missing functionality....
r158 m_chartItems.insert(scatterSeries, scatterPresenter);
break;
}
Jani Honkonen
Pie chart refactoring
r142 case QChartSeries::SeriesTypePie: {
Jani Honkonen
Make pie work better with chartwidgettest
r163 QPieSeries *s = qobject_cast<QPieSeries *>(series);
PiePresenter* pie = new PiePresenter(m_chart, s);
Jani Honkonen
Drafting pie theme stuff
r166 m_chartTheme->decorate(pie, s, m_chartItems.count());
Jani Honkonen
Moved pie stuff to own .pri file and rename stuff
r146 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)), pie, SLOT(handleGeometryChanged(const QRectF&)));
Jani Honkonen
Clear background when there is only pie chart.
r293
// Hide all from background when there is only piechart
// TODO: refactor this ugly code... should be one setting for this
if (m_chartItems.count() == 0) {
m_chart->axisX()->setAxisVisible(false);
m_chart->axisY()->setAxisVisible(false);
m_chart->axisX()->setGridVisible(false);
m_chart->axisY()->setGridVisible(false);
m_chart->axisX()->setLabelsVisible(false);
m_chart->axisY()->setLabelsVisible(false);
m_chart->axisX()->setShadesVisible(false);
m_chart->axisY()->setShadesVisible(false);
m_chart->setChartBackgroundBrush(Qt::transparent);
}
Jani Honkonen
Moved pie stuff to own .pri file and rename stuff
r146 m_chartItems.insert(series, pie);
Jani Honkonen
Pie chart refactoring
r142 break;
}
Michal Klocek
Refactors qchart , adds line animation...
r131 default: {
Michal Klocek
Refactored for MVP...
r139 qDebug()<< "Series type" << series->type() << "not implemented.";
break;
Michal Klocek
Refactors qchart , adds line animation...
r131 }
}
Michal Klocek
Adds default gemoetry change call in case of new series
r148
if(m_rect.isValid()) emit geometryChanged(m_rect);
Michal Klocek
Refactors qchart , adds line animation...
r131 }
Michal Klocek
Refactors axis handling...
r223 void ChartPresenter::handleSeriesRemoved(QChartSeries* series)
Michal Klocek
Refactored for MVP...
r139 {
Michal Klocek
Refactors axis handling...
r223 ChartItem* item = m_chartItems.take(series);
delete item;
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Refactors qchart , adds line animation...
r131
Michal Klocek
Refactors axis handling...
r223 void ChartPresenter::handleSeriesChanged(QChartSeries* series)
Michal Klocek
Refactored for MVP...
r139 {
Michal Klocek
Refactors axis handling...
r223 //TODO:
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Refactors qchart , adds line animation...
r131
Michal Klocek
Refactors axis handling...
r223 void ChartPresenter::handleSeriesDomainChanged(QChartSeries* series, const Domain& domain)
Michal Klocek
Refactored for MVP...
r139 {
Michal Klocek
Refactors axis handling...
r223 m_chartItems.value(series)->handleDomainChanged(domain);
Michal Klocek
Refactors qchart , adds line animation...
r131 }
Michal Klocek
Refactors axis handling...
r223 void ChartPresenter::handleAxisLabelsChanged(QChartAxis* axis,const QStringList& labels)
Michal Klocek
Refactored for MVP...
r139 {
Michal Klocek
Bugfix shades not updated aftet tick changed
r241 m_axisItems.value(axis)->handleLabelsChanged(axis,labels);
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Adds missing ids to theme classes
r153 void ChartPresenter::setChartTheme(QChart::ChartTheme theme)
Michal Klocek
Refactor themes...
r143 {
delete m_chartTheme;
m_chartTheme = ChartTheme::createTheme(theme);
m_chartTheme->decorate(m_chart);
QMapIterator<QChartSeries*,ChartItem*> i(m_chartItems);
int index=0;
while (i.hasNext()) {
i.next();
index++;
m_chartTheme->decorate(i.value(),i.key(),index);
}
Michal Klocek
Refactors axis handling...
r223 QMapIterator<QChartAxis*,AxisItem*> j(m_axisItems);
while (j.hasNext()) {
j.next();
m_chartTheme->decorate(j.key(),j.value());
}
Michal Klocek
Adds more axis handling...
r176 }
Michal Klocek
Adds missing ids to theme classes
r153 QChart::ChartTheme ChartPresenter::chartTheme()
Michal Klocek
Refactor themes...
r143 {
Michal Klocek
Adds missing ids to theme classes
r153 return m_chartTheme->id();
}
Michal Klocek
Refactor themes...
r143
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "moc_chartpresenter_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE