forked from toby20130333/qchart.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQChart.qml
133 lines (108 loc) · 3.94 KB
/
QChart.qml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* QChart.qml ---
*
* Author: Julien Wintz
* Created: Thu Feb 13 20:59:40 2014 (+0100)
* Version:
* Last-Updated: jeu. mars 6 12:55:14 2014 (+0100)
* By: Julien Wintz
* Update #: 69
*/
/* Change Log:
*
*/
import QtQuick 2.0
import "QChart.js" as Charts
Item {
id: chartRoot
property var chart;
property var chartData;
property int chartType: 0;
property bool chartAnimated: false;
property alias chartAnimationEasing: chartAnimator.easing.type;
property alias chartAnimationDuration: chartAnimator.duration;
property int chartAnimationProgress: 0;
property var chartOptions: ({})
property real customScale: 2
Connections {
target: leftWindow
onActiveChanged: if (active) {canvas.requestPaint()}
}
onChartAnimationProgressChanged: {
canvas.requestPaint();
}
onChartDataChanged: {
// force creation of a new chart instance with updated data
chart = undefined;
canvas.requestPaint();
}
function repaint() { canvas.requestPaint() }
onVisibleChanged: if (visible) repaint()
Canvas {
id: canvas;
// ///////////////////////////////////////////////////////////////
// /////////////////////////////////////////////////////////////////
// Callbacks
// /////////////////////////////////////////////////////////////////
scale: 1/customScale
onScaleChanged: console.log("scale: " + scale)
transformOrigin: Item.TopLeft
width: parent.width * customScale
height: parent.height * customScale
Component.onCompleted: {
var ctx = getContext("2d");
ctx.scale(customScale, customScale)
}
onPaint: {
if(!chart) {
switch(chartType) {
case Charts.ChartType.BAR:
chart = new Charts.Chart(canvas, canvas.getContext("2d")).Bar(chartData, chartOptions);
break;
case Charts.ChartType.DOUGHNUT:
chart = new Charts.Chart(canvas, canvas.getContext("2d")).Doughnut(chartData, chartOptions);
break;
case Charts.ChartType.LINE:
chart = new Charts.Chart(canvas, canvas.getContext("2d")).Line(chartData, chartOptions);
break;
case Charts.ChartType.PIE:
chart = new Charts.Chart(canvas, canvas.getContext("2d")).Pie(chartData, chartOptions);
break;
case Charts.ChartType.POLAR:
chart = new Charts.Chart(canvas, canvas.getContext("2d")).PolarArea(chartData, chartOptions);
break;
case Charts.ChartType.RADAR:
chart = new Charts.Chart(canvas, canvas.getContext("2d")).Radar(chartData, chartOptions);
break;
default:
console.log('Chart type should be specified.');
}
chart.init();
if (chartAnimated)
chartAnimator.start();
else
chartAnimationProgress = 100;
}
chart.draw(chartAnimationProgress/100);
}
onHeightChanged: {
requestPaint();
}
onWidthChanged: {
requestPaint();
}
// /////////////////////////////////////////////////////////////////
// Functions
// /////////////////////////////////////////////////////////////////
// /////////////////////////////////////////////////////////////////
// Internals
// /////////////////////////////////////////////////////////////////
PropertyAnimation {
id: chartAnimator;
target: chartRoot;
property: "chartAnimationProgress";
to: 100;
duration: 500;
easing.type: Easing.InOutElastic;
}
}
}