##// END OF EJS Templates
Proposal for QML data API
Tero Ahola -
r196:36c146599567
parent child
Show More
@@ -0,0 +1,69
1 #include "declarativescatterseries.h"
2 #include "declarativechart.h"
3 #include "qchart.h"
4 #include "qscatterseries.h"
5 #include <cmath>
6
7 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8
9 DeclarativeScatterSeries::DeclarativeScatterSeries(QDeclarativeItem *parent) :
10 QDeclarativeItem(parent),
11 m_chart(0),
12 m_series(0)
13 {
14 setFlag(QGraphicsItem::ItemHasNoContents, false);
15 connect(this, SIGNAL(parentChanged()),
16 this, SLOT(setParentForSeries()));
17 }
18
19 void DeclarativeScatterSeries::setParentForSeries()
20 {
21 if (!m_series)
22 initSeries();
23 }
24
25 void DeclarativeScatterSeries::initSeries()
26 {
27 Q_ASSERT(!m_series);
28 DeclarativeChart *declarativeChart = qobject_cast<DeclarativeChart *>(parent());
29
30 if (declarativeChart) {
31 QChart *chart = qobject_cast<QChart *>(declarativeChart->m_chart);
32 qDebug() << "creating scatter series for chart: " << chart;
33 Q_ASSERT(chart);
34
35 m_series = new QScatterSeries();
36 Q_ASSERT(m_series);
37 for (int i(0); i < m_data.count(); i++) {
38 ScatterElement *element = m_data.at(i);
39 *m_series << QPointF(element->x(), element->y());
40 }
41 chart->addSeries(m_series);
42 }
43 }
44
45 QDeclarativeListProperty<ScatterElement> DeclarativeScatterSeries::data()
46 {
47 return QDeclarativeListProperty<ScatterElement>(this, 0,
48 &DeclarativeScatterSeries::appendData);
49 }
50
51 void DeclarativeScatterSeries::appendData(QDeclarativeListProperty<ScatterElement> *list,
52 ScatterElement *element)
53 {
54 DeclarativeScatterSeries *series = qobject_cast<DeclarativeScatterSeries *>(list->object);
55 qDebug() << "appendData: " << series;
56 qDebug() << "appendData: " << element;
57 qDebug() << "appendData: " << element->x();
58 qDebug() << "appendData: " << element->y();
59 qDebug() << "appendData: " << series->m_series;
60 if (series) {
61 series->m_data.append(element);
62 if (series->m_series)
63 series->m_series->addData(QPointF(element->x(), element->y()));
64 }
65 }
66
67 #include "moc_declarativescatterseries.cpp"
68
69 QTCOMMERCIALCHART_END_NAMESPACE
@@ -0,0 +1,42
1 #ifndef DECLARATIVESCATTERSERIES_H
2 #define DECLARATIVESCATTERSERIES_H
3
4 #include "qchartglobal.h"
5 #include "scatterelement.h"
6 #include <QDeclarativeItem>
7
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9
10 class QChart;
11 class QScatterSeries;
12
13 class DeclarativeScatterSeries : public QDeclarativeItem
14 {
15 Q_OBJECT
16 Q_PROPERTY(QDeclarativeListProperty<ScatterElement> data READ data)
17
18 public:
19 explicit DeclarativeScatterSeries(QDeclarativeItem *parent = 0);
20 QDeclarativeListProperty<ScatterElement> data();
21
22 signals:
23
24 public slots:
25 static void appendData(QDeclarativeListProperty<ScatterElement> *list,
26 ScatterElement *element);
27 // void append(ScatterElement element);
28
29 private slots:
30 void setParentForSeries();
31
32 public:
33 void initSeries();
34
35 QChart *m_chart;
36 QScatterSeries *m_series;
37 QList<ScatterElement *> m_data;
38 };
39
40 QTCOMMERCIALCHART_END_NAMESPACE
41
42 #endif // DECLARATIVESCATTERSERIES_H
@@ -0,0 +1,12
1 #include "scatterelement.h"
2
3 QTCOMMERCIALCHART_BEGIN_NAMESPACE
4
5 ScatterElement::ScatterElement(QObject *parent) :
6 QObject(parent)
7 {
8 }
9
10 #include "moc_scatterelement.cpp"
11
12 QTCOMMERCIALCHART_END_NAMESPACE
@@ -0,0 +1,30
1 #ifndef SCATTERELEMENT_H
2 #define SCATTERELEMENT_H
3
4 #include "qchartglobal.h"
5 #include <QObject>
6
7 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8
9 class ScatterElement : public QObject
10 {
11 Q_OBJECT
12 Q_PROPERTY(qreal x READ x WRITE setX /*NOTIFY dataXChanged*/)
13 Q_PROPERTY(qreal y READ y WRITE setY /*NOTIFY dataYChanged*/)
14
15 public:
16 explicit ScatterElement(QObject *parent = 0);
17
18 void setX(qreal x) {m_x = x;}
19 qreal x() {return m_x;}
20 void setY(qreal y) {m_y = y;}
21 qreal y() {return m_y;}
22
23 public:
24 qreal m_x;
25 qreal m_y;
26 };
27
28 QTCOMMERCIALCHART_END_NAMESPACE
29
30 #endif // SCATTERELEMENT_H
@@ -2,6 +2,8
2 #include <QtDeclarative/qdeclarative.h>
2 #include <QtDeclarative/qdeclarative.h>
3 #include "declarativechart.h"
3 #include "declarativechart.h"
4 #include "declarativeseries.h"
4 #include "declarativeseries.h"
5 #include "scatterelement.h"
6 #include "declarativescatterseries.h"
5
7
6 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
7
9
@@ -14,7 +16,8 public:
14 Q_ASSERT(QLatin1String(uri) == QLatin1String("QtCommercial.Chart"));
16 Q_ASSERT(QLatin1String(uri) == QLatin1String("QtCommercial.Chart"));
15 qmlRegisterType<DeclarativeChart>(uri, 1, 0, "Chart");
17 qmlRegisterType<DeclarativeChart>(uri, 1, 0, "Chart");
16 qmlRegisterType<DeclarativeSeries>(uri, 1, 0, "Series");
18 qmlRegisterType<DeclarativeSeries>(uri, 1, 0, "Series");
17 //qmlRegisterUncreatableType<QChartSeries::SeriesTypeBar>(uri, 1, 0, "Series.Se", QLatin1String("Do not create objects of this type."));
19 qmlRegisterType<DeclarativeScatterSeries>(uri, 1, 0, "ScatterSeries");
20 qmlRegisterType<ScatterElement>(uri, 1, 0, "ScatterElement");
18 }
21 }
19 };
22 };
20
23
@@ -24,10 +24,14 RCC_DIR = $$CHART_BUILD_DIR/lib
24 SOURCES += \
24 SOURCES += \
25 plugin.cpp \
25 plugin.cpp \
26 declarativechart.cpp \
26 declarativechart.cpp \
27 declarativeseries.cpp
27 declarativeseries.cpp \
28 declarativescatterseries.cpp \
29 scatterelement.cpp
28 HEADERS += \
30 HEADERS += \
29 declarativechart.h \
31 declarativechart.h \
30 declarativeseries.h
32 declarativeseries.h \
33 declarativescatterseries.h \
34 scatterelement.h
31
35
32 TARGETPATH = QtCommercial/Chart
36 TARGETPATH = QtCommercial/Chart
33 target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
37 target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
@@ -37,3 +41,17 qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
37 INSTALLS += target qmldir
41 INSTALLS += target qmldir
38
42
39
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
@@ -9,106 +9,64 Rectangle {
9 anchors.centerIn: parent
9 anchors.centerIn: parent
10 }
10 }
11
11
12 // Another option for QML data api:
12 // ListModel {
13 // ListModel {
13 // id: listModelForPie
14 // id: listModelForPie
14 // // PieDataElement
15 // // PieDataElement
15 // ListElement {
16 // ListElement {
16 // label: "Apple"
17 // label: "Apple"
17 // value: 40.3
18 // value: 4.3
18 // }
19 // }
19 // ListElement {
20 // ListElement {
20 // label: "Pumpkin"
21 // label: "Blackberry"
21 // value: 10.1
22 // }
23 // ListElement {
24 // label: "Raspberry"
25 // value: 15.1
22 // value: 15.1
26 // }
23 // }
27 // ListElement {
28 // label: "Strawberry"
29 // value: 29.9
30 // }
31 // }
24 // }
32
25
33 // ChartModel {
26 Component.onCompleted: {
34 // id: chartModel
27 // console.log("Component.onCompleted: " + scatterElement.x);
35 // ListElement {
28 // console.log("Component.onCompleted: " + scatterElement.y);
36 // label: "dada"
29 // console.log("Component.onCompleted: " + scatterElement.dataX);
37 // x: 1.1
30 // console.log("Component.onCompleted: " + scatterElement.dataY);
38 // y: 3.2
31 //console.log("Component.onCompleted: " + chartModel.get(0).x);
39 // }
32 //console.log("Component.onCompleted: " + chartModel.scatterElements);
40 // }
33 // console.log("Component.onCompleted: " + elementt.dataX);
41
34 // console.log("Component.onCompleted: " + chartModel.get(0).dataX);
42 // ChartModel {
43 // ScatterElement {x: 1.1; y: 1.2}
44 // ScatterElement {x: 1.3; y: 1.9}
45 // ScatterElement {x: 1.1; y: 1.2}
46 // }
47
48 ListModel {
49 id: listModelScatter
50 ListElement {
51 height: 154
52 weight: 54
53 }
54 ListElement {
55 height: 166
56 weight: 64
57 }
58 ListElement {
59 height: 199
60 weight: 97
61 }
62 }
35 }
63
36
64 // Chart {
65 // anchors.fill: parent
66 // theme: Chart.ThemeIcy
67 // ScatterSeries {
68 // model: listModelScatter
69 // name: "scatter"
70 // xValue: x
71 // yValue: y
72 // }
73 // }
74
75 Chart {
37 Chart {
76 anchors.fill: parent
38 anchors.fill: parent
77 theme: Chart.ThemeIcy
39 theme: Chart.ThemeIcy
78
40
79 // PieSeries {
41 ScatterSeries {
80 // labels: ["point1", "point2", "point3", "point4", "point5"]
42 id: scatterSeries
81 // datax: [2, 1.5, 3, 3, 3]
43 data: [
82 // }
44 ScatterElement { x: 1.1; y: 2.1 },
83 // PieSeries {
45 ScatterElement { x: 1.2; y: 2.0 },
84 // name: "raspberry pie"
46 ScatterElement { x: 1.4; y: 2.3 },
85 // seriesLabels: ["point1", "point2", "point3", "point4", "point5"]
47 ScatterElement { x: 1.9; y: 2.5 },
86 // seriesData: [2, 1.5, 3, 3, 3]
48 ScatterElement { x: 1.9; y: 3.4 },
87 // }
49 ScatterElement { x: 2.9; y: 1.4 },
88 // ScatterSeries {
50 ScatterElement { x: 2.9; y: 2.4 },
89 // name: "scatter1"
51 ScatterElement { x: 3.1; y: 5.3 },
90 // datax: [2, 1.5, 3, 3, 3]
52 ScatterElement { x: 4.1; y: 3.7 }
91 // datay: [2, 1.5, 3, 3, 3]
53 ]
92 // }
54 Component.onCompleted: {
55 console.log("onCompleted " + data);
56 // console.log("onCompleted " + data.get(0));
57 // console.log("onCompleted " + data.get(0).x);
58 // var element = {"x": 9.9, "y": 8.5};
59 // data.append(element);
60 }
61 }
62
93 // Series {
63 // Series {
94 // labels: ["point1", "point2", "point3", "point4", "point5"]
95 // datax: [2, 1.5, 3, 3, 3]
96 // seriesType: Series.SeriesTypePie
64 // seriesType: Series.SeriesTypePie
97 // }
65 // }
98 Series {
99 seriesType: Series.SeriesTypePie
100 //model: listModelForPie
101 //seriesData: {11.0, 6.4, 12.6, 22.4}
102 //seriesLabels: {"Strawberry", "Blackberry", "Apple", "Pumpkin"}
103 }
104
66
105 Series {
67 // Series {
106 // data: {[1.2], "y":2.2 }
68 // seriesType: Series.SeriesTypeLine
107 seriesType: Series.SeriesTypeScatter
69 // }
108 }
109 Series {
110 seriesType: Series.SeriesTypeLine
111 }
112 // TODO:
70 // TODO:
113 // Series {
71 // Series {
114 // seriesType: Series.SeriesTypeBar
72 // seriesType: Series.SeriesTypeBar
General Comments 0
You need to be logged in to leave comments. Login now