##// END OF EJS Templates
Integrated scatter again. Missing functionality....
Tero Ahola -
r158:dd283485728c
parent child
Show More
@@ -0,0 +1,93
1 #include "scatterpresenter.h"
2 #include "qscatterseries.h"
3 #include <QPen>
4 #include <QPainter>
5 #include <QGraphicsScene>
6 #include <QDebug>
7
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9
10 ScatterPresenter::ScatterPresenter(QScatterSeries *series, QGraphicsObject *parent) :
11 ChartItem(parent),
12 m_series(series),
13 m_boundingRect(),
14 //m_markerColor(QColor()),
15 m_markerColor(QColor(255, 0, 0)),
16 m_visibleChartArea()
17 {
18 if (parent)
19 m_boundingRect = parent->boundingRect();
20
21 if (series) {
22 connect(series, SIGNAL(changed()), this, SLOT(handleModelChanged()));
23 }
24 }
25
26 void ScatterPresenter::handleDomainChanged(const Domain& domain)
27 {
28 m_visibleChartArea = domain;
29 changeGeometry();
30 }
31
32 void ScatterPresenter::handleGeometryChanged(const QRectF& rect)
33 {
34 m_boundingRect = rect;
35 changeGeometry();
36 }
37
38 void ScatterPresenter::handleModelChanged()
39 {
40 // TODO: more fine grained modelChanged signaling
41 changeGeometry();
42 }
43
44 void ScatterPresenter::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/)
45 {
46 // TODO: The opacity should be user definable?
47 //brush.setColor(QColor(255, 82, 0, 100));
48 if (m_markerColor.isValid()) {
49 QPen pen = painter->pen();
50 QBrush brush = pen.brush();
51 brush.setColor(m_markerColor);
52 pen.setBrush(brush);
53 pen.setWidth(4);
54 painter->setPen(pen);
55 }
56 else {
57 //painter->setPen(m_theme.markerPen);
58 // brush.setColor(m_theme..lineColor);
59 }
60
61 // TODO: m_scenex and m_sceny are left empty during construction -> we would need a resize
62 // event right after construction or maybe given a size during initialization
63 qDebug() << "scene w: "<< scene()->width() << " h: " << scene()->height();
64 for (int i(0); i < m_scenex.count() && i < m_sceney.count(); i++) {
65 qDebug() << "scene w: "<< scene()->width() << " h: " << scene()->height();
66 qDebug() << "x: "<< m_scenex.at(i) << " y: " << m_sceney.at(i);
67 if (scene()->width() > m_scenex.at(i) && scene()->height() > m_sceney.at(i))
68 //painter->drawArc(m_scenex.at(i), m_sceney.at(i), 2, 2, 0, 5760);
69 painter->drawPoint(m_scenex.at(i), m_sceney.at(i));
70 }
71 }
72
73 void ScatterPresenter::changeGeometry()
74 {
75 if (m_boundingRect.isValid()) {
76
77 prepareGeometryChange();
78 qreal scalex = m_boundingRect.width() / m_visibleChartArea.spanX();
79 qreal scaley = m_boundingRect.height() / m_visibleChartArea.spanY();
80 m_scenex.clear();
81 m_sceney.clear();
82
83 // Convert relative coordinates to absolute pixel coordinates that can be used for drawing
84 foreach (QPointF point, m_series->data()) {
85 m_scenex.append(m_boundingRect.left() + point.x() * scalex - m_visibleChartArea.m_minX * scalex);
86 m_sceney.append(m_boundingRect.bottom() - point.y() * scaley + m_visibleChartArea.m_minY * scaley);
87 }
88 }
89 }
90
91 #include "moc_scatterpresenter.cpp"
92
93 QTCOMMERCIALCHART_END_NAMESPACE
@@ -0,0 +1,46
1 #ifndef SCATTERPRESENTER_H
2 #define SCATTERPRESENTER_H
3
4 #include "qchartglobal.h"
5 #include "chartitem_p.h"
6 #include <QObject>
7
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9
10 class QScatterSeries;
11
12 /*!
13 * The "business logic" of scatter series. This is a QObject that does not have a parent QObject.
14 * The QGraphicsItem parent owns the object instead.
15 */
16 class ScatterPresenter : public QObject, public ChartItem
17 {
18 Q_OBJECT
19 public:
20 explicit ScatterPresenter(QScatterSeries *series, QGraphicsObject *parent = 0);
21
22 public: // from ChartItem
23 QRectF boundingRect() const { return m_boundingRect; }
24 void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
25
26 signals:
27
28 public Q_SLOTS:
29 void handleDomainChanged(const Domain& domain);
30 void handleGeometryChanged(const QRectF& rect);
31 void handleModelChanged();
32
33 public:
34 void changeGeometry();
35
36 QScatterSeries *m_series;
37 QRectF m_boundingRect;
38 QList<qreal> m_scenex;
39 QList<qreal> m_sceney;
40 QColor m_markerColor;
41 Domain m_visibleChartArea;
42 };
43
44 QTCOMMERCIALCHART_END_NAMESPACE
45
46 #endif // SCATTERPRESENTER_H
@@ -1,96 +1,96
1 #include "declarativeseries.h"
1 #include "declarativeseries.h"
2 #include "declarativechart.h"
2 #include "declarativechart.h"
3 #include <qlinechartseries.h>
3 #include <qlinechartseries.h>
4 #include <cmath>
4 #include <cmath>
5 #include <QDebug>
5 #include <QDebug>
6
6
7 QTCOMMERCIALCHART_BEGIN_NAMESPACE
7 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8
8
9 DeclarativeSeries::DeclarativeSeries(QDeclarativeItem *parent) :
9 DeclarativeSeries::DeclarativeSeries(QDeclarativeItem *parent) :
10 QDeclarativeItem(parent),
10 QDeclarativeItem(parent),
11 m_seriesType(SeriesTypeInvalid), // TODO: default type?
11 m_seriesType(SeriesTypeInvalid), // TODO: default type?
12 m_chart(0),
12 m_chart(0),
13 m_series(0)
13 m_series(0)
14 {
14 {
15 setFlag(QGraphicsItem::ItemHasNoContents, false);
15 setFlag(QGraphicsItem::ItemHasNoContents, false);
16 connect(this, SIGNAL(parentChanged()),
16 connect(this, SIGNAL(parentChanged()),
17 this, SLOT(setParentForSeries()));
17 this, SLOT(setParentForSeries()));
18 }
18 }
19
19
20 void DeclarativeSeries::setSeriesType(SeriesType type)
20 void DeclarativeSeries::setSeriesType(SeriesType type)
21 {
21 {
22 if (!m_series || type != m_seriesType) {
22 if (!m_series || type != m_seriesType) {
23 m_seriesType = type;
23 m_seriesType = type;
24 initSeries();
24 initSeries();
25 }
25 }
26 }
26 }
27
27
28 void DeclarativeSeries::setParentForSeries()
28 void DeclarativeSeries::setParentForSeries()
29 {
29 {
30 initSeries();
30 initSeries();
31 }
31 }
32
32
33 void DeclarativeSeries::initSeries()
33 void DeclarativeSeries::initSeries()
34 {
34 {
35 DeclarativeChart *declarativeChart = qobject_cast<DeclarativeChart *>(parent());
35 DeclarativeChart *declarativeChart = qobject_cast<DeclarativeChart *>(parent());
36
36
37 if (declarativeChart && m_seriesType != SeriesTypeInvalid) {
37 if (declarativeChart && m_seriesType != SeriesTypeInvalid) {
38 delete m_series;
38 delete m_series;
39 m_series = 0;
39 m_series = 0;
40
40
41 QChart *chart = qobject_cast<QChart *>(declarativeChart->m_chart);
41 QChart *chart = qobject_cast<QChart *>(declarativeChart->m_chart);
42 qDebug() << "creating series for chart: " << chart;
42 qDebug() << "creating series for chart: " << chart;
43 Q_ASSERT(chart);
43 Q_ASSERT(chart);
44
44
45 switch (m_seriesType) {
45 switch (m_seriesType) {
46 case SeriesTypeLine: {
46 case SeriesTypeLine: {
47 m_series = QLineChartSeries::create(this);
47 m_series = new QLineChartSeries(this);
48 for (qreal i(0.0); i < 100.0; i += 1.0)
48 for (qreal i(0.0); i < 100.0; i += 1.0)
49 ((QLineChartSeries *)m_series)->add(i, i);
49 ((QLineChartSeries *)m_series)->add(i, i);
50 chart->addSeries(m_series);
50 chart->addSeries(m_series);
51 break;
51 break;
52 }
52 }
53 case SeriesTypeBar:
53 case SeriesTypeBar:
54 // fallthrough; bar and scatter use the same test data
54 // fallthrough; bar and scatter use the same test data
55 case SeriesTypeScatter: {
55 case SeriesTypeScatter: {
56 m_series = chart->createSeries((QChartSeries::QChartSeriesType) m_seriesType);
56 m_series = chart->createSeries((QChartSeries::QChartSeriesType) m_seriesType);
57 QList<qreal> datax;
57 QList<qreal> datax;
58 QList<qreal> datay;
58 QList<qreal> datay;
59 for (qreal i = 0; i < 100; i += 0.1) {
59 for (qreal i = 0; i < 100; i += 0.1) {
60 datax.append(i + (rand() % 5));
60 datax.append(i + (rand() % 5));
61 datay.append(abs(sin(3.14159265358979 / 50 * i) * 100) + (rand() % 5));
61 datay.append(abs(sin(3.14159265358979 / 50 * i) * 100) + (rand() % 5));
62 }
62 }
63 Q_ASSERT(m_series->setData(datax, datay));
63 Q_ASSERT(m_series->setData(datax, datay));
64 break;
64 break;
65 }
65 }
66 case SeriesTypeStackedBar:
66 case SeriesTypeStackedBar:
67 break;
67 break;
68 case SeriesTypePercentBar:
68 case SeriesTypePercentBar:
69 break;
69 break;
70 case SeriesTypePie: {
70 case SeriesTypePie: {
71 m_series = chart->createSeries((QChartSeries::QChartSeriesType) m_seriesType);
71 m_series = chart->createSeries((QChartSeries::QChartSeriesType) m_seriesType);
72 QList<qreal> data;
72 QList<qreal> data;
73 data << 1.0;
73 data << 1.0;
74 data << 12.0;
74 data << 12.0;
75 data << 4.0;
75 data << 4.0;
76 Q_ASSERT(m_series->setData(data));
76 Q_ASSERT(m_series->setData(data));
77 break;
77 break;
78 }
78 }
79 default:
79 default:
80 break;
80 break;
81 }
81 }
82 }
82 }
83 }
83 }
84
84
85 QVariant DeclarativeSeries::itemChange(GraphicsItemChange change,
85 QVariant DeclarativeSeries::itemChange(GraphicsItemChange change,
86 const QVariant &value)
86 const QVariant &value)
87 {
87 {
88 // For debugging purposes only:
88 // For debugging purposes only:
89 // qDebug() << QString::number(change) << " : " << value.toString();
89 // qDebug() << QString::number(change) << " : " << value.toString();
90 return QGraphicsItem::itemChange(change, value);
90 return QGraphicsItem::itemChange(change, value);
91 }
91 }
92
92
93
93
94 #include "moc_declarativeseries.cpp"
94 #include "moc_declarativeseries.cpp"
95
95
96 QTCOMMERCIALCHART_END_NAMESPACE
96 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,147 +1,160
1 #include "chartdataset_p.h"
1 #include "chartdataset_p.h"
2 //series
2 //series
3 #include "qlinechartseries.h"
3 #include "qlinechartseries.h"
4 #include "barchartseries.h"
4 #include "barchartseries.h"
5 #include "stackedbarchartseries.h"
5 #include "stackedbarchartseries.h"
6 #include "percentbarchartseries.h"
6 #include "percentbarchartseries.h"
7 #include "qpieseries.h"
7 #include "qpieseries.h"
8 #include "qscatterseries.h"
8
9
9 QTCOMMERCIALCHART_BEGIN_NAMESPACE
10 QTCOMMERCIALCHART_BEGIN_NAMESPACE
10
11
11 ChartDataSet::ChartDataSet(QObject *parent):QObject(parent)
12 ChartDataSet::ChartDataSet(QObject *parent):QObject(parent)
12 {
13 {
13 Domain domain;
14 Domain domain;
14 m_domains<<domain;
15 m_domains<<domain;
15 }
16 }
16
17
17 ChartDataSet::~ChartDataSet()
18 ChartDataSet::~ChartDataSet()
18 {
19 {
19 // TODO Auto-generated destructor stub
20 // TODO Auto-generated destructor stub
20 }
21 }
21
22
22 const Domain& ChartDataSet::domain() const
23 const Domain& ChartDataSet::domain() const
23 {
24 {
24 return m_domains[m_domainIndex];
25 return m_domains[m_domainIndex];
25 }
26 }
26
27
27 void ChartDataSet::addSeries(QChartSeries* series)
28 void ChartDataSet::addSeries(QChartSeries* series)
28 {
29 {
29 // TODO: we should check the series not already added
30 // TODO: we should check the series not already added
30 m_chartSeries << series;
31 m_chartSeries << series;
31 m_domainIndex = 0;
32 m_domainIndex = 0;
32 m_domains.resize(1);
33 m_domains.resize(1);
33
34
34 Domain& domain = m_domains[m_domainIndex];
35 Domain& domain = m_domains[m_domainIndex];
35
36
36 switch(series->type())
37 switch(series->type())
37 {
38 {
38 case QChartSeries::SeriesTypeLine: {
39 case QChartSeries::SeriesTypeLine: {
39
40
40 QLineChartSeries* xyseries = static_cast<QLineChartSeries*>(series);
41 QLineChartSeries* xyseries = static_cast<QLineChartSeries*>(series);
41
42
42 for (int i = 0; i < xyseries->count(); i++)
43 for (int i = 0; i < xyseries->count(); i++)
43 {
44 {
44 qreal x = xyseries->x(i);
45 qreal x = xyseries->x(i);
45 qreal y = xyseries->y(i);
46 qreal y = xyseries->y(i);
46 domain.m_minX = qMin(domain.m_minX,x);
47 domain.m_minX = qMin(domain.m_minX,x);
47 domain.m_minY = qMin(domain.m_minY,y);
48 domain.m_minY = qMin(domain.m_minY,y);
48 domain.m_maxX = qMax(domain.m_maxX,x);
49 domain.m_maxX = qMax(domain.m_maxX,x);
49 domain.m_maxY = qMax(domain.m_maxY,y);
50 domain.m_maxY = qMax(domain.m_maxY,y);
50 }
51 }
51 break;
52 break;
52 }
53 }
53 case QChartSeries::SeriesTypeBar: {
54 case QChartSeries::SeriesTypeBar: {
54
55
55 BarChartSeries* barSeries = static_cast<BarChartSeries*>(series);
56 BarChartSeries* barSeries = static_cast<BarChartSeries*>(series);
56 qreal x = barSeries->countColumns();
57 qreal x = barSeries->countColumns();
57 qreal y = barSeries->max();
58 qreal y = barSeries->max();
58 domain.m_minX = qMin(domain.m_minX,x);
59 domain.m_minX = qMin(domain.m_minX,x);
59 domain.m_minY = qMin(domain.m_minY,y);
60 domain.m_minY = qMin(domain.m_minY,y);
60 domain.m_maxX = qMax(domain.m_maxX,x);
61 domain.m_maxX = qMax(domain.m_maxX,x);
61 domain.m_maxY = qMax(domain.m_maxY,y);
62 domain.m_maxY = qMax(domain.m_maxY,y);
62 }
63 }
63 break;
64 break;
64 case QChartSeries::SeriesTypeStackedBar: {
65 case QChartSeries::SeriesTypeStackedBar: {
65
66
66 StackedBarChartSeries* stackedBarSeries = static_cast<StackedBarChartSeries*>(series);
67 StackedBarChartSeries* stackedBarSeries = static_cast<StackedBarChartSeries*>(series);
67 qreal x = stackedBarSeries->countColumns();
68 qreal x = stackedBarSeries->countColumns();
68 qreal y = stackedBarSeries->maxColumnSum();
69 qreal y = stackedBarSeries->maxColumnSum();
69 domain.m_minX = qMin(domain.m_minX,x);
70 domain.m_minX = qMin(domain.m_minX,x);
70 domain.m_minY = qMin(domain.m_minY,y);
71 domain.m_minY = qMin(domain.m_minY,y);
71 domain.m_maxX = qMax(domain.m_maxX,x);
72 domain.m_maxX = qMax(domain.m_maxX,x);
72 domain.m_maxY = qMax(domain.m_maxY,y);
73 domain.m_maxY = qMax(domain.m_maxY,y);
73 }
74 }
74 break;
75 break;
75 case QChartSeries::SeriesTypePercentBar: {
76 case QChartSeries::SeriesTypePercentBar: {
76
77
77 PercentBarChartSeries* percentBarSeries = static_cast<PercentBarChartSeries*>(series);
78 PercentBarChartSeries* percentBarSeries = static_cast<PercentBarChartSeries*>(series);
78 qreal x = percentBarSeries->countColumns();
79 qreal x = percentBarSeries->countColumns();
79 domain.m_minX = qMin(domain.m_minX,x);
80 domain.m_minX = qMin(domain.m_minX,x);
80 domain.m_minY = 0;
81 domain.m_minY = 0;
81 domain.m_maxX = qMax(domain.m_maxX,x);
82 domain.m_maxX = qMax(domain.m_maxX,x);
82 domain.m_maxY = 100;
83 domain.m_maxY = 100;
83 }
84 }
84 break;
85 break;
85
86
86 case QChartSeries::SeriesTypePie: {
87 case QChartSeries::SeriesTypePie: {
87 QPieSeries *pieSeries = static_cast<QPieSeries *>(series);
88 QPieSeries *pieSeries = static_cast<QPieSeries *>(series);
88 // TODO: domain stuff
89 // TODO: domain stuff
89 break;
90 break;
90 }
91 }
91
92
93 case QChartSeries::SeriesTypeScatter: {
94 QScatterSeries *scatterSeries = qobject_cast<QScatterSeries *>(series);
95 Q_ASSERT(scatterSeries);
96 foreach (QPointF point, scatterSeries->data()) {
97 domain.m_minX = qMin(domain.m_minX, point.x());
98 domain.m_maxX = qMax(domain.m_maxX, point.x());
99 domain.m_minY = qMin(domain.m_minY, point.y());
100 domain.m_maxY = qMax(domain.m_maxY, point.y());
101 }
102 break;
103 }
104
92 default: {
105 default: {
93 qDebug()<<__FUNCTION__<<"type" << series->type()<<"not supported";
106 qDebug()<<__FUNCTION__<<"type" << series->type()<<"not supported";
94 return;
107 return;
95 break;
108 break;
96 }
109 }
97
110
98 }
111 }
99
112
100 emit seriesAdded(series);
113 emit seriesAdded(series);
101 emit domainChanged(domain);
114 emit domainChanged(domain);
102 }
115 }
103
116
104 bool ChartDataSet::nextDomain()
117 bool ChartDataSet::nextDomain()
105 {
118 {
106 if (m_domainIndex < m_domains.count() - 1) {
119 if (m_domainIndex < m_domains.count() - 1) {
107 m_domainIndex++;
120 m_domainIndex++;
108 emit domainChanged(m_domains[m_domainIndex]);
121 emit domainChanged(m_domains[m_domainIndex]);
109 return true;
122 return true;
110 }
123 }
111 else {
124 else {
112 return false;
125 return false;
113 }
126 }
114 }
127 }
115
128
116 bool ChartDataSet::previousDomain()
129 bool ChartDataSet::previousDomain()
117 {
130 {
118 if (m_domainIndex > 0) {
131 if (m_domainIndex > 0) {
119 m_domainIndex--;
132 m_domainIndex--;
120 emit domainChanged(m_domains[m_domainIndex]);
133 emit domainChanged(m_domains[m_domainIndex]);
121 return true;
134 return true;
122 }
135 }
123 else {
136 else {
124 return false;
137 return false;
125 }
138 }
126 }
139 }
127
140
128 void ChartDataSet::clearDomains()
141 void ChartDataSet::clearDomains()
129 {
142 {
130 if (m_domainIndex > 0) {
143 if (m_domainIndex > 0) {
131 m_domainIndex = 0;
144 m_domainIndex = 0;
132 emit domainChanged(m_domains[m_domainIndex]);
145 emit domainChanged(m_domains[m_domainIndex]);
133 }
146 }
134 }
147 }
135
148
136 void ChartDataSet::addDomain(const Domain& domain)
149 void ChartDataSet::addDomain(const Domain& domain)
137 {
150 {
138 m_domains.resize(m_domainIndex + 1);
151 m_domains.resize(m_domainIndex + 1);
139 m_domains << domain;
152 m_domains << domain;
140 m_domainIndex++;
153 m_domainIndex++;
141
154
142 emit domainChanged(domain);
155 emit domainChanged(domain);
143 }
156 }
144
157
145 #include "moc_chartdataset_p.cpp"
158 #include "moc_chartdataset_p.cpp"
146
159
147 QTCOMMERCIALCHART_END_NAMESPACE
160 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,272 +1,264
1 #include "qchart.h"
1 #include "qchart.h"
2 #include "qchartaxis.h"
2 #include "qchartaxis.h"
3 #include "chartpresenter_p.h"
3 #include "chartpresenter_p.h"
4 #include "chartdataset_p.h"
4 #include "chartdataset_p.h"
5 #include "charttheme_p.h"
5 #include "charttheme_p.h"
6 //series
6 //series
7 #include "barchartseries.h"
7 #include "barchartseries.h"
8 #include "stackedbarchartseries.h"
8 #include "stackedbarchartseries.h"
9 #include "percentbarchartseries.h"
9 #include "percentbarchartseries.h"
10 #include "qlinechartseries.h"
10 #include "qlinechartseries.h"
11 #include "qpieseries.h"
11 #include "qpieseries.h"
12 #include "qscatterseries.h"
12 //items
13 //items
13 #include "axisitem_p.h"
14 #include "axisitem_p.h"
14 #include "bargroup.h"
15 #include "bargroup.h"
15 #include "stackedbargroup.h"
16 #include "stackedbargroup.h"
16 #include "linechartitem_p.h"
17 #include "linechartitem_p.h"
17 #include "percentbargroup.h"
18 #include "percentbargroup.h"
18 #include "linechartanimationitem_p.h"
19 #include "linechartanimationitem_p.h"
19 #include "piepresenter.h"
20 #include "piepresenter.h"
21 #include "scatterpresenter.h"
20
22
21 QTCOMMERCIALCHART_BEGIN_NAMESPACE
23 QTCOMMERCIALCHART_BEGIN_NAMESPACE
22
24
23 ChartPresenter::ChartPresenter(QChart* chart,ChartDataSet* dataset):QObject(chart),
25 ChartPresenter::ChartPresenter(QChart* chart,ChartDataSet* dataset):QObject(chart),
24 m_chart(chart),
26 m_chart(chart),
25 m_dataset(dataset),
27 m_dataset(dataset),
26 m_chartTheme(0),
28 m_chartTheme(0),
27 m_domainIndex(0),
29 m_domainIndex(0),
28 m_marginSize(0),
30 m_marginSize(0),
29 m_axisX(new QChartAxis(this)),
31 m_axisX(new QChartAxis(this)),
30 m_axisY(new QChartAxis(this)),
32 m_axisY(new QChartAxis(this)),
31 m_rect(QRectF(QPoint(0,0),m_chart->size()))
33 m_rect(QRectF(QPoint(0,0),m_chart->size()))
32 {
34 {
33 setChartTheme(QChart::ChartThemeDefault);
35 setChartTheme(QChart::ChartThemeDefault);
34 m_axisItems[m_axisX] = new AxisItem(m_axisX,AxisItem::X_AXIS,m_chart);
36 m_axisItems[m_axisX] = new AxisItem(m_axisX,AxisItem::X_AXIS,m_chart);
35 m_axisItems[m_axisY] = new AxisItem(m_axisY,AxisItem::Y_AXIS,m_chart);
37 m_axisItems[m_axisY] = new AxisItem(m_axisY,AxisItem::Y_AXIS,m_chart);
36 createConnections();
38 createConnections();
37 }
39 }
38
40
39 ChartPresenter::~ChartPresenter()
41 ChartPresenter::~ChartPresenter()
40 {
42 {
41 }
43 }
42
44
43 void ChartPresenter::createConnections()
45 void ChartPresenter::createConnections()
44 {
46 {
45 QObject::connect(m_chart,SIGNAL(geometryChanged()),this,SLOT(handleGeometryChanged()));
47 QObject::connect(m_chart,SIGNAL(geometryChanged()),this,SLOT(handleGeometryChanged()));
46 QObject::connect(m_dataset,SIGNAL(seriesAdded(QChartSeries*)),this,SLOT(handleSeriesAdded(QChartSeries*)));
48 QObject::connect(m_dataset,SIGNAL(seriesAdded(QChartSeries*)),this,SLOT(handleSeriesAdded(QChartSeries*)));
47
49
48 QMapIterator<QChartAxis*,AxisItem*> i(m_axisItems);
50 QMapIterator<QChartAxis*,AxisItem*> i(m_axisItems);
49
51
50 while (i.hasNext()) {
52 while (i.hasNext()) {
51 i.next();
53 i.next();
52 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),i.value(),SLOT(handleGeometryChanged(const QRectF&)));
54 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),i.value(),SLOT(handleGeometryChanged(const QRectF&)));
53 QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),i.value(),SLOT(handleDomainChanged(const Domain&)));
55 QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),i.value(),SLOT(handleDomainChanged(const Domain&)));
54 }
56 }
55 }
57 }
56
58
57 void ChartPresenter::handleGeometryChanged()
59 void ChartPresenter::handleGeometryChanged()
58 {
60 {
59 m_rect = QRectF(QPoint(0,0),m_chart->size());
61 m_rect = QRectF(QPoint(0,0),m_chart->size());
60 m_rect.adjust(m_marginSize,m_marginSize, -m_marginSize, -m_marginSize);
62 m_rect.adjust(m_marginSize,m_marginSize, -m_marginSize, -m_marginSize);
61 Q_ASSERT(m_rect.isValid());
63 Q_ASSERT(m_rect.isValid());
62 emit geometryChanged(m_rect);
64 emit geometryChanged(m_rect);
63 }
65 }
64
66
65 int ChartPresenter::margin() const
67 int ChartPresenter::margin() const
66 {
68 {
67 return m_marginSize;
69 return m_marginSize;
68 }
70 }
69
71
70 void ChartPresenter::setMargin(int margin)
72 void ChartPresenter::setMargin(int margin)
71 {
73 {
72 m_marginSize = margin;
74 m_marginSize = margin;
73 }
75 }
74
76
75 void ChartPresenter::handleSeriesAdded(QChartSeries* series)
77 void ChartPresenter::handleSeriesAdded(QChartSeries* series)
76 {
78 {
77 switch(series->type())
79 switch(series->type())
78 {
80 {
79 case QChartSeries::SeriesTypeLine: {
81 case QChartSeries::SeriesTypeLine: {
80 QLineChartSeries* lineSeries = static_cast<QLineChartSeries*>(series);
82 QLineChartSeries* lineSeries = static_cast<QLineChartSeries*>(series);
81 LineChartItem* item = new LineChartAnimationItem(this,lineSeries,m_chart);
83 LineChartItem* item = new LineChartAnimationItem(this,lineSeries,m_chart);
82 m_chartTheme->decorate(item,lineSeries,m_chartItems.count());
84 m_chartTheme->decorate(item,lineSeries,m_chartItems.count());
83 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
85 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
84 QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&)));
86 QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&)));
85 QObject::connect(lineSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
87 QObject::connect(lineSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
86 m_chartItems.insert(series,item);
88 m_chartItems.insert(series,item);
87 break;
89 break;
88 }
90 }
89
91
90 case QChartSeries::SeriesTypeBar: {
92 case QChartSeries::SeriesTypeBar: {
91 BarChartSeries* barSeries = static_cast<BarChartSeries*>(series);
93 BarChartSeries* barSeries = static_cast<BarChartSeries*>(series);
92 BarGroup* item = new BarGroup(*barSeries,m_chart);
94 BarGroup* item = new BarGroup(*barSeries,m_chart);
93 m_chartTheme->decorate(item,barSeries,m_chartItems.count());
95 m_chartTheme->decorate(item,barSeries,m_chartItems.count());
94 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
96 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
95 QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&)));
97 QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&)));
96 QObject::connect(barSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
98 QObject::connect(barSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
97 m_chartItems.insert(series,item);
99 m_chartItems.insert(series,item);
98 // m_axisXItem->setVisible(false);
100 // m_axisXItem->setVisible(false);
99 break;
101 break;
100 }
102 }
101
103
102 case QChartSeries::SeriesTypeStackedBar: {
104 case QChartSeries::SeriesTypeStackedBar: {
103
105
104 StackedBarChartSeries* stackedBarSeries = static_cast<StackedBarChartSeries*>(series);
106 StackedBarChartSeries* stackedBarSeries = static_cast<StackedBarChartSeries*>(series);
105 StackedBarGroup* item = new StackedBarGroup(*stackedBarSeries,m_chart);
107 StackedBarGroup* item = new StackedBarGroup(*stackedBarSeries,m_chart);
106 m_chartTheme->decorate(item,stackedBarSeries,m_chartItems.count());
108 m_chartTheme->decorate(item,stackedBarSeries,m_chartItems.count());
107 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
109 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
108 QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&)));
110 QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&)));
109 QObject::connect(stackedBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
111 QObject::connect(stackedBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
110 m_chartItems.insert(series,item);
112 m_chartItems.insert(series,item);
111 break;
113 break;
112 }
114 }
113
115
114 case QChartSeries::SeriesTypePercentBar: {
116 case QChartSeries::SeriesTypePercentBar: {
115
117
116 PercentBarChartSeries* percentBarSeries = static_cast<PercentBarChartSeries*>(series);
118 PercentBarChartSeries* percentBarSeries = static_cast<PercentBarChartSeries*>(series);
117 PercentBarGroup* item = new PercentBarGroup(*percentBarSeries,m_chart);
119 PercentBarGroup* item = new PercentBarGroup(*percentBarSeries,m_chart);
118 m_chartTheme->decorate(item,percentBarSeries ,m_chartItems.count());
120 m_chartTheme->decorate(item,percentBarSeries ,m_chartItems.count());
119 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
121 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
120 QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&)));
122 QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&)));
121 QObject::connect(percentBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
123 QObject::connect(percentBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
122 m_chartItems.insert(series,item);
124 m_chartItems.insert(series,item);
123 break;
125 break;
124 }
126 }
125 /*
127 case QChartSeries::SeriesTypeScatter: {
126 case QChartSeries::SeriesTypeScatter: {
128 QScatterSeries *scatterSeries = qobject_cast<QScatterSeries *>(series);
127 QScatterSeries *scatterSeries = qobject_cast<QScatterSeries *>(series);
129 ScatterPresenter *scatterPresenter = new ScatterPresenter(scatterSeries, m_chart);
128 scatterSeries->d->m_theme = m_chartTheme->themeForSeries();
130 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)),
129 scatterSeries->d->setParentItem(this);
131 scatterPresenter, SLOT(handleGeometryChanged(const QRectF&)));
130 scatterSeries->d->m_boundingRect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
132 QObject::connect(m_dataset, SIGNAL(domainChanged(const Domain&)),
131 m_chartItems << scatterSeries->d;
133 scatterPresenter, SLOT(handleDomainChanged(const Domain&)));
132 m_chartTheme->addObserver(scatterSeries->d);
134 // scatterSeries->d->m_theme = m_chartTheme->themeForSeries();
133
135 // scatterSeries->d->setParentItem(this);
134 foreach (qreal x, scatterSeries->d->m_x) {
136 // scatterSeries->d->m_boundingRect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
135 domain.m_minX = qMin(domain.m_minX, x);
137 m_chartItems.insert(scatterSeries, scatterPresenter);
136 domain.m_maxX = qMax(domain.m_maxX, x);
138 break;
137 }
139 }
138 foreach (qreal y, scatterSeries->d->m_y) {
139 domain.m_minY = qMin(domain.m_minY, y);
140 domain.m_maxY = qMax(domain.m_maxY, y);
141 }
142
143 break;
144 }
145 */
146
147 case QChartSeries::SeriesTypePie: {
140 case QChartSeries::SeriesTypePie: {
148 QPieSeries *pieSeries = qobject_cast<QPieSeries *>(series);
141 QPieSeries *pieSeries = qobject_cast<QPieSeries *>(series);
149 PiePresenter* pie = new PiePresenter(m_chart, pieSeries);
142 PiePresenter* pie = new PiePresenter(m_chart, pieSeries);
150 QObject::connect(pieSeries, SIGNAL(changed(const PieChangeSet&)), pie, SLOT(handleSeriesChanged(const PieChangeSet&)));
143 QObject::connect(pieSeries, SIGNAL(changed(const PieChangeSet&)), pie, SLOT(handleSeriesChanged(const PieChangeSet&)));
151 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)), pie, SLOT(handleGeometryChanged(const QRectF&)));
144 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)), pie, SLOT(handleGeometryChanged(const QRectF&)));
152 QObject::connect(m_dataset, SIGNAL(domainChanged(const Domain&)), pie, SLOT(handleDomainChanged(const Domain&)));
145 QObject::connect(m_dataset, SIGNAL(domainChanged(const Domain&)), pie, SLOT(handleDomainChanged(const Domain&)));
153 m_chartItems.insert(series, pie);
146 m_chartItems.insert(series, pie);
154 break;
147 break;
155 }
148 }
156
157 default: {
149 default: {
158 qDebug()<< "Series type" << series->type() << "not implemented.";
150 qDebug()<< "Series type" << series->type() << "not implemented.";
159 break;
151 break;
160 }
152 }
161 }
153 }
162
154
163 if(m_rect.isValid()) emit geometryChanged(m_rect);
155 if(m_rect.isValid()) emit geometryChanged(m_rect);
164 }
156 }
165
157
166 void ChartPresenter::handleSeriesChanged(QChartSeries* series)
158 void ChartPresenter::handleSeriesChanged(QChartSeries* series)
167 {
159 {
168 //TODO:
160 //TODO:
169 }
161 }
170
162
171 void ChartPresenter::zoomInToRect(const QRectF& rect)
163 void ChartPresenter::zoomInToRect(const QRectF& rect)
172 {
164 {
173 if(!rect.isValid()) return;
165 if(!rect.isValid()) return;
174 QRectF r = rect.normalized();
166 QRectF r = rect.normalized();
175 r.translate(-m_marginSize, -m_marginSize);
167 r.translate(-m_marginSize, -m_marginSize);
176 Domain domain (m_dataset->domain().subDomain(r,m_rect.width(),m_rect.height()));
168 Domain domain (m_dataset->domain().subDomain(r,m_rect.width(),m_rect.height()));
177 m_dataset->addDomain(domain);
169 m_dataset->addDomain(domain);
178 }
170 }
179
171
180 void ChartPresenter::zoomIn()
172 void ChartPresenter::zoomIn()
181 {
173 {
182 if (!m_dataset->nextDomain()) {
174 if (!m_dataset->nextDomain()) {
183 QRectF rect = m_rect;
175 QRectF rect = m_rect;
184 rect.setWidth(rect.width()/2);
176 rect.setWidth(rect.width()/2);
185 rect.setHeight(rect.height()/2);
177 rect.setHeight(rect.height()/2);
186 rect.moveCenter(m_rect.center());
178 rect.moveCenter(m_rect.center());
187 Domain domain (m_dataset->domain().subDomain(rect,m_rect.width(),m_rect.height()));
179 Domain domain (m_dataset->domain().subDomain(rect,m_rect.width(),m_rect.height()));
188 m_dataset->addDomain(domain);
180 m_dataset->addDomain(domain);
189 }
181 }
190 }
182 }
191
183
192 void ChartPresenter::zoomOut()
184 void ChartPresenter::zoomOut()
193 {
185 {
194 m_dataset->previousDomain();
186 m_dataset->previousDomain();
195 }
187 }
196
188
197 void ChartPresenter::zoomReset()
189 void ChartPresenter::zoomReset()
198 {
190 {
199 m_dataset->clearDomains();
191 m_dataset->clearDomains();
200 }
192 }
201
193
202 void ChartPresenter::setChartTheme(QChart::ChartTheme theme)
194 void ChartPresenter::setChartTheme(QChart::ChartTheme theme)
203 {
195 {
204 delete m_chartTheme;
196 delete m_chartTheme;
205
197
206 m_chartTheme = ChartTheme::createTheme(theme);
198 m_chartTheme = ChartTheme::createTheme(theme);
207
199
208 m_chartTheme->decorate(m_chart);
200 m_chartTheme->decorate(m_chart);
209 QMapIterator<QChartSeries*,ChartItem*> i(m_chartItems);
201 QMapIterator<QChartSeries*,ChartItem*> i(m_chartItems);
210
202
211 int index=0;
203 int index=0;
212 while (i.hasNext()) {
204 while (i.hasNext()) {
213 i.next();
205 i.next();
214 index++;
206 index++;
215 m_chartTheme->decorate(i.value(),i.key(),index);
207 m_chartTheme->decorate(i.value(),i.key(),index);
216 }
208 }
217 }
209 }
218
210
219
211
220 QChart::ChartTheme ChartPresenter::chartTheme()
212 QChart::ChartTheme ChartPresenter::chartTheme()
221 {
213 {
222 return m_chartTheme->id();
214 return m_chartTheme->id();
223 }
215 }
224
216
225 QChartAxis* ChartPresenter::axisX()
217 QChartAxis* ChartPresenter::axisX()
226 {
218 {
227 return m_axisX;
219 return m_axisX;
228 }
220 }
229
221
230 QChartAxis* ChartPresenter::axisY()
222 QChartAxis* ChartPresenter::axisY()
231 {
223 {
232 return m_axisY;
224 return m_axisY;
233 }
225 }
234
226
235 QChartAxis* ChartPresenter::addAxisX()
227 QChartAxis* ChartPresenter::addAxisX()
236 {
228 {
237 //only one axis
229 //only one axis
238 if(m_axisX==0){
230 if(m_axisX==0){
239 m_axisX = new QChartAxis(this);
231 m_axisX = new QChartAxis(this);
240 m_axisItems[m_axisX] = new AxisItem(m_axisX,AxisItem::X_AXIS,m_chart);
232 m_axisItems[m_axisX] = new AxisItem(m_axisX,AxisItem::X_AXIS,m_chart);
241 }
233 }
242 return m_axisX;
234 return m_axisX;
243 }
235 }
244
236
245 QChartAxis* ChartPresenter::addAxisY()
237 QChartAxis* ChartPresenter::addAxisY()
246 {
238 {
247 if(m_axisY==0){
239 if(m_axisY==0){
248 m_axisY = new QChartAxis(this);
240 m_axisY = new QChartAxis(this);
249 m_axisItems[m_axisY] = new AxisItem(m_axisY,AxisItem::Y_AXIS,m_chart);
241 m_axisItems[m_axisY] = new AxisItem(m_axisY,AxisItem::Y_AXIS,m_chart);
250 return m_axisY;
242 return m_axisY;
251 }
243 }
252
244
253 QChartAxis* axis = new QChartAxis(this);
245 QChartAxis* axis = new QChartAxis(this);
254 m_axisItems[axis] = new AxisItem(axis,AxisItem::Y_AXIS,m_chart);
246 m_axisItems[axis] = new AxisItem(axis,AxisItem::Y_AXIS,m_chart);
255 return axis;
247 return axis;
256 }
248 }
257
249
258 void ChartPresenter::removeAxis(QChartAxis* axis)
250 void ChartPresenter::removeAxis(QChartAxis* axis)
259 {
251 {
260 AxisItem* item = m_axisItems.take(axis);
252 AxisItem* item = m_axisItems.take(axis);
261 if(item){
253 if(item){
262 delete item;
254 delete item;
263 delete axis;
255 delete axis;
264 }
256 }
265 //reset pointers to default ones
257 //reset pointers to default ones
266 if(axis == m_axisX) m_axisX=0;
258 if(axis == m_axisX) m_axisX=0;
267 else if(axis == m_axisY) m_axisY=0;
259 else if(axis == m_axisY) m_axisY=0;
268 }
260 }
269
261
270 #include "moc_chartpresenter_p.cpp"
262 #include "moc_chartpresenter_p.cpp"
271
263
272 QTCOMMERCIALCHART_END_NAMESPACE
264 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,196 +1,194
1 #include "qchart.h"
1 #include "qchart.h"
2 #include "qscatterseries.h"
2 #include "qscatterseries.h"
3 #include "qscatterseries_p.h"
3 #include "qscatterseries_p.h"
4 #include "qpieseries.h"
4 #include "qpieseries.h"
5 #include "qchartaxis.h"
5 #include "qchartaxis.h"
6 #include "chartpresenter_p.h"
6 #include "chartpresenter_p.h"
7 #include "chartdataset_p.h"
7 #include "chartdataset_p.h"
8
8
9 //series
9 //series
10 #include "barchartseries.h"
10 #include "barchartseries.h"
11 #include "stackedbarchartseries.h"
11 #include "stackedbarchartseries.h"
12 #include "percentbarchartseries.h"
12 #include "percentbarchartseries.h"
13 #include "qlinechartseries.h"
13 #include "qlinechartseries.h"
14
14
15 #include <QGraphicsScene>
15 #include <QGraphicsScene>
16 #include <QGraphicsSceneResizeEvent>
16 #include <QGraphicsSceneResizeEvent>
17 #include <QDebug>
17 #include <QDebug>
18
18
19 QTCOMMERCIALCHART_BEGIN_NAMESPACE
19 QTCOMMERCIALCHART_BEGIN_NAMESPACE
20
20
21 QChart::QChart(QGraphicsItem *parent, Qt::WindowFlags wFlags) : QGraphicsWidget(parent,wFlags),
21 QChart::QChart(QGraphicsItem *parent, Qt::WindowFlags wFlags) : QGraphicsWidget(parent,wFlags),
22 m_backgroundItem(0),
22 m_backgroundItem(0),
23 m_titleItem(0),
23 m_titleItem(0),
24 m_dataset(new ChartDataSet(this)),
24 m_dataset(new ChartDataSet(this)),
25 m_presenter(new ChartPresenter(this,m_dataset))
25 m_presenter(new ChartPresenter(this,m_dataset))
26 {
26 {
27 }
27 }
28
28
29 QChart::~QChart() {}
29 QChart::~QChart() {}
30
30
31 void QChart::addSeries(QChartSeries* series)
31 void QChart::addSeries(QChartSeries* series)
32 {
32 {
33 m_dataset->addSeries(series);
33 m_dataset->addSeries(series);
34 }
34 }
35
35
36 //TODO on review, is it really needed ??
36 //TODO on review, is it really needed ??
37 QChartSeries* QChart::createSeries(QChartSeries::QChartSeriesType type)
37 QChartSeries* QChart::createSeries(QChartSeries::QChartSeriesType type)
38 {
38 {
39 // TODO: support also other types; not only scatter and pie
40
41 QChartSeries *series(0);
39 QChartSeries *series(0);
42
40
43 switch (type) {
41 switch (type) {
44 case QChartSeries::SeriesTypeLine: {
42 case QChartSeries::SeriesTypeLine: {
45 series = new QLineChartSeries(this);
43 series = new QLineChartSeries(this);
46 break;
44 break;
47 }
45 }
48 case QChartSeries::SeriesTypeBar: {
46 case QChartSeries::SeriesTypeBar: {
49 series = new BarChartSeries(this);
47 series = new BarChartSeries(this);
50 break;
48 break;
51 }
49 }
52 case QChartSeries::SeriesTypeStackedBar: {
50 case QChartSeries::SeriesTypeStackedBar: {
53 series = new StackedBarChartSeries(this);
51 series = new StackedBarChartSeries(this);
54 break;
52 break;
55 }
53 }
56 case QChartSeries::SeriesTypePercentBar: {
54 case QChartSeries::SeriesTypePercentBar: {
57 series = new PercentBarChartSeries(this);
55 series = new PercentBarChartSeries(this);
58 break;
56 break;
59 }
57 }
60 case QChartSeries::SeriesTypeScatter: {
58 case QChartSeries::SeriesTypeScatter: {
61 series = new QScatterSeries(this);
59 series = new QScatterSeries(this);
62 break;
60 break;
63 }
61 }
64 case QChartSeries::SeriesTypePie: {
62 case QChartSeries::SeriesTypePie: {
65 series = new QPieSeries(this);
63 series = new QPieSeries(this);
66 break;
64 break;
67 }
65 }
68 default:
66 default:
69 Q_ASSERT(false);
67 Q_ASSERT(false);
70 break;
68 break;
71 }
69 }
72
70
73 addSeries(series);
71 addSeries(series);
74 return series;
72 return series;
75 }
73 }
76
74
77 void QChart::setChartBackgroundBrush(const QBrush& brush)
75 void QChart::setChartBackgroundBrush(const QBrush& brush)
78 {
76 {
79
77
80 if(!m_backgroundItem) {
78 if(!m_backgroundItem) {
81 m_backgroundItem = new QGraphicsRectItem(this);
79 m_backgroundItem = new QGraphicsRectItem(this);
82 m_backgroundItem->setZValue(-1);
80 m_backgroundItem->setZValue(-1);
83 }
81 }
84
82
85 m_backgroundItem->setBrush(brush);
83 m_backgroundItem->setBrush(brush);
86 m_backgroundItem->update();
84 m_backgroundItem->update();
87 }
85 }
88
86
89 void QChart::setChartBackgroundPen(const QPen& pen)
87 void QChart::setChartBackgroundPen(const QPen& pen)
90 {
88 {
91
89
92 if(!m_backgroundItem) {
90 if(!m_backgroundItem) {
93 m_backgroundItem = new QGraphicsRectItem(this);
91 m_backgroundItem = new QGraphicsRectItem(this);
94 m_backgroundItem->setZValue(-1);
92 m_backgroundItem->setZValue(-1);
95 }
93 }
96
94
97 m_backgroundItem->setPen(pen);
95 m_backgroundItem->setPen(pen);
98 m_backgroundItem->update();
96 m_backgroundItem->update();
99 }
97 }
100
98
101 void QChart::setTitle(const QString& title,const QFont& font)
99 void QChart::setTitle(const QString& title,const QFont& font)
102 {
100 {
103 if(!m_titleItem) m_titleItem = new QGraphicsTextItem(this);
101 if(!m_titleItem) m_titleItem = new QGraphicsTextItem(this);
104 m_titleItem->setPlainText(title);
102 m_titleItem->setPlainText(title);
105 m_titleItem->setFont(font);
103 m_titleItem->setFont(font);
106 }
104 }
107
105
108 int QChart::margin() const
106 int QChart::margin() const
109 {
107 {
110 return m_presenter->margin();
108 return m_presenter->margin();
111 }
109 }
112
110
113 void QChart::setMargin(int margin)
111 void QChart::setMargin(int margin)
114 {
112 {
115 m_presenter->setMargin(margin);
113 m_presenter->setMargin(margin);
116 }
114 }
117
115
118 void QChart::setChartTheme(QChart::ChartTheme theme)
116 void QChart::setChartTheme(QChart::ChartTheme theme)
119 {
117 {
120 m_presenter->setChartTheme(theme);
118 m_presenter->setChartTheme(theme);
121 }
119 }
122
120
123 QChart::ChartTheme QChart::chartTheme() const
121 QChart::ChartTheme QChart::chartTheme() const
124 {
122 {
125 return m_presenter->chartTheme();
123 return m_presenter->chartTheme();
126 }
124 }
127
125
128 void QChart::zoomInToRect(const QRectF& rectangle)
126 void QChart::zoomInToRect(const QRectF& rectangle)
129 {
127 {
130 m_presenter->zoomInToRect(rectangle);
128 m_presenter->zoomInToRect(rectangle);
131 }
129 }
132
130
133 void QChart::zoomIn()
131 void QChart::zoomIn()
134 {
132 {
135 m_presenter->zoomIn();
133 m_presenter->zoomIn();
136 }
134 }
137
135
138 void QChart::zoomOut()
136 void QChart::zoomOut()
139 {
137 {
140 m_presenter->zoomOut();
138 m_presenter->zoomOut();
141 }
139 }
142
140
143 void QChart::zoomReset()
141 void QChart::zoomReset()
144 {
142 {
145 m_presenter->zoomReset();
143 m_presenter->zoomReset();
146 }
144 }
147
145
148 QChartAxis* QChart::axisX()
146 QChartAxis* QChart::axisX()
149 {
147 {
150 return m_presenter->axisX();
148 return m_presenter->axisX();
151 }
149 }
152
150
153 QChartAxis* QChart::axisY()
151 QChartAxis* QChart::axisY()
154 {
152 {
155 return m_presenter->axisY();
153 return m_presenter->axisY();
156 }
154 }
157
155
158 QChartAxis* QChart::addAxisX()
156 QChartAxis* QChart::addAxisX()
159 {
157 {
160 return m_presenter->addAxisX();
158 return m_presenter->addAxisX();
161 }
159 }
162
160
163 QChartAxis* QChart::addAxisY()
161 QChartAxis* QChart::addAxisY()
164 {
162 {
165 return m_presenter->addAxisY();
163 return m_presenter->addAxisY();
166 }
164 }
167
165
168 void QChart::removeAxis(QChartAxis* axis)
166 void QChart::removeAxis(QChartAxis* axis)
169 {
167 {
170 m_presenter->removeAxis(axis);
168 m_presenter->removeAxis(axis);
171 }
169 }
172
170
173 void QChart::resizeEvent(QGraphicsSceneResizeEvent *event)
171 void QChart::resizeEvent(QGraphicsSceneResizeEvent *event)
174 {
172 {
175
173
176 m_rect = QRectF(QPoint(0,0),event->newSize());
174 m_rect = QRectF(QPoint(0,0),event->newSize());
177 QRectF rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
175 QRectF rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
178
176
179 // recalculate title position
177 // recalculate title position
180 if (m_titleItem) {
178 if (m_titleItem) {
181 QPointF center = m_rect.center() -m_titleItem->boundingRect().center();
179 QPointF center = m_rect.center() -m_titleItem->boundingRect().center();
182 m_titleItem->setPos(center.x(),m_rect.top()/2 + margin()/2);
180 m_titleItem->setPos(center.x(),m_rect.top()/2 + margin()/2);
183 }
181 }
184
182
185 //recalculate background gradient
183 //recalculate background gradient
186 if (m_backgroundItem) {
184 if (m_backgroundItem) {
187 m_backgroundItem->setRect(rect);
185 m_backgroundItem->setRect(rect);
188 }
186 }
189
187
190 QGraphicsWidget::resizeEvent(event);
188 QGraphicsWidget::resizeEvent(event);
191 update();
189 update();
192 }
190 }
193
191
194 #include "moc_qchart.cpp"
192 #include "moc_qchart.cpp"
195
193
196 QTCOMMERCIALCHART_END_NAMESPACE
194 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,140 +1,70
1 #include "qscatterseries.h"
1 #include "qscatterseries.h"
2 #include "qscatterseries_p.h"
2 #include "qscatterseries_p.h"
3 #include "qchart.h"
3 #include "qchart.h"
4 #include <QPainter>
5 #include <QGraphicsScene>
6 #include <QDebug>
7
4
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
5 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9
6
10 //#define QSeriesData QList<qreal>
7 QScatterSeriesPrivate::QScatterSeriesPrivate() :
11
8 m_data(QList<QPointF>())
12 QScatterSeriesPrivate::QScatterSeriesPrivate(QGraphicsItem *parent) :
13 ChartItem(parent),
14 m_boundingRect(),
15 m_markerColor(QColor()),
16 m_visibleChartArea()
17 {
9 {
18 if (parent)
19 m_boundingRect = parent->boundingRect();
20 }
10 }
21
11
22 void QScatterSeriesPrivate::changeGeometry()
12 QScatterSeries::QScatterSeries(QObject *parent) :
23 {
13 QChartSeries(parent),
24 if (m_boundingRect.isValid()) {
14 d(new QScatterSeriesPrivate())
25 prepareGeometryChange();
26 qreal scalex = m_boundingRect.width() / m_visibleChartArea.spanX();
27 qreal scaley = m_boundingRect.height() / m_visibleChartArea.spanY();
28 m_scenex.clear();
29 m_sceney.clear();
30
31 // Convert relative coordinates to absolute pixel coordinates that can be used for drawing
32 foreach(qreal x, m_x)
33 m_scenex.append(m_boundingRect.left() + x * scalex - m_visibleChartArea.m_minX * scalex);
34
35 foreach(qreal y, m_y)
36 m_sceney.append(m_boundingRect.bottom() - y * scaley + m_visibleChartArea.m_minY * scaley);
37 }
38 }
39
40 void QScatterSeriesPrivate::setSize(const QSizeF &size)
41 {
42 // m_boundingRect = QRectF(pos().x(), pos().y(), size.width(), size.height());
43 m_boundingRect = QRectF(0, 0, size.width(), size.height());
44 changeGeometry();
45 }
46
47 void QScatterSeriesPrivate::themeChanged(ChartTheme *theme)
48 {
49 //m_theme = theme->themeForSeries();
50 }
51
52 void QScatterSeriesPrivate::setPlotDomain(const Domain& plotDomain)
53 {
54 //m_visibleChartArea = plotDomain;
55 changeGeometry();
56 }
57
58 QRectF QScatterSeriesPrivate::boundingRect() const
59 {
15 {
60 return m_boundingRect;
61 }
16 }
62
17
63 void QScatterSeriesPrivate::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/)
18 QScatterSeries::~QScatterSeries()
64 {
65 // TODO: The opacity should be user definable?
66 //brush.setColor(QColor(255, 82, 0, 100));
67 if (m_markerColor.isValid()) {
68 QPen pen = painter->pen();
69 QBrush brush = pen.brush();
70 brush.setColor(m_markerColor);
71 pen.setBrush(brush);
72 pen.setWidth(4);
73 painter->setPen(pen);
74 }
75 else
76 //painter->setPen(m_theme.markerPen);
77 // brush.setColor(m_theme..lineColor);
78
79 // TODO: m_scenex and m_sceny are left empty during construction -> we would need a resize
80 // event right after construction or maybe given a size during initialization
81 for (int i(0); i < m_scenex.count() && i < m_sceney.count(); i++) {
82 if (scene()->width() > m_scenex.at(i) && scene()->height() > m_sceney.at(i))
83 //painter->drawArc(m_scenex.at(i), m_sceney.at(i), 2, 2, 0, 5760);
84 painter->drawPoint(m_scenex.at(i), m_sceney.at(i));
85 }
86 }
87
88 QScatterSeries::QScatterSeries(QObject *parent) :
89 QChartSeries(parent),
90 d(new QScatterSeriesPrivate(qobject_cast<QGraphicsItem *> (parent)))
91 {
19 {
20 delete d;
92 }
21 }
93
22
23 // TODO: change to list of QPointFs?
94 bool QScatterSeries::setData(QList<qreal> xlist, QList<qreal> ylist)
24 bool QScatterSeries::setData(QList<qreal> xlist, QList<qreal> ylist)
95 {
25 {
26 d->m_data.clear();
96 // TODO: validate data
27 // TODO: validate data
97 d->m_x = xlist;
28 for (int i(0); i < xlist.count() && i < ylist.count(); i++) {
98 d->m_y = ylist;
29 d->m_data.append(QPointF(xlist[i], ylist[i]));
30 }
31
99
32
100 // TODO: the following updates the visible chart area setting of the series, we would instead
33 // TODO: the following updates the visible chart area setting of the series, we would instead
101 // need to update the _chart's_ visible area... this would require a callback or
34 // need to update the _chart's_ visible area... this would require a callback or
102 // similar to the parenting QChart object...
35 // similar to the parenting QChart object...
103 foreach (qreal x, d->m_x) {
36 // foreach (qreal x, d->m_x) {
104 d->m_visibleChartArea.m_minX = qMin(d->m_visibleChartArea.m_minX, x);
37 // d->m_visibleChartArea.m_minX = qMin(d->m_visibleChartArea.m_minX, x);
105 d->m_visibleChartArea.m_maxX = qMax(d->m_visibleChartArea.m_maxX, x);
38 // d->m_visibleChartArea.m_maxX = qMax(d->m_visibleChartArea.m_maxX, x);
106 }
39 // }
107 foreach (qreal y, d->m_y) {
40 // foreach (qreal y, d->m_y) {
108 d->m_visibleChartArea.m_minY = qMin(d->m_visibleChartArea.m_minY, y);
41 // d->m_visibleChartArea.m_minY = qMin(d->m_visibleChartArea.m_minY, y);
109 d->m_visibleChartArea.m_maxY = qMax(d->m_visibleChartArea.m_maxY, y);
42 // d->m_visibleChartArea.m_maxY = qMax(d->m_visibleChartArea.m_maxY, y);
110 }
43 // }
111
44 // d->changeGeometry();
112 d->changeGeometry();
45
113
46 emit changed();
114 return true;
47 return true;
115 }
48 }
116
49
117 void QScatterSeries::setMarkerColor(QColor color)
50 QList<QPointF> QScatterSeries::data()
118 {
51 {
119 d->m_markerColor = color;
52 return d->m_data;
120 }
53 }
121
54
122 QColor QScatterSeries::markerColor()
55 void QScatterSeries::setMarkerColor(QColor color)
123 {
56 {
124 return d->m_markerColor;
57 // TODO:
58 // d->m_markerColor = color;
125 }
59 }
126
60
127 // TODO:
61 QColor QScatterSeries::markerColor()
128 //void QScatterSeries::chartScaleChanged(qreal xscale, qreal yscale)
129 //{
130 // d->rescale(xscale, yscale);
131 //}
132
133 QScatterSeries::~QScatterSeries()
134 {
62 {
135 delete d;
63 // TODO:
64 // return d->m_markerColor;
65 return QColor();
136 }
66 }
137
67
138 #include "moc_qscatterseries.cpp"
68 #include "moc_qscatterseries.cpp"
139
69
140 QTCOMMERCIALCHART_END_NAMESPACE
70 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,39 +1,44
1 #ifndef QSCATTERSERIES_H
1 #ifndef QSCATTERSERIES_H
2 #define QSCATTERSERIES_H
2 #define QSCATTERSERIES_H
3
3
4 #include "qchartseries.h"
4 #include "qchartseries.h"
5 #include <QRectF>
5 #include <QRectF>
6 #include <QColor>
6 #include <QColor>
7
7
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9 class QScatterSeriesPrivate;
9 class QScatterSeriesPrivate;
10
10
11 class QTCOMMERCIALCHART_EXPORT QScatterSeries : public QChartSeries
11 class QTCOMMERCIALCHART_EXPORT QScatterSeries : public QChartSeries
12 {
12 {
13 Q_OBJECT
13 Q_OBJECT
14 public:
14 public:
15 //QScatterSeries(QSeriesData *data, QObject *chart);
15 //QScatterSeries(QSeriesData *data, QObject *chart);
16 QScatterSeries(QObject *parent = 0);
16 QScatterSeries(QObject *parent = 0);
17 ~QScatterSeries();
17 ~QScatterSeries();
18
18
19 public: // from QChartSeries
19 public: // from QChartSeries
20 QChartSeriesType type() const { return QChartSeries::SeriesTypeScatter; }
20 QChartSeriesType type() const { return QChartSeries::SeriesTypeScatter; }
21 bool setData(QList<qreal> x, QList<qreal> y);
21 bool setData(QList<qreal> x, QList<qreal> y);
22
22
23 public:
24 QList<QPointF> data();
25 Q_SIGNALS:
26 // TODO: move to PIMPL?
27 // TODO: more finegrained signaling
28 void changed();
29
23 public Q_SLOTS:
30 public Q_SLOTS:
24 // TODO: also affects opacity of the marker...? To be documented
31 // TODO: also affects opacity of the marker...? To be documented
25 void setMarkerColor(QColor color);
32 void setMarkerColor(QColor color);
26 QColor markerColor();
33 QColor markerColor();
27 // TODO: marker shapes: "x", star, rectangle, tilted rect, triangle, circle, dot
34 // TODO: marker shapes: "x", star, rectangle, tilted rect, triangle, circle, dot
28 //void setMarkerShape(QChartSeries::MarkerShape/QScatterSeries::MarkerShape shape);
35 //void setMarkerShape(QChartSeries::MarkerShape/QScatterSeries::MarkerShape shape);
29
30 private:
36 private:
31 Q_DECLARE_PRIVATE(QScatterSeries)
37 Q_DECLARE_PRIVATE(QScatterSeries)
32 Q_DISABLE_COPY(QScatterSeries)
38 Q_DISABLE_COPY(QScatterSeries)
33 friend class QChart;
34 QScatterSeriesPrivate *const d;
39 QScatterSeriesPrivate *const d;
35 };
40 };
36
41
37 QTCOMMERCIALCHART_END_NAMESPACE
42 QTCOMMERCIALCHART_END_NAMESPACE
38
43
39 #endif // QSCATTERSERIES_H
44 #endif // QSCATTERSERIES_H
@@ -1,47 +1,25
1 #ifndef QSCATTERSERIESPRIVATE_H
1 #ifndef QSCATTERSERIESPRIVATE_H
2 #define QSCATTERSERIESPRIVATE_H
2 #define QSCATTERSERIESPRIVATE_H
3
3
4 #include "qchartglobal.h"
4 #include "qchartseries.h"
5 #include "qchartseries.h"
5 #include "charttheme_p.h"
6 #include "chartitem_p.h"
7 #include "domain_p.h"
8 #include <QGraphicsItem>
9
6
10 QTCOMMERCIALCHART_BEGIN_NAMESPACE
7 QTCOMMERCIALCHART_BEGIN_NAMESPACE
11
8
12 /*!
9 /*!
13 * The PIMPL class of QScatterSeries.
10 * The PIMPL class of QScatterSeries.
14 */
11 */
15 class QScatterSeriesPrivate : public ChartItem
12 class QScatterSeriesPrivate
16 {
13 {
17 public:
14 public:
18 QScatterSeriesPrivate(QGraphicsItem *parent);
15 QScatterSeriesPrivate();
19
20 public: // from ChartObjectInterface
21 void setSize(const QSizeF &size);
22 void setPlotDomain(const Domain& data);
23
24 public: // from ChartThemeObserver
25 void themeChanged(ChartTheme *theme);
26
27 public: // from QGraphicsItem
28 QRectF boundingRect() const;
29 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
30
16
31 public:
17 public:
32 void changeGeometry();
33
18
34 QRectF m_boundingRect;
35 // TODO: use the chart data class instead of list of x and y values?
19 // TODO: use the chart data class instead of list of x and y values?
36 QList<qreal> m_x;
20 QList<QPointF> m_data;
37 QList<qreal> m_y;
38 QList<qreal> m_scenex;
39 QList<qreal> m_sceney;
40 QColor m_markerColor;
41 //SeriesTheme m_theme;
42 Domain m_visibleChartArea;
43 };
21 };
44
22
45 QTCOMMERCIALCHART_END_NAMESPACE
23 QTCOMMERCIALCHART_END_NAMESPACE
46
24
47 #endif // QSCATTERSERIESPRIVATE_H
25 #endif // QSCATTERSERIESPRIVATE_H
@@ -1,108 +1,112
1 !include( ../common.pri ):error( Couldn't find the common.pri file! )
1 !include( ../common.pri ):error( Couldn't find the common.pri file! )
2 TARGET = QtCommercialChart
2 TARGET = QtCommercialChart
3 DESTDIR = $$CHART_BUILD_LIB_DIR
3 DESTDIR = $$CHART_BUILD_LIB_DIR
4 TEMPLATE = lib
4 TEMPLATE = lib
5 QT += core \
5 QT += core \
6 gui
6 gui
7 CONFIG += debug_and_release
7 CONFIG += debug_and_release
8 CONFIG(debug, debug|release):TARGET = QtCommercialChartd
8 CONFIG(debug, debug|release):TARGET = QtCommercialChartd
9 SOURCES += barchart/barchartseries.cpp \
9 SOURCES += barchart/barchartseries.cpp \
10 barchart/bargroup.cpp \
10 barchart/bargroup.cpp \
11 barchart/bar.cpp \
11 barchart/bar.cpp \
12 barchart/stackedbarchartseries.cpp \
12 barchart/stackedbarchartseries.cpp \
13 barchart/stackedbargroup.cpp \
13 barchart/stackedbargroup.cpp \
14 barchart/percentbarchartseries.cpp \
14 barchart/percentbarchartseries.cpp \
15 barchart/percentbargroup.cpp \
15 barchart/percentbargroup.cpp \
16 barchart/barlabel.cpp \
16 barchart/barlabel.cpp \
17 linechart/linechartanimationitem.cpp \
17 linechart/linechartanimationitem.cpp \
18 linechart/linechartitem.cpp \
18 linechart/linechartitem.cpp \
19 linechart/qlinechartseries.cpp \
19 linechart/qlinechartseries.cpp \
20 barchart/separator.cpp \
20 barchart/separator.cpp \
21 barchart/bargroupbase.cpp \
21 barchart/bargroupbase.cpp \
22 barchart/barchartseriesbase.cpp \
22 barchart/barchartseriesbase.cpp \
23 qscatterseries.cpp \
23 qscatterseries.cpp \
24 #scatterpresentation.cpp \
24 qchart.cpp \
25 qchart.cpp \
25 axisitem.cpp \
26 axisitem.cpp \
26 qchartview.cpp \
27 qchartview.cpp \
27 qchartseries.cpp \
28 qchartseries.cpp \
28 qchartaxis.cpp \
29 qchartaxis.cpp \
29 charttheme.cpp \
30 charttheme.cpp \
30 chartdataset.cpp \
31 chartdataset.cpp \
31 chartpresenter.cpp \
32 chartpresenter.cpp \
32 domain.cpp
33 domain.cpp \
34 scatterpresenter.cpp
33 PRIVATE_HEADERS += linechart/linechartitem_p.h \
35 PRIVATE_HEADERS += linechart/linechartitem_p.h \
34 linechart/linechartanimationitem_p.h \
36 linechart/linechartanimationitem_p.h \
35 barchart/barlabel_p.h \
37 barchart/barlabel_p.h \
36 barchart/bar_p.h \
38 barchart/bar_p.h \
37 barchart/separator_p.h \
39 barchart/separator_p.h \
38 qscatterseries_p.h \
40 qscatterseries_p.h \
41 #scatterpresentation.h \
39 axisitem_p.h \
42 axisitem_p.h \
40 chartitem_p.h \
43 chartitem_p.h \
41 charttheme_p.h \
44 charttheme_p.h \
42 chartdataset_p.h \
45 chartdataset_p.h \
43 chartpresenter_p.h \
46 chartpresenter_p.h \
44 domain_p.h
47 domain_p.h
45 PUBLIC_HEADERS += linechart/qlinechartseries.h \
48 PUBLIC_HEADERS += linechart/qlinechartseries.h \
46 barchart/barchartseries.h \
49 barchart/barchartseries.h \
47 barchart/bargroup.h \
50 barchart/bargroup.h \
48 barchart/stackedbarchartseries.h \
51 barchart/stackedbarchartseries.h \
49 barchart/stackedbargroup.h \
52 barchart/stackedbargroup.h \
50 barchart/percentbarchartseries.h \
53 barchart/percentbarchartseries.h \
51 barchart/percentbargroup.h \
54 barchart/percentbargroup.h \
52 barchart/barchartseriesbase.h \
55 barchart/barchartseriesbase.h \
53 barchart/bargroupbase.h \
56 barchart/bargroupbase.h \
54 qchartseries.h \
57 qchartseries.h \
55 qscatterseries.h \
58 qscatterseries.h \
56 qchart.h \
59 qchart.h \
57 qchartglobal.h \
60 qchartglobal.h \
58 qchartview.h \
61 qchartview.h \
59 qchartaxis.h
62 qchartaxis.h
60
63
61 include(piechart/piechart.pri)
64 include(piechart/piechart.pri)
62
65
63 THEMES += themes/chartthemeicy_p.h \
66 THEMES += themes/chartthemeicy_p.h \
64 themes/chartthemegrayscale_p.h \
67 themes/chartthemegrayscale_p.h \
65 themes/chartthemescientific_p.h \
68 themes/chartthemescientific_p.h \
66 themes/chartthemevanilla_p.h
69 themes/chartthemevanilla_p.h
67 HEADERS += $$PUBLIC_HEADERS
70 HEADERS += $$PUBLIC_HEADERS \
71 scatterpresenter.h
68 HEADERS += $$PRIVATE_HEADERS
72 HEADERS += $$PRIVATE_HEADERS
69 HEADERS += $$THEMES
73 HEADERS += $$THEMES
70 INCLUDEPATH += linechart \
74 INCLUDEPATH += linechart \
71 barchart \
75 barchart \
72 themes \
76 themes \
73 .
77 .
74 OBJECTS_DIR = $$CHART_BUILD_DIR/lib
78 OBJECTS_DIR = $$CHART_BUILD_DIR/lib
75 MOC_DIR = $$CHART_BUILD_DIR/lib
79 MOC_DIR = $$CHART_BUILD_DIR/lib
76 UI_DIR = $$CHART_BUILD_DIR/lib
80 UI_DIR = $$CHART_BUILD_DIR/lib
77 RCC_DIR = $$CHART_BUILD_DIR/lib
81 RCC_DIR = $$CHART_BUILD_DIR/lib
78 DEFINES += QTCOMMERCIALCHART_LIBRARY
82 DEFINES += QTCOMMERCIALCHART_LIBRARY
79 public_headers.path = $$[QT_INSTALL_HEADERS]/QtCommercialChart
83 public_headers.path = $$[QT_INSTALL_HEADERS]/QtCommercialChart
80 public_headers.files = $$PUBLIC_HEADERS
84 public_headers.files = $$PUBLIC_HEADERS
81 target.path = $$[QT_INSTALL_LIBS]
85 target.path = $$[QT_INSTALL_LIBS]
82 INSTALLS += target \
86 INSTALLS += target \
83 public_headers
87 public_headers
84 install_build_headers.name = bild_headers
88 install_build_headers.name = bild_headers
85 install_build_headers.output = $$CHART_BUILD_HEADER_DIR/${QMAKE_FILE_BASE}.h
89 install_build_headers.output = $$CHART_BUILD_HEADER_DIR/${QMAKE_FILE_BASE}.h
86 install_build_headers.input = PUBLIC_HEADERS
90 install_build_headers.input = PUBLIC_HEADERS
87 install_build_headers.commands = $$QMAKE_COPY \
91 install_build_headers.commands = $$QMAKE_COPY \
88 ${QMAKE_FILE_NAME} \
92 ${QMAKE_FILE_NAME} \
89 $$CHART_BUILD_HEADER_DIR
93 $$CHART_BUILD_HEADER_DIR
90 install_build_headers.CONFIG += target_predeps \
94 install_build_headers.CONFIG += target_predeps \
91 no_link
95 no_link
92 QMAKE_EXTRA_COMPILERS += install_build_headers
96 QMAKE_EXTRA_COMPILERS += install_build_headers
93 chartversion.target = qchartversion_p.h
97 chartversion.target = qchartversion_p.h
94 chartversion.commands = @echo \
98 chartversion.commands = @echo \
95 "build_time" \
99 "build_time" \
96 > \
100 > \
97 $$chartversion.target;
101 $$chartversion.target;
98 chartversion.depends = $$HEADERS \
102 chartversion.depends = $$HEADERS \
99 $$SOURCES
103 $$SOURCES
100 PRE_TARGETDEPS += qchartversion_p.h
104 PRE_TARGETDEPS += qchartversion_p.h
101 QMAKE_CLEAN += qchartversion_p.h
105 QMAKE_CLEAN += qchartversion_p.h
102 QMAKE_EXTRA_TARGETS += chartversion
106 QMAKE_EXTRA_TARGETS += chartversion
103 unix:QMAKE_DISTCLEAN += -r \
107 unix:QMAKE_DISTCLEAN += -r \
104 $$CHART_BUILD_HEADER_DIR \
108 $$CHART_BUILD_HEADER_DIR \
105 $$CHART_BUILD_LIB_DIR
109 $$CHART_BUILD_LIB_DIR
106 win32:QMAKE_DISTCLEAN += /Q \
110 win32:QMAKE_DISTCLEAN += /Q \
107 $$CHART_BUILD_HEADER_DIR \
111 $$CHART_BUILD_HEADER_DIR \
108 $$CHART_BUILD_LIB_DIR
112 $$CHART_BUILD_LIB_DIR
@@ -1,30 +1,46
1 import QtQuick 1.0
1 import QtQuick 1.0
2 import QtCommercial.Chart 1.0
2 import QtCommercial.Chart 1.0
3
3
4 Rectangle {
4 Rectangle {
5 width: 360
5 width: 360
6 height: 360
6 height: 360
7 Text {
7 Text {
8 text: qsTr("Hello World")
8 text: qsTr("Hello World")
9 anchors.centerIn: parent
9 anchors.centerIn: parent
10 }
10 }
11
11
12 Chart {
12 Chart {
13 anchors.fill: parent
13 anchors.fill: parent
14 theme: Chart.ThemeIcy
14 theme: Chart.ThemeIcy
15
15
16 Series {
16 // PieSeries {
17 seriesType: Series.SeriesTypePie
17 // labels: ["point1", "point2", "point3", "point4", "point5"]
18 // datax: [2, 1.5, 3, 3, 3]
19 // }
20 PieSeries {
21 name: "raspberry pie"
22 seriesLabels: ["point1", "point2", "point3", "point4", "point5"]
23 seriesData: [2, 1.5, 3, 3, 3]
24 }
25 ScatterSeries {
26 name: "scatter1"
27 datax: [2, 1.5, 3, 3, 3]
28 datay: [2, 1.5, 3, 3, 3]
18 }
29 }
30 // Series {
31 // labels: ["point1", "point2", "point3", "point4", "point5"]
32 // datax: [2, 1.5, 3, 3, 3]
33 // seriesType: Series.SeriesTypePie
34 // }
19 Series {
35 Series {
20 seriesType: Series.SeriesTypeScatter
36 seriesType: Series.SeriesTypeScatter
21 }
37 }
22 Series {
38 Series {
23 seriesType: Series.SeriesTypeLine
39 seriesType: Series.SeriesTypeLine
24 }
40 }
25 // TODO:
41 // TODO:
26 // Series {
42 // Series {
27 // seriesType: Series.SeriesTypeBar
43 // seriesType: Series.SeriesTypeBar
28 // }
44 // }
29 }
45 }
30 }
46 }
General Comments 0
You need to be logged in to leave comments. Login now