@@ -0,0 +1,35 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | #include <QtGui/QApplication> | |
|
22 | #include <QDeclarativeEngine> | |
|
23 | #include "qmlapplicationviewer.h" | |
|
24 | ||
|
25 | Q_DECL_EXPORT int main(int argc, char *argv[]) | |
|
26 | { | |
|
27 | QScopedPointer<QApplication> app(createApplication(argc, argv)); | |
|
28 | QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create()); | |
|
29 | ||
|
30 | viewer->setOrientation(QmlApplicationViewer::ScreenOrientationAuto); | |
|
31 | viewer->setSource(QUrl("qrc:/qml/qmlchartaxis/main.qml")); | |
|
32 | viewer->showExpanded(); | |
|
33 | ||
|
34 | return app->exec(); | |
|
35 | } |
@@ -0,0 +1,70 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | ||
|
23 | Rectangle { | |
|
24 | id: button | |
|
25 | height: 25 | |
|
26 | width: 140 | |
|
27 | color: unpressedColor | |
|
28 | radius: 5 | |
|
29 | property color unpressedColor: "#afafaf" | |
|
30 | ||
|
31 | property string text: "button" | |
|
32 | signal clicked | |
|
33 | ||
|
34 | Text { | |
|
35 | id: buttonText | |
|
36 | anchors.centerIn: parent | |
|
37 | text: button.text | |
|
38 | } | |
|
39 | ||
|
40 | MouseArea { | |
|
41 | anchors.fill: parent | |
|
42 | onClicked: { | |
|
43 | button.clicked(); | |
|
44 | } | |
|
45 | onPressedChanged: { | |
|
46 | if (pressed) { | |
|
47 | button.color = "#efefef"; | |
|
48 | } else { | |
|
49 | button.color = unpressedColor; | |
|
50 | } | |
|
51 | } | |
|
52 | onPressAndHold: { | |
|
53 | repeatTimer.start(); | |
|
54 | } | |
|
55 | onReleased: { | |
|
56 | repeatTimer.stop(); | |
|
57 | } | |
|
58 | } | |
|
59 | ||
|
60 | Timer { | |
|
61 | id: repeatTimer | |
|
62 | interval: 140 | |
|
63 | repeat: true | |
|
64 | triggeredOnStart: false | |
|
65 | running: false | |
|
66 | onTriggered: { | |
|
67 | button.clicked(); | |
|
68 | } | |
|
69 | } | |
|
70 | } |
@@ -0,0 +1,110 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | id: chartView | |
|
26 | title: "Chart Title" | |
|
27 | anchors.fill: parent | |
|
28 | property variant series: chartView | |
|
29 | ||
|
30 | LineSeries { | |
|
31 | name: "line" | |
|
32 | XYPoint { x: 0; y: 0 } | |
|
33 | XYPoint { x: 1.1; y: 2.1 } | |
|
34 | XYPoint { x: 1.9; y: 3.3 } | |
|
35 | XYPoint { x: 2.1; y: 2.1 } | |
|
36 | XYPoint { x: 2.9; y: 4.9 } | |
|
37 | XYPoint { x: 3.4; y: 3.0 } | |
|
38 | XYPoint { x: 4.1; y: 3.3 } | |
|
39 | } | |
|
40 | ||
|
41 | onVisibleChanged: console.log("chart.onVisibleChanged: " + visible); | |
|
42 | onTitleColorChanged: console.log("chart.onTitleColorChanged: " + color); | |
|
43 | onBackgroundColorChanged: console.log("chart.onBackgroundColorChanged: " + series.backgroundColor); | |
|
44 | onDropShadowEnabledChanged: console.log("chart.onDropShadowEnabledChanged: " + enabled); | |
|
45 | onTopMarginChanged: { | |
|
46 | console.log("chart.onTopMarginChanged: " + margin); | |
|
47 | marginVisualizer.opacity = 1.0; | |
|
48 | } | |
|
49 | onBottomMarginChanged: { | |
|
50 | console.log("chart.onBottomMarginChanged: " + margin); | |
|
51 | marginVisualizer.opacity = 1.0; | |
|
52 | } | |
|
53 | onLeftMarginChanged: { | |
|
54 | console.log("chart.onLeftMarginChanged: " + margin); | |
|
55 | marginVisualizer.opacity = 1.0; | |
|
56 | } | |
|
57 | onRightMarginChanged: { | |
|
58 | console.log("chart.onRightMarginChanged: " + margin); | |
|
59 | marginVisualizer.opacity = 1.0; | |
|
60 | } | |
|
61 | ||
|
62 | legend.onVisibleChanged: console.log("legend.onVisibleChanged: " + series.legend.visible); | |
|
63 | legend.onBackgroundVisibleChanged: console.log("legend.onBackgroundVisibleChanged: " + visible); | |
|
64 | legend.onColorChanged: console.log("legend.onColorChanged: " + color); | |
|
65 | legend.onBorderColorChanged: console.log("legend.onBorderColorChanged: " + color); | |
|
66 | legend.onLabelColorChanged: console.log("legend.onLabelColorChanged: " + color); | |
|
67 | ||
|
68 | ||
|
69 | ValuesAxis{ | |
|
70 | onColorChanged: console.log("axisX.onColorChanged: " + color); | |
|
71 | onLabelsVisibleChanged: console.log("axisX.onLabelsVisibleChanged: " + visible); | |
|
72 | onLabelsColorChanged: console.log("axisX.onLabelsColorChanged: " + color); | |
|
73 | onVisibleChanged: console.log("axisX.onVisibleChanged: " + visible); | |
|
74 | onGridVisibleChanged: console.log("axisX.onGridVisibleChanged: " + visible); | |
|
75 | onShadesVisibleChanged: console.log("axisX.onShadesVisibleChanged: " + visible); | |
|
76 | onShadesColorChanged: console.log("axisX.onShadesColorChanged: " + color); | |
|
77 | onShadesBorderColorChanged: console.log("axisX.onShadesBorderColorChanged: " + color); | |
|
78 | onMinChanged: console.log("axisX.onMinChanged: " + min); | |
|
79 | onMaxChanged: console.log("axisX.onMaxChanged: " + max); | |
|
80 | } | |
|
81 | ||
|
82 | ValuesAxis{ | |
|
83 | onColorChanged: console.log("axisY.onColorChanged: " + color); | |
|
84 | onLabelsVisibleChanged: console.log("axisY.onLabelsVisibleChanged: " + visible); | |
|
85 | onLabelsColorChanged: console.log("axisY.onLabelsColorChanged: " + color); | |
|
86 | onVisibleChanged: console.log("axisY.onVisibleChanged: " + visible); | |
|
87 | onGridVisibleChanged: console.log("axisY.onGridVisibleChanged: " + visible); | |
|
88 | onShadesVisibleChanged: console.log("axisY.onShadesVisibleChanged: " + visible); | |
|
89 | onShadesColorChanged: console.log("axisY.onShadesColorChanged: " + color); | |
|
90 | onShadesBorderColorChanged: console.log("axisY.onShadesBorderColorChanged: " + color); | |
|
91 | onMinChanged: console.log("axisY.onMinChanged: " + min); | |
|
92 | onMaxChanged: console.log("axisY.onMaxChanged: " + max); | |
|
93 | } | |
|
94 | ||
|
95 | Rectangle { | |
|
96 | id: marginVisualizer | |
|
97 | color: "transparent" | |
|
98 | border.color: "red" | |
|
99 | anchors.fill: parent | |
|
100 | anchors.topMargin: parent.topMargin | |
|
101 | anchors.bottomMargin: parent.bottomMargin | |
|
102 | anchors.leftMargin: parent.leftMargin | |
|
103 | anchors.rightMargin: parent.rightMargin | |
|
104 | opacity: 0.0 | |
|
105 | onOpacityChanged: if (opacity > 0.9) opacity = 0.0; | |
|
106 | Behavior on opacity { | |
|
107 | NumberAnimation { duration: 800 } | |
|
108 | } | |
|
109 | } | |
|
110 | } |
@@ -0,0 +1,49 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | id: chartView | |
|
26 | title: "default axes" | |
|
27 | ||
|
28 | LineSeries { | |
|
29 | name: "line series" | |
|
30 | XYPoint { x: 0; y: 0 } | |
|
31 | XYPoint { x: 1.1; y: 2.1 } | |
|
32 | XYPoint { x: 1.9; y: 3.3 } | |
|
33 | XYPoint { x: 2.1; y: 2.1 } | |
|
34 | XYPoint { x: 2.9; y: 4.9 } | |
|
35 | XYPoint { x: 3.4; y: 3.0 } | |
|
36 | XYPoint { x: 4.1; y: 3.3 } | |
|
37 | } | |
|
38 | ||
|
39 | ScatterSeries { | |
|
40 | name: "scatter series" | |
|
41 | XYPoint { x: 0; y: 0 } | |
|
42 | XYPoint { x: 1.1; y: 2.1 } | |
|
43 | XYPoint { x: 1.9; y: 3.3 } | |
|
44 | XYPoint { x: 2.1; y: 2.1 } | |
|
45 | XYPoint { x: 2.9; y: 4.9 } | |
|
46 | XYPoint { x: 3.4; y: 3.0 } | |
|
47 | XYPoint { x: 4.1; y: 3.3 } | |
|
48 | } | |
|
49 | } |
@@ -0,0 +1,64 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | title: "user defined axes" | |
|
26 | ||
|
27 | ValuesAxis { | |
|
28 | id: axisX | |
|
29 | min: 0 | |
|
30 | max: 10 | |
|
31 | } | |
|
32 | ||
|
33 | ValuesAxis { | |
|
34 | id: axisY | |
|
35 | min: 0 | |
|
36 | max: 6 | |
|
37 | } | |
|
38 | ||
|
39 | LineSeries { | |
|
40 | name: "line series" | |
|
41 | axisX: axisX | |
|
42 | axisY: axisY | |
|
43 | XYPoint { x: 0; y: 0 } | |
|
44 | XYPoint { x: 1.1; y: 2.1 } | |
|
45 | XYPoint { x: 1.9; y: 3.3 } | |
|
46 | XYPoint { x: 2.1; y: 2.1 } | |
|
47 | XYPoint { x: 2.9; y: 4.9 } | |
|
48 | XYPoint { x: 3.4; y: 3.0 } | |
|
49 | XYPoint { x: 4.1; y: 3.3 } | |
|
50 | } | |
|
51 | ||
|
52 | ScatterSeries { | |
|
53 | name: "scatter series" | |
|
54 | axisX: axisX | |
|
55 | axisY: axisY | |
|
56 | XYPoint { x: 0; y: 0 } | |
|
57 | XYPoint { x: 1.1; y: 2.1 } | |
|
58 | XYPoint { x: 1.9; y: 3.3 } | |
|
59 | XYPoint { x: 2.1; y: 2.1 } | |
|
60 | XYPoint { x: 2.9; y: 4.9 } | |
|
61 | XYPoint { x: 3.4; y: 3.0 } | |
|
62 | XYPoint { x: 4.1; y: 3.3 } | |
|
63 | } | |
|
64 | } |
@@ -0,0 +1,71 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | id: chartView | |
|
26 | title: "user defined axes" | |
|
27 | ||
|
28 | ValuesAxis { | |
|
29 | id: axisX | |
|
30 | min: 0 | |
|
31 | max: 10 | |
|
32 | // TODO: property to fix orientation to "X" to make this the X default axis for all series | |
|
33 | // that don't have user defined X axis | |
|
34 | } | |
|
35 | ||
|
36 | ValuesAxis { | |
|
37 | id: axisY | |
|
38 | min: 0 | |
|
39 | max: 5 | |
|
40 | // TODO: property to fix orientation to "Y" to make this the Y default axis for all series | |
|
41 | // that don't have user defined Y axis | |
|
42 | } | |
|
43 | ||
|
44 | LineSeries { | |
|
45 | name: "line series" | |
|
46 | XYPoint { x: 0; y: 0 } | |
|
47 | XYPoint { x: 1.1; y: 2.1 } | |
|
48 | XYPoint { x: 1.9; y: 3.3 } | |
|
49 | XYPoint { x: 2.1; y: 2.1 } | |
|
50 | XYPoint { x: 2.9; y: 4.9 } | |
|
51 | XYPoint { x: 3.4; y: 3.0 } | |
|
52 | XYPoint { x: 4.1; y: 3.3 } | |
|
53 | } | |
|
54 | ||
|
55 | ScatterSeries { | |
|
56 | name: "scatter series" | |
|
57 | id: scatter | |
|
58 | XYPoint { x: 0; y: 0 } | |
|
59 | XYPoint { x: 1.1; y: 2.1 } | |
|
60 | XYPoint { x: 1.9; y: 3.3 } | |
|
61 | XYPoint { x: 2.1; y: 2.1 } | |
|
62 | XYPoint { x: 2.9; y: 4.9 } | |
|
63 | XYPoint { x: 3.4; y: 3.0 } | |
|
64 | XYPoint { x: 4.1; y: 3.3 } | |
|
65 | } | |
|
66 | ||
|
67 | Component.onCompleted: { | |
|
68 | // You can also set the axes dynamically | |
|
69 | chartView.setAxisX(axisX, scatter); | |
|
70 | } | |
|
71 | } |
@@ -0,0 +1,74 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | title: "configuring dynamically" | |
|
26 | id: chartView | |
|
27 | property int index: 0 | |
|
28 | ||
|
29 | Timer { | |
|
30 | interval: 1000 | |
|
31 | repeat: true | |
|
32 | running: true | |
|
33 | onTriggered: { | |
|
34 | switch (index) { | |
|
35 | case 0: | |
|
36 | chartView.axisX(lineSeries).max = 5; | |
|
37 | chartView.axisY(lineSeries).max = 5; | |
|
38 | break; | |
|
39 | case 1: | |
|
40 | chartView.axisX(scatterSeries).max = 10; | |
|
41 | chartView.axisY(scatterSeries).max = 10; | |
|
42 | break; | |
|
43 | default: | |
|
44 | chartView.axisX().max = 15; | |
|
45 | chartView.axisY().max = 15; | |
|
46 | } | |
|
47 | index = (index + 1) % 3; | |
|
48 | } | |
|
49 | } | |
|
50 | ||
|
51 | LineSeries { | |
|
52 | id: lineSeries | |
|
53 | name: "line series" | |
|
54 | XYPoint { x: 0; y: 0 } | |
|
55 | XYPoint { x: 1.1; y: 2.1 } | |
|
56 | XYPoint { x: 1.9; y: 3.3 } | |
|
57 | XYPoint { x: 2.1; y: 2.1 } | |
|
58 | XYPoint { x: 2.9; y: 4.9 } | |
|
59 | XYPoint { x: 3.4; y: 3.0 } | |
|
60 | XYPoint { x: 4.1; y: 3.3 } | |
|
61 | } | |
|
62 | ||
|
63 | ScatterSeries { | |
|
64 | id: scatterSeries | |
|
65 | name: "scatter series" | |
|
66 | XYPoint { x: 0; y: 0 } | |
|
67 | XYPoint { x: 1.1; y: 2.1 } | |
|
68 | XYPoint { x: 1.9; y: 3.3 } | |
|
69 | XYPoint { x: 2.1; y: 2.1 } | |
|
70 | XYPoint { x: 2.9; y: 4.9 } | |
|
71 | XYPoint { x: 3.4; y: 3.0 } | |
|
72 | XYPoint { x: 4.1; y: 3.3 } | |
|
73 | } | |
|
74 | } |
@@ -0,0 +1,84 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | title: "series specific dynamic axes" | |
|
26 | id: chartView | |
|
27 | property int index: 0 | |
|
28 | ||
|
29 | Timer { | |
|
30 | interval: 1000 | |
|
31 | repeat: true | |
|
32 | running: true | |
|
33 | onTriggered: { | |
|
34 | switch (index) { | |
|
35 | case 0: | |
|
36 | lineAxisX.max = 5; | |
|
37 | lineAxisY.max = 5; | |
|
38 | scatterAxisX.max = 10; | |
|
39 | scatterAxisY.max = 10; | |
|
40 | break; | |
|
41 | case 1: | |
|
42 | lineAxisX.max = 10; | |
|
43 | lineAxisY.max = 10; | |
|
44 | scatterAxisX.max = 5; | |
|
45 | scatterAxisY.max = 5; | |
|
46 | break; | |
|
47 | default: | |
|
48 | chartView.axisX().max = 2; | |
|
49 | chartView.axisY().max = 2; | |
|
50 | } | |
|
51 | index = (index + 1) % 3; | |
|
52 | } | |
|
53 | } | |
|
54 | ||
|
55 | LineSeries { | |
|
56 | id: lineSeries | |
|
57 | name: "line series" | |
|
58 | axisX: ValuesAxis { id: lineAxisX } | |
|
59 | axisY: ValuesAxis { id: lineAxisY } | |
|
60 | ||
|
61 | XYPoint { x: 0; y: 0 } | |
|
62 | XYPoint { x: 1.1; y: 2.1 } | |
|
63 | XYPoint { x: 1.9; y: 3.3 } | |
|
64 | XYPoint { x: 2.1; y: 2.1 } | |
|
65 | XYPoint { x: 2.9; y: 4.9 } | |
|
66 | XYPoint { x: 3.4; y: 3.0 } | |
|
67 | XYPoint { x: 4.1; y: 3.3 } | |
|
68 | } | |
|
69 | ||
|
70 | ScatterSeries { | |
|
71 | id: scatterSeries | |
|
72 | name: "scatter series" | |
|
73 | axisX: ValuesAxis { id: scatterAxisX } | |
|
74 | axisY: ValuesAxis { id: scatterAxisY } | |
|
75 | ||
|
76 | XYPoint { x: 0; y: 0 } | |
|
77 | XYPoint { x: 1.1; y: 2.1 } | |
|
78 | XYPoint { x: 1.9; y: 3.3 } | |
|
79 | XYPoint { x: 2.1; y: 2.1 } | |
|
80 | XYPoint { x: 2.9; y: 4.9 } | |
|
81 | XYPoint { x: 3.4; y: 3.0 } | |
|
82 | XYPoint { x: 4.1; y: 3.3 } | |
|
83 | } | |
|
84 | } |
@@ -0,0 +1,66 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | id: chartView | |
|
26 | title: "dynamically created series" | |
|
27 | property int index: 0 | |
|
28 | ||
|
29 | Timer { | |
|
30 | interval: 1000 | |
|
31 | repeat: true | |
|
32 | running: true | |
|
33 | onTriggered: { | |
|
34 | switch (index) { | |
|
35 | case 0: | |
|
36 | while (chartView.count) | |
|
37 | chartView.series(0).destroy(); | |
|
38 | var line = chartView.createSeries(ChartView.SeriesTypeLine, "line"); | |
|
39 | line.append(0, 0); | |
|
40 | line.append(1.1, 2.1); | |
|
41 | line.append(1.9, 3.3); | |
|
42 | line.append(2.1, 2.1); | |
|
43 | line.append(2.9, 4.9); | |
|
44 | line.append(3.4, 3.0); | |
|
45 | line.append(4.1, 3.3); | |
|
46 | break; | |
|
47 | case 1: | |
|
48 | chartView.axisX().min = 0; | |
|
49 | chartView.axisX().max = 4.5; | |
|
50 | chartView.axisY().min = 0; | |
|
51 | chartView.axisY().max = 4.5; | |
|
52 | break; | |
|
53 | default: | |
|
54 | var scatter = chartView.createSeries(ChartView.SeriesTypeScatter, "scatter"); | |
|
55 | scatter.append(0, 0); | |
|
56 | scatter.append(1.1, 2.1); | |
|
57 | scatter.append(1.9, 3.3); | |
|
58 | scatter.append(2.1, 2.1); | |
|
59 | scatter.append(2.9, 4.9); | |
|
60 | scatter.append(3.4, 3.0); | |
|
61 | scatter.append(4.1, 3.3); | |
|
62 | } | |
|
63 | index = (index + 1) % 3; | |
|
64 | } | |
|
65 | } | |
|
66 | } |
@@ -0,0 +1,64 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | id: chartView | |
|
26 | title: "switching axes dynamically" | |
|
27 | ||
|
28 | Timer { | |
|
29 | interval: 1000 | |
|
30 | repeat: true | |
|
31 | running: true | |
|
32 | onTriggered: { | |
|
33 | if (lineSeries.axisX == valuesAxis1) | |
|
34 | lineSeries.axisX = valuesAxis2; | |
|
35 | else | |
|
36 | lineSeries.axisX = valuesAxis1; | |
|
37 | } | |
|
38 | } | |
|
39 | ||
|
40 | ValuesAxis { | |
|
41 | id: valuesAxis1 | |
|
42 | min: 0 | |
|
43 | max: 5 | |
|
44 | } | |
|
45 | ||
|
46 | ValuesAxis { | |
|
47 | id: valuesAxis2 | |
|
48 | min: 1 | |
|
49 | max: 6 | |
|
50 | } | |
|
51 | ||
|
52 | LineSeries { | |
|
53 | id: lineSeries | |
|
54 | name: "line series" | |
|
55 | axisX: valuesAxis1 | |
|
56 | XYPoint { x: 0; y: 0 } | |
|
57 | XYPoint { x: 1.1; y: 2.1 } | |
|
58 | XYPoint { x: 1.9; y: 3.3 } | |
|
59 | XYPoint { x: 2.1; y: 2.1 } | |
|
60 | XYPoint { x: 2.9; y: 4.9 } | |
|
61 | XYPoint { x: 3.4; y: 3.0 } | |
|
62 | XYPoint { x: 4.1; y: 3.3 } | |
|
63 | } | |
|
64 | } |
@@ -0,0 +1,43 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | id: chartView | |
|
26 | title: "axis scale; different series" | |
|
27 | ||
|
28 | LineSeries { | |
|
29 | name: "line series" | |
|
30 | XYPoint { x: 0; y: 0 } | |
|
31 | XYPoint { x: 1.1; y: 2.1 } | |
|
32 | XYPoint { x: 1.9; y: 3.3 } | |
|
33 | XYPoint { x: 2.1; y: 2.1 } | |
|
34 | } | |
|
35 | ||
|
36 | ScatterSeries { | |
|
37 | name: "scatter series" | |
|
38 | XYPoint { x: 2.1; y: 2.1 } | |
|
39 | XYPoint { x: 2.9; y: 4.9 } | |
|
40 | XYPoint { x: 3.4; y: 3.0 } | |
|
41 | XYPoint { x: 4.1; y: 3.3 } | |
|
42 | } | |
|
43 | } |
@@ -0,0 +1,56 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | id: chartView | |
|
26 | title: "Deprecated code" | |
|
27 | property int index: 0 | |
|
28 | ||
|
29 | Component.onCompleted: { | |
|
30 | // Calling createDefaultAxes in onCompleted is now deprecated. It needs to be tested, | |
|
31 | // though, because some application may still use it | |
|
32 | chartView.createDefaultAxes(); | |
|
33 | } | |
|
34 | ||
|
35 | LineSeries { | |
|
36 | name: "line series" | |
|
37 | XYPoint { x: 0; y: 0 } | |
|
38 | XYPoint { x: 1.1; y: 2.1 } | |
|
39 | XYPoint { x: 1.9; y: 3.3 } | |
|
40 | XYPoint { x: 2.1; y: 2.1 } | |
|
41 | XYPoint { x: 2.9; y: 4.9 } | |
|
42 | XYPoint { x: 3.4; y: 3.0 } | |
|
43 | XYPoint { x: 4.1; y: 3.3 } | |
|
44 | } | |
|
45 | ||
|
46 | ScatterSeries { | |
|
47 | name: "scatter series" | |
|
48 | XYPoint { x: 0; y: 0 } | |
|
49 | XYPoint { x: 1.1; y: 2.1 } | |
|
50 | XYPoint { x: 1.9; y: 3.3 } | |
|
51 | XYPoint { x: 2.1; y: 2.1 } | |
|
52 | XYPoint { x: 2.9; y: 4.9 } | |
|
53 | XYPoint { x: 3.4; y: 3.0 } | |
|
54 | XYPoint { x: 4.1; y: 3.3 } | |
|
55 | } | |
|
56 | } |
@@ -0,0 +1,56 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | import QtCommercial.Chart 1.0 | |
|
23 | ||
|
24 | ChartView { | |
|
25 | id: chartView | |
|
26 | title: "Deprecated code" | |
|
27 | property int index: 0 | |
|
28 | ||
|
29 | Component.onCompleted: { | |
|
30 | // Calling createDefaultAxes in onCompleted is now deprecated. It needs to be tested, | |
|
31 | // though, because some application may still use it | |
|
32 | chartView.createDefaultAxes(); | |
|
33 | } | |
|
34 | ||
|
35 | LineSeries { | |
|
36 | name: "line series" | |
|
37 | XYPoint { x: 0; y: 0 } | |
|
38 | XYPoint { x: 1.1; y: 2.1 } | |
|
39 | XYPoint { x: 1.9; y: 3.3 } | |
|
40 | XYPoint { x: 2.1; y: 2.1 } | |
|
41 | XYPoint { x: 2.9; y: 4.9 } | |
|
42 | XYPoint { x: 3.4; y: 3.0 } | |
|
43 | XYPoint { x: 4.1; y: 3.3 } | |
|
44 | } | |
|
45 | ||
|
46 | ScatterSeries { | |
|
47 | name: "scatter series" | |
|
48 | XYPoint { x: 0; y: 0 } | |
|
49 | XYPoint { x: 1.1; y: 2.1 } | |
|
50 | XYPoint { x: 1.9; y: 3.3 } | |
|
51 | XYPoint { x: 2.1; y: 2.1 } | |
|
52 | XYPoint { x: 2.9; y: 4.9 } | |
|
53 | XYPoint { x: 3.4; y: 3.0 } | |
|
54 | XYPoint { x: 4.1; y: 3.3 } | |
|
55 | } | |
|
56 | } |
@@ -0,0 +1,84 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | import QtQuick 1.0 | |
|
22 | ||
|
23 | Rectangle { | |
|
24 | id: main | |
|
25 | width: 400 | |
|
26 | height: 300 | |
|
27 | property int viewNumber: 0 | |
|
28 | ||
|
29 | Row { | |
|
30 | anchors.fill: parent | |
|
31 | anchors.topMargin: 10 | |
|
32 | ||
|
33 | Loader { | |
|
34 | id: chartLoader | |
|
35 | width: parent.width - buttonColumn.width | |
|
36 | height: parent.height | |
|
37 | source: "Chart" + viewNumber + ".qml" | |
|
38 | } | |
|
39 | ||
|
40 | Column { | |
|
41 | id: buttonColumn | |
|
42 | width: 150 | |
|
43 | height: parent.height | |
|
44 | spacing: 5 | |
|
45 | ||
|
46 | Button { | |
|
47 | text: "Default" | |
|
48 | onClicked: viewNumber = 0; | |
|
49 | } | |
|
50 | Button { | |
|
51 | text: "User defined" | |
|
52 | onClicked: viewNumber = 1; | |
|
53 | } | |
|
54 | Button { | |
|
55 | text: "Chart axes" | |
|
56 | onClicked: viewNumber = 2; | |
|
57 | } | |
|
58 | Button { | |
|
59 | text: "Configuring dynamically" | |
|
60 | onClicked: viewNumber = 3; | |
|
61 | } | |
|
62 | Button { | |
|
63 | text: "Series specific dynamic" | |
|
64 | onClicked: viewNumber = 4; | |
|
65 | } | |
|
66 | Button { | |
|
67 | text: "Creating dynamically" | |
|
68 | onClicked: viewNumber = 5; | |
|
69 | } | |
|
70 | Button { | |
|
71 | text: "Switching dynamically" | |
|
72 | onClicked: viewNumber = 6; | |
|
73 | } | |
|
74 | Button { | |
|
75 | text: "Axis scale" | |
|
76 | onClicked: viewNumber = 7; | |
|
77 | } | |
|
78 | Button { | |
|
79 | text: "Legacy" | |
|
80 | onClicked: viewNumber = 8; | |
|
81 | } | |
|
82 | } | |
|
83 | } | |
|
84 | } |
@@ -0,0 +1,200 | |||
|
1 | // checksum 0x78c version 0x60010 | |
|
2 | /* | |
|
3 | This file was generated by the Qt Quick Application wizard of Qt Creator. | |
|
4 | QmlApplicationViewer is a convenience class containing mobile device specific | |
|
5 | code such as screen orientation handling. Also QML paths and debugging are | |
|
6 | handled here. | |
|
7 | It is recommended not to modify this file, since newer versions of Qt Creator | |
|
8 | may offer an updated version of it. | |
|
9 | */ | |
|
10 | ||
|
11 | #include "qmlapplicationviewer.h" | |
|
12 | ||
|
13 | #include <QtCore/QDir> | |
|
14 | #include <QtCore/QFileInfo> | |
|
15 | #include <QtDeclarative/QDeclarativeComponent> | |
|
16 | #include <QtDeclarative/QDeclarativeEngine> | |
|
17 | #include <QtDeclarative/QDeclarativeContext> | |
|
18 | #include <QtGui/QApplication> | |
|
19 | ||
|
20 | #include <qplatformdefs.h> // MEEGO_EDITION_HARMATTAN | |
|
21 | ||
|
22 | #ifdef HARMATTAN_BOOSTER | |
|
23 | #include <MDeclarativeCache> | |
|
24 | #endif | |
|
25 | ||
|
26 | #if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 | |
|
27 | ||
|
28 | #include <qt_private/qdeclarativedebughelper_p.h> | |
|
29 | ||
|
30 | #if !defined(NO_JSDEBUGGER) | |
|
31 | #include <jsdebuggeragent.h> | |
|
32 | #endif | |
|
33 | #if !defined(NO_QMLOBSERVER) | |
|
34 | #include <qdeclarativeviewobserver.h> | |
|
35 | #endif | |
|
36 | ||
|
37 | // Enable debugging before any QDeclarativeEngine is created | |
|
38 | struct QmlJsDebuggingEnabler | |
|
39 | { | |
|
40 | QmlJsDebuggingEnabler() | |
|
41 | { | |
|
42 | QDeclarativeDebugHelper::enableDebugging(); | |
|
43 | } | |
|
44 | }; | |
|
45 | ||
|
46 | // Execute code in constructor before first QDeclarativeEngine is instantiated | |
|
47 | static QmlJsDebuggingEnabler enableDebuggingHelper; | |
|
48 | ||
|
49 | #endif // QMLJSDEBUGGER | |
|
50 | ||
|
51 | class QmlApplicationViewerPrivate | |
|
52 | { | |
|
53 | QmlApplicationViewerPrivate(QDeclarativeView *view_) : view(view_) {} | |
|
54 | ||
|
55 | QString mainQmlFile; | |
|
56 | QDeclarativeView *view; | |
|
57 | friend class QmlApplicationViewer; | |
|
58 | QString adjustPath(const QString &path); | |
|
59 | }; | |
|
60 | ||
|
61 | QString QmlApplicationViewerPrivate::adjustPath(const QString &path) | |
|
62 | { | |
|
63 | #ifdef Q_OS_UNIX | |
|
64 | #ifdef Q_OS_MAC | |
|
65 | if (!QDir::isAbsolutePath(path)) | |
|
66 | return QCoreApplication::applicationDirPath() | |
|
67 | + QLatin1String("/../Resources/") + path; | |
|
68 | #else | |
|
69 | QString pathInInstallDir; | |
|
70 | const QString applicationDirPath = QCoreApplication::applicationDirPath(); | |
|
71 | pathInInstallDir = QString::fromAscii("%1/../%2").arg(applicationDirPath, path); | |
|
72 | ||
|
73 | if (QFileInfo(pathInInstallDir).exists()) | |
|
74 | return pathInInstallDir; | |
|
75 | #endif | |
|
76 | #endif | |
|
77 | return path; | |
|
78 | } | |
|
79 | ||
|
80 | QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) | |
|
81 | : QDeclarativeView(parent) | |
|
82 | , d(new QmlApplicationViewerPrivate(this)) | |
|
83 | { | |
|
84 | connect(engine(), SIGNAL(quit()), SLOT(close())); | |
|
85 | setResizeMode(QDeclarativeView::SizeRootObjectToView); | |
|
86 | // Qt versions prior to 4.8.0 don't have QML/JS debugging services built in | |
|
87 | #if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 | |
|
88 | #if !defined(NO_JSDEBUGGER) | |
|
89 | new QmlJSDebugger::JSDebuggerAgent(d->view->engine()); | |
|
90 | #endif | |
|
91 | #if !defined(NO_QMLOBSERVER) | |
|
92 | new QmlJSDebugger::QDeclarativeViewObserver(d->view, d->view); | |
|
93 | #endif | |
|
94 | #endif | |
|
95 | } | |
|
96 | ||
|
97 | QmlApplicationViewer::QmlApplicationViewer(QDeclarativeView *view, QWidget *parent) | |
|
98 | : QDeclarativeView(parent) | |
|
99 | , d(new QmlApplicationViewerPrivate(view)) | |
|
100 | { | |
|
101 | connect(view->engine(), SIGNAL(quit()), view, SLOT(close())); | |
|
102 | view->setResizeMode(QDeclarativeView::SizeRootObjectToView); | |
|
103 | // Qt versions prior to 4.8.0 don't have QML/JS debugging services built in | |
|
104 | #if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 | |
|
105 | #if !defined(NO_JSDEBUGGER) | |
|
106 | new QmlJSDebugger::JSDebuggerAgent(d->view->engine()); | |
|
107 | #endif | |
|
108 | #if !defined(NO_QMLOBSERVER) | |
|
109 | new QmlJSDebugger::QDeclarativeViewObserver(d->view, d->view); | |
|
110 | #endif | |
|
111 | #endif | |
|
112 | } | |
|
113 | ||
|
114 | QmlApplicationViewer::~QmlApplicationViewer() | |
|
115 | { | |
|
116 | delete d; | |
|
117 | } | |
|
118 | ||
|
119 | QmlApplicationViewer *QmlApplicationViewer::create() | |
|
120 | { | |
|
121 | #ifdef HARMATTAN_BOOSTER | |
|
122 | return new QmlApplicationViewer(MDeclarativeCache::qDeclarativeView(), 0); | |
|
123 | #else | |
|
124 | return new QmlApplicationViewer(); | |
|
125 | #endif | |
|
126 | } | |
|
127 | ||
|
128 | void QmlApplicationViewer::setMainQmlFile(const QString &file) | |
|
129 | { | |
|
130 | d->mainQmlFile = d->adjustPath(file); | |
|
131 | d->view->setSource(QUrl::fromLocalFile(d->mainQmlFile)); | |
|
132 | } | |
|
133 | ||
|
134 | void QmlApplicationViewer::addImportPath(const QString &path) | |
|
135 | { | |
|
136 | d->view->engine()->addImportPath(d->adjustPath(path)); | |
|
137 | } | |
|
138 | ||
|
139 | void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) | |
|
140 | { | |
|
141 | #if defined(Q_OS_SYMBIAN) | |
|
142 | // If the version of Qt on the device is < 4.7.2, that attribute won't work | |
|
143 | if (orientation != ScreenOrientationAuto) { | |
|
144 | const QStringList v = QString::fromAscii(qVersion()).split(QLatin1Char('.')); | |
|
145 | if (v.count() == 3 && (v.at(0).toInt() << 16 | v.at(1).toInt() << 8 | v.at(2).toInt()) < 0x040702) { | |
|
146 | qWarning("Screen orientation locking only supported with Qt 4.7.2 and above"); | |
|
147 | return; | |
|
148 | } | |
|
149 | } | |
|
150 | #endif // Q_OS_SYMBIAN | |
|
151 | ||
|
152 | Qt::WidgetAttribute attribute; | |
|
153 | switch (orientation) { | |
|
154 | #if QT_VERSION < 0x040702 | |
|
155 | // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes | |
|
156 | case ScreenOrientationLockPortrait: | |
|
157 | attribute = static_cast<Qt::WidgetAttribute>(128); | |
|
158 | break; | |
|
159 | case ScreenOrientationLockLandscape: | |
|
160 | attribute = static_cast<Qt::WidgetAttribute>(129); | |
|
161 | break; | |
|
162 | default: | |
|
163 | case ScreenOrientationAuto: | |
|
164 | attribute = static_cast<Qt::WidgetAttribute>(130); | |
|
165 | break; | |
|
166 | #else // QT_VERSION < 0x040702 | |
|
167 | case ScreenOrientationLockPortrait: | |
|
168 | attribute = Qt::WA_LockPortraitOrientation; | |
|
169 | break; | |
|
170 | case ScreenOrientationLockLandscape: | |
|
171 | attribute = Qt::WA_LockLandscapeOrientation; | |
|
172 | break; | |
|
173 | default: | |
|
174 | case ScreenOrientationAuto: | |
|
175 | attribute = Qt::WA_AutoOrientation; | |
|
176 | break; | |
|
177 | #endif // QT_VERSION < 0x040702 | |
|
178 | }; | |
|
179 | setAttribute(attribute, true); | |
|
180 | } | |
|
181 | ||
|
182 | void QmlApplicationViewer::showExpanded() | |
|
183 | { | |
|
184 | #if defined(Q_OS_SYMBIAN) || defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR) | |
|
185 | d->view->showFullScreen(); | |
|
186 | #elif defined(Q_WS_MAEMO_5) | |
|
187 | d->view->showMaximized(); | |
|
188 | #else | |
|
189 | d->view->show(); | |
|
190 | #endif | |
|
191 | } | |
|
192 | ||
|
193 | QApplication *createApplication(int &argc, char **argv) | |
|
194 | { | |
|
195 | #ifdef HARMATTAN_BOOSTER | |
|
196 | return MDeclarativeCache::qApplication(argc, argv); | |
|
197 | #else | |
|
198 | return new QApplication(argc, argv); | |
|
199 | #endif | |
|
200 | } |
@@ -0,0 +1,47 | |||
|
1 | // checksum 0x82ed version 0x60010 | |
|
2 | /* | |
|
3 | This file was generated by the Qt Quick Application wizard of Qt Creator. | |
|
4 | QmlApplicationViewer is a convenience class containing mobile device specific | |
|
5 | code such as screen orientation handling. Also QML paths and debugging are | |
|
6 | handled here. | |
|
7 | It is recommended not to modify this file, since newer versions of Qt Creator | |
|
8 | may offer an updated version of it. | |
|
9 | */ | |
|
10 | ||
|
11 | #ifndef QMLAPPLICATIONVIEWER_H | |
|
12 | #define QMLAPPLICATIONVIEWER_H | |
|
13 | ||
|
14 | #include <QtDeclarative/QDeclarativeView> | |
|
15 | ||
|
16 | class QmlApplicationViewer : public QDeclarativeView | |
|
17 | { | |
|
18 | Q_OBJECT | |
|
19 | ||
|
20 | public: | |
|
21 | enum ScreenOrientation { | |
|
22 | ScreenOrientationLockPortrait, | |
|
23 | ScreenOrientationLockLandscape, | |
|
24 | ScreenOrientationAuto | |
|
25 | }; | |
|
26 | ||
|
27 | explicit QmlApplicationViewer(QWidget *parent = 0); | |
|
28 | virtual ~QmlApplicationViewer(); | |
|
29 | ||
|
30 | static QmlApplicationViewer *create(); | |
|
31 | ||
|
32 | void setMainQmlFile(const QString &file); | |
|
33 | void addImportPath(const QString &path); | |
|
34 | ||
|
35 | // Note that this will only have an effect on Symbian and Fremantle. | |
|
36 | void setOrientation(ScreenOrientation orientation); | |
|
37 | ||
|
38 | void showExpanded(); | |
|
39 | ||
|
40 | private: | |
|
41 | explicit QmlApplicationViewer(QDeclarativeView *view, QWidget *parent); | |
|
42 | class QmlApplicationViewerPrivate *d; | |
|
43 | }; | |
|
44 | ||
|
45 | QApplication *createApplication(int &argc, char **argv); | |
|
46 | ||
|
47 | #endif // QMLAPPLICATIONVIEWER_H |
@@ -0,0 +1,13 | |||
|
1 | QT += declarative | |
|
2 | ||
|
3 | SOURCES += $$PWD/qmlapplicationviewer.cpp | |
|
4 | HEADERS += $$PWD/qmlapplicationviewer.h | |
|
5 | INCLUDEPATH += $$PWD | |
|
6 | ||
|
7 | # Include JS debugger library if QMLJSDEBUGGER_PATH is set | |
|
8 | !isEmpty(QMLJSDEBUGGER_PATH) { | |
|
9 | include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) | |
|
10 | } else { | |
|
11 | DEFINES -= QMLJSDEBUGGER | |
|
12 | } | |
|
13 |
@@ -0,0 +1,8 | |||
|
1 | !include( ../tests.pri ) { | |
|
2 | error( "Couldn't find the test.pri file!" ) | |
|
3 | } | |
|
4 | ||
|
5 | RESOURCES += resources.qrc | |
|
6 | SOURCES += main.cpp | |
|
7 | ||
|
8 | include(qmlapplicationviewer/qmlapplicationviewer.pri) |
@@ -0,0 +1,15 | |||
|
1 | <RCC> | |
|
2 | <qresource prefix="/"> | |
|
3 | <file>qml/qmlchartaxis/main.qml</file> | |
|
4 | <file>qml/qmlchartaxis/Button.qml</file> | |
|
5 | <file>qml/qmlchartaxis/Chart0.qml</file> | |
|
6 | <file>qml/qmlchartaxis/Chart1.qml</file> | |
|
7 | <file>qml/qmlchartaxis/Chart2.qml</file> | |
|
8 | <file>qml/qmlchartaxis/Chart3.qml</file> | |
|
9 | <file>qml/qmlchartaxis/Chart4.qml</file> | |
|
10 | <file>qml/qmlchartaxis/Chart5.qml</file> | |
|
11 | <file>qml/qmlchartaxis/Chart6.qml</file> | |
|
12 | <file>qml/qmlchartaxis/Chart7.qml</file> | |
|
13 | <file>qml/qmlchartaxis/Chart8.qml</file> | |
|
14 | </qresource> | |
|
15 | </RCC> |
@@ -35,9 +35,6 Rectangle { | |||
|
35 | 35 | |
|
36 | 36 | PieSeries { |
|
37 | 37 | id: pieSeries |
|
38 | onClicked: { | |
|
39 | slice.exploded = !slice.exploded; | |
|
40 | } | |
|
41 | 38 | PieSlice { label: "Volkswagen"; value: 13.5 } |
|
42 | 39 | PieSlice { label: "Toyota"; value: 10.9 } |
|
43 | 40 | PieSlice { label: "Ford"; value: 8.6 } |
@@ -45,11 +42,11 Rectangle { | |||
|
45 | 42 | PieSlice { label: "Volvo"; value: 6.8 } |
|
46 | 43 | } |
|
47 | 44 | } |
|
48 | //![1] | |
|
49 | 45 |
|
|
50 | 46 | Component.onCompleted: { |
|
51 |
// You can also |
|
|
47 | // You can also manipulate slices dynamically | |
|
52 | 48 | otherSlice = pieSeries.append("Others", 52.0); |
|
53 | 49 | pieSeries.find("Volkswagen").exploded = true; |
|
54 | 50 | } |
|
51 | //![1] | |
|
55 | 52 | } |
@@ -29,20 +29,13 Rectangle { | |||
|
29 | 29 | title: "Horizontal Stacked Bar series" |
|
30 | 30 | anchors.fill: parent |
|
31 | 31 | legend.alignment: Qt.AlignBottom |
|
32 | BarCategoriesAxis { | |
|
33 | id: myAxis; | |
|
34 | categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] | |
|
35 | } | |
|
32 | ||
|
36 | 33 | HorizontalStackedBarSeries { |
|
37 | id: mySeries; | |
|
34 | axisY: BarCategoriesAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] } | |
|
38 | 35 | BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] } |
|
39 | 36 | BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] } |
|
40 | 37 | BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] } |
|
41 | 38 | } |
|
42 | Component.onCompleted: { | |
|
43 | createDefaultAxes(); | |
|
44 | setAxisY(myAxis,mySeries); | |
|
45 | } | |
|
46 | 39 | } |
|
47 | 40 | //![1] |
|
48 | 41 | } |
@@ -29,20 +29,13 Rectangle { | |||
|
29 | 29 | title: "Horizontal Percent Bar series" |
|
30 | 30 | anchors.fill: parent |
|
31 | 31 | legend.alignment: Qt.AlignBottom |
|
32 | BarCategoriesAxis { | |
|
33 | id: myAxis | |
|
34 | categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] | |
|
35 | } | |
|
32 | ||
|
36 | 33 | HorizontalPercentBarSeries { |
|
37 | id: mySeries | |
|
34 | axisY: BarCategoriesAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] } | |
|
38 | 35 | BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] } |
|
39 | 36 | BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] } |
|
40 | 37 | BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] } |
|
41 | 38 | } |
|
42 | Component.onCompleted: { | |
|
43 | createDefaultAxes(); | |
|
44 | setAxisY(myAxis,mySeries); | |
|
45 | } | |
|
46 | 39 | } |
|
47 | 40 | //![1] |
|
48 | 41 | } |
@@ -39,10 +39,6 Rectangle { | |||
|
39 | 39 | XYPoint { x: 3.4; y: 3.0 } |
|
40 | 40 | XYPoint { x: 4.1; y: 3.3 } |
|
41 | 41 | } |
|
42 | ||
|
43 | Component.onCompleted: { | |
|
44 | createDefaultAxes(); | |
|
45 | } | |
|
46 | 42 | } |
|
47 | 43 | //![1] |
|
48 | 44 | } |
@@ -31,7 +31,7 Rectangle { | |||
|
31 | 31 | |
|
32 | 32 | SplineSeries { |
|
33 | 33 | name: "SplineSeries" |
|
34 |
XYPoint { x: 0; y: 0. |
|
|
34 | XYPoint { x: 0; y: 0.0 } | |
|
35 | 35 | XYPoint { x: 1.1; y: 3.2 } |
|
36 | 36 | XYPoint { x: 1.9; y: 2.4 } |
|
37 | 37 | XYPoint { x: 2.1; y: 2.1 } |
@@ -39,10 +39,6 Rectangle { | |||
|
39 | 39 | XYPoint { x: 3.4; y: 2.3 } |
|
40 | 40 | XYPoint { x: 4.1; y: 3.1 } |
|
41 | 41 | } |
|
42 | ||
|
43 | Component.onCompleted: { | |
|
44 | createDefaultAxes(); | |
|
45 | } | |
|
46 | 42 | } |
|
47 | 43 | //![1] |
|
48 | 44 | } |
@@ -29,15 +29,15 Rectangle { | |||
|
29 | 29 | title: "NHL All-Star Team Players" |
|
30 | 30 | anchors.fill: parent |
|
31 | 31 | |
|
32 |
|
|
|
33 | //TODO: obsolate | |
|
34 | //axisX: CategoriesAxis { | |
|
35 | // id: categoriesAxis | |
|
36 | // categories: ["2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", | |
|
37 | // "2008", "2009", "2010", "2011" ] | |
|
38 | //} | |
|
32 | BarCategoriesAxis { | |
|
33 | id: catergoriesAxis | |
|
34 | categories: ["2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", | |
|
35 | "2009", "2010", "2011" ] | |
|
36 | } | |
|
39 | 37 |
|
|
38 | AreaSeries { | |
|
40 | 39 | name: "Russian" |
|
40 | axisX: catergoriesAxis | |
|
41 | 41 | upperSeries: LineSeries { |
|
42 | 42 | XYPoint { x: 0; y: 1 } |
|
43 | 43 | XYPoint { x: 1; y: 1 } |
@@ -52,27 +52,13 Rectangle { | |||
|
52 | 52 | XYPoint { x: 10; y: 2 } |
|
53 | 53 | XYPoint { x: 11; y: 1 } |
|
54 | 54 | } |
|
55 | lowerSeries: LineSeries { | |
|
56 | XYPoint { x: 0; y: 0 } | |
|
57 | XYPoint { x: 1; y: 0 } | |
|
58 | XYPoint { x: 2; y: 0 } | |
|
59 | XYPoint { x: 3; y: 0 } | |
|
60 | XYPoint { x: 4; y: 0 } | |
|
61 | XYPoint { x: 5; y: 0 } | |
|
62 | XYPoint { x: 6; y: 0 } | |
|
63 | XYPoint { x: 7; y: 0 } | |
|
64 | XYPoint { x: 8; y: 0 } | |
|
65 | XYPoint { x: 9; y: 0 } | |
|
66 | XYPoint { x: 10; y: 0 } | |
|
67 | XYPoint { x: 11; y: 0 } | |
|
68 | } | |
|
69 | 55 | } |
|
70 | 56 | // ... |
|
71 | 57 | //![1] |
|
72 | 58 | |
|
73 | 59 | AreaSeries { |
|
74 | id: swedish | |
|
75 | 60 | name: "Swedish" |
|
61 | axisX: catergoriesAxis | |
|
76 | 62 | upperSeries: LineSeries { |
|
77 | 63 | XYPoint { x: 0; y: 1 } |
|
78 | 64 | XYPoint { x: 1; y: 1 } |
@@ -87,28 +73,11 Rectangle { | |||
|
87 | 73 | XYPoint { x: 10; y: 3 } |
|
88 | 74 | XYPoint { x: 11; y: 3 } |
|
89 | 75 | } |
|
90 | lowerSeries: LineSeries { | |
|
91 | XYPoint { x: 0; y: 0 } | |
|
92 | XYPoint { x: 1; y: 0 } | |
|
93 | XYPoint { x: 2; y: 0 } | |
|
94 | XYPoint { x: 3; y: 0 } | |
|
95 | XYPoint { x: 4; y: 0 } | |
|
96 | XYPoint { x: 5; y: 0 } | |
|
97 | XYPoint { x: 6; y: 0 } | |
|
98 | XYPoint { x: 7; y: 0 } | |
|
99 | XYPoint { x: 8; y: 0 } | |
|
100 | XYPoint { x: 9; y: 0 } | |
|
101 | XYPoint { x: 10; y: 0 } | |
|
102 | XYPoint { x: 11; y: 0 } | |
|
103 | } | |
|
104 | onClicked: { | |
|
105 | color = "yellow"; | |
|
106 | borderColor = "blue"; | |
|
107 | } | |
|
108 | 76 | } |
|
109 | 77 | |
|
110 | 78 | AreaSeries { |
|
111 | 79 | name: "Finnish" |
|
80 | axisX: catergoriesAxis | |
|
112 | 81 | upperSeries: LineSeries { |
|
113 | 82 | XYPoint { x: 0; y: 0 } |
|
114 | 83 | XYPoint { x: 1; y: 0 } |
@@ -123,27 +92,10 Rectangle { | |||
|
123 | 92 | XYPoint { x: 10; y: 0 } |
|
124 | 93 | XYPoint { x: 11; y: 1 } |
|
125 | 94 | } |
|
126 | lowerSeries: LineSeries { | |
|
127 | XYPoint { x: 0; y: 0 } | |
|
128 | XYPoint { x: 1; y: 0 } | |
|
129 | XYPoint { x: 2; y: 0 } | |
|
130 | XYPoint { x: 3; y: 0 } | |
|
131 | XYPoint { x: 4; y: 0 } | |
|
132 | XYPoint { x: 5; y: 0 } | |
|
133 | XYPoint { x: 6; y: 0 } | |
|
134 | XYPoint { x: 7; y: 0 } | |
|
135 | XYPoint { x: 8; y: 0 } | |
|
136 | XYPoint { x: 9; y: 0 } | |
|
137 | XYPoint { x: 10; y: 0 } | |
|
138 | XYPoint { x: 11; y: 0 } | |
|
139 | } | |
|
140 | 95 | onClicked: { |
|
141 | 96 | color = "white"; |
|
142 | 97 | borderColor = "blue"; |
|
143 | 98 | } |
|
144 | 99 | } |
|
145 | Component.onCompleted: { | |
|
146 | createDefaultAxes(); | |
|
147 | } | |
|
148 | 100 | } |
|
149 | 101 | } |
@@ -51,13 +51,6 Rectangle { | |||
|
51 | 51 | XYPoint { x: 2.2; y: 2.9 } |
|
52 | 52 | XYPoint { x: 2.4; y: 2.7 } |
|
53 | 53 | XYPoint { x: 2.67; y: 2.65 } |
|
54 | //![2] | |
|
55 | 54 |
|
|
56 | ||
|
57 | Component.onCompleted: { | |
|
58 | createDefaultAxes(); | |
|
59 | } | |
|
60 | ||
|
61 | 55 | } |
|
62 | //![2] | |
|
63 | 56 | } |
@@ -29,20 +29,14 Rectangle { | |||
|
29 | 29 | title: "Bar series" |
|
30 | 30 | anchors.fill: parent |
|
31 | 31 | legend.alignment: Qt.AlignBottom |
|
32 | BarCategoriesAxis { | |
|
33 | id:myAxis | |
|
34 | categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] | |
|
35 | } | |
|
32 | ||
|
36 | 33 | BarSeries { |
|
37 |
id: mySeries |
|
|
34 | id: mySeries | |
|
35 | axisX: BarCategoriesAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] } | |
|
38 | 36 | BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] } |
|
39 | 37 | BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] } |
|
40 | 38 | BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] } |
|
41 | 39 | } |
|
42 | Component.onCompleted: { | |
|
43 | createDefaultAxes(); | |
|
44 | setAxisX(myAxis,mySeries); | |
|
45 | } | |
|
46 | 40 | } |
|
47 | 41 | //![1] |
|
48 | 42 | } |
@@ -29,20 +29,14 Rectangle { | |||
|
29 | 29 | title: "Stacked Bar series" |
|
30 | 30 | anchors.fill: parent |
|
31 | 31 | legend.alignment: Qt.AlignBottom |
|
32 | BarCategoriesAxis { | |
|
33 | id: myAxis; | |
|
34 | categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] | |
|
35 | } | |
|
32 | ||
|
36 | 33 | StackedBarSeries { |
|
37 |
id: mySeries |
|
|
34 | id: mySeries | |
|
35 | axisX: BarCategoriesAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] } | |
|
38 | 36 | BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] } |
|
39 | 37 | BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] } |
|
40 | 38 | BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] } |
|
41 | 39 | } |
|
42 | Component.onCompleted: { | |
|
43 | createDefaultAxes(); | |
|
44 | setAxisX(myAxis,mySeries); | |
|
45 | } | |
|
46 | 40 | } |
|
47 | 41 | //![1] |
|
48 | 42 | } |
@@ -29,21 +29,13 Rectangle { | |||
|
29 | 29 | title: "Percent Bar series" |
|
30 | 30 | anchors.fill: parent |
|
31 | 31 | legend.alignment: Qt.AlignBottom |
|
32 | BarCategoriesAxis { | |
|
33 | id: myAxis | |
|
34 | categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] | |
|
35 | } | |
|
32 | ||
|
36 | 33 | PercentBarSeries { |
|
37 | id: mySeries | |
|
34 | axisX: BarCategoriesAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] } | |
|
38 | 35 | BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] } |
|
39 | 36 | BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] } |
|
40 | 37 | BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] } |
|
41 | 38 | } |
|
42 | Component.onCompleted: { | |
|
43 | createDefaultAxes(); | |
|
44 | setAxisX(myAxis,mySeries); | |
|
45 | } | |
|
46 | 39 | } |
|
47 | 40 | //![1] |
|
48 | 41 | } |
|
49 |
@@ -29,20 +29,13 Rectangle { | |||
|
29 | 29 | title: "Horizontal Bar series" |
|
30 | 30 | anchors.fill: parent |
|
31 | 31 | legend.alignment: Qt.AlignBottom |
|
32 | BarCategoriesAxis { | |
|
33 | id: myAxis | |
|
34 | categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] | |
|
35 | } | |
|
32 | ||
|
36 | 33 | HorizontalBarSeries { |
|
37 | id: mySeries | |
|
34 | axisY: BarCategoriesAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] } | |
|
38 | 35 | BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] } |
|
39 | 36 | BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] } |
|
40 | 37 | BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] } |
|
41 | 38 | } |
|
42 | Component.onCompleted: { | |
|
43 | createDefaultAxes(); | |
|
44 | setAxisY(myAxis,mySeries); | |
|
45 | } | |
|
46 | 39 | } |
|
47 | 40 | //![1] |
|
48 | 41 | } |
@@ -27,7 +27,6 Rectangle { | |||
|
27 | 27 | property int __activeIndex: 1 |
|
28 | 28 | property real __intervalCoefficient: 0 |
|
29 | 29 | |
|
30 | ||
|
31 | 30 | //![1] |
|
32 | 31 | ChartView { |
|
33 | 32 | id: chartView |
@@ -62,7 +61,6 Rectangle { | |||
|
62 | 61 | interval = __intervalCoefficient * j * j; |
|
63 | 62 | splineSeries.append(j, interval); |
|
64 | 63 | } |
|
65 | chartView.createDefaultAxes() | |
|
66 | 64 | chartView.axisX(scatterSeries).max = j; |
|
67 | 65 | chartView.axisY(scatterSeries).max = 1000; |
|
68 | 66 | } |
@@ -33,12 +33,14 Rectangle { | |||
|
33 | 33 | animationOptions: ChartView.SeriesAnimations |
|
34 | 34 | |
|
35 | 35 | BarCategoriesAxis { |
|
36 |
id: categor |
|
|
36 | id: categoriesAxis | |
|
37 | 37 | categories: ["2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014" ] |
|
38 | min: "2007" | |
|
39 | max: "2014" | |
|
38 | 40 | } |
|
39 | 41 | |
|
40 | 42 | ValuesAxis { |
|
41 |
id: |
|
|
43 | id: valuesAxis | |
|
42 | 44 | min: 0 |
|
43 | 45 | max: 60 |
|
44 | 46 | } |
@@ -63,6 +65,8 Rectangle { | |||
|
63 | 65 | BarSeries { |
|
64 | 66 | id: myBarSeries |
|
65 | 67 | name: "Others" |
|
68 | axisX: categoriesAxis | |
|
69 | axisY: valuesAxis | |
|
66 | 70 | barWidth: 0.9 |
|
67 | 71 | visible: false |
|
68 | 72 | HBarModelMapper { |
@@ -78,6 +82,8 Rectangle { | |||
|
78 | 82 | LineSeries { |
|
79 | 83 | id: lineSeries1 |
|
80 | 84 | name: "Volkswagen" |
|
85 | axisX: categoriesAxis | |
|
86 | axisY: valuesAxis | |
|
81 | 87 | visible: false |
|
82 | 88 | HXYModelMapper { |
|
83 | 89 | model: customModel |
@@ -91,6 +97,8 Rectangle { | |||
|
91 | 97 | LineSeries { |
|
92 | 98 | id: lineSeries2 |
|
93 | 99 | name: "Toyota" |
|
100 | axisX: categoriesAxis | |
|
101 | axisY: valuesAxis | |
|
94 | 102 | visible: false |
|
95 | 103 | HXYModelMapper { |
|
96 | 104 | model: customModel |
@@ -103,6 +111,8 Rectangle { | |||
|
103 | 111 | LineSeries { |
|
104 | 112 | id: lineSeries3 |
|
105 | 113 | name: "Ford" |
|
114 | axisX: categoriesAxis | |
|
115 | axisY: valuesAxis | |
|
106 | 116 | visible: false |
|
107 | 117 | HXYModelMapper { |
|
108 | 118 | model: customModel |
@@ -115,6 +125,8 Rectangle { | |||
|
115 | 125 | LineSeries { |
|
116 | 126 | id: lineSeries4 |
|
117 | 127 | name: "Skoda" |
|
128 | axisX: categoriesAxis | |
|
129 | axisY: valuesAxis | |
|
118 | 130 | visible: false |
|
119 | 131 | HXYModelMapper { |
|
120 | 132 | model: customModel |
@@ -127,6 +139,8 Rectangle { | |||
|
127 | 139 | LineSeries { |
|
128 | 140 | id: lineSeries5 |
|
129 | 141 | name: "Volvo" |
|
142 | axisX: categoriesAxis | |
|
143 | axisY: valuesAxis | |
|
130 | 144 | visible: false |
|
131 | 145 | HXYModelMapper { |
|
132 | 146 | model: customModel |
@@ -162,23 +176,5 Rectangle { | |||
|
162 | 176 | } |
|
163 | 177 | } |
|
164 | 178 | //![3] |
|
165 | ||
|
166 | Component.onCompleted: { | |
|
167 | setAxisX(categoryAxis,myBarSeries) | |
|
168 | setAxisX(categoryAxis,lineSeries1) | |
|
169 | setAxisX(categoryAxis,lineSeries2) | |
|
170 | setAxisX(categoryAxis,lineSeries3) | |
|
171 | setAxisX(categoryAxis,lineSeries4) | |
|
172 | setAxisX(categoryAxis,lineSeries5) | |
|
173 | setAxisY(yAxis,myBarSeries) | |
|
174 | setAxisY(yAxis,lineSeries1) | |
|
175 | setAxisY(yAxis,lineSeries2) | |
|
176 | setAxisY(yAxis,lineSeries3) | |
|
177 | setAxisY(yAxis,lineSeries4) | |
|
178 | setAxisY(yAxis,lineSeries5) | |
|
179 | categoryAxis.min = "2007" | |
|
180 | categoryAxis.max = "2014" | |
|
181 | categoryAxis.visible = true; | |
|
182 | } | |
|
183 | 179 | } |
|
184 | 180 | } |
@@ -61,28 +61,26 Rectangle { | |||
|
61 | 61 | if (currentIndex < speedsXml.count) { |
|
62 | 62 | // Check if there is a series for the data already (we are using driver name to identify series) |
|
63 | 63 | var lineSeries = chartView.series(speedsXml.get(currentIndex).driver); |
|
64 | if (!lineSeries){ | |
|
64 | if (!lineSeries) { | |
|
65 | 65 | lineSeries = chartView.createSeries(ChartView.SeriesTypeLine, speedsXml.get(currentIndex).driver); |
|
66 |
chartView. |
|
|
67 |
chartView.axisY( |
|
|
68 | chartView.axisY(lineSeries).max = 250 | |
|
66 | chartView.axisY().min = 0; | |
|
67 | chartView.axisY().max = 250 | |
|
69 | 68 | } |
|
70 | ||
|
71 | 69 | lineSeries.append(currentIndex, speedsXml.get(currentIndex).speed); |
|
72 | 70 | |
|
73 | 71 | // Make the x-axis range dynamic |
|
74 | 72 | if (currentIndex > 9) |
|
75 |
chartView.axisX( |
|
|
73 | chartView.axisX().min = currentIndex - 10; | |
|
76 | 74 | else |
|
77 |
chartView.axisX( |
|
|
75 | chartView.axisX().min = 0; | |
|
78 | 76 | |
|
79 |
chartView.axisX( |
|
|
77 | chartView.axisX().max = currentIndex + 1; | |
|
80 | 78 | } else { |
|
81 | 79 | // No more data, change x-axis range to show all the data |
|
82 | 80 | timer.stop(); |
|
83 | 81 | chartView.animationOptions = ChartView.AllAnimations; |
|
84 |
chartView.axisX( |
|
|
85 |
chartView.axisX( |
|
|
82 | chartView.axisX().min = 0; | |
|
83 | chartView.axisX().max = currentIndex + 1; | |
|
86 | 84 | } |
|
87 | 85 | } |
|
88 | 86 | } |
@@ -40,17 +40,14 ChartView { | |||
|
40 | 40 | LineSeries { |
|
41 | 41 | id: lineSeries1 |
|
42 | 42 | name: "signal 1" |
|
43 | axisX: axisX | |
|
44 | axisY: axisY | |
|
43 | 45 | } |
|
44 | 46 | LineSeries { |
|
45 | 47 | id: lineSeries2 |
|
46 | 48 | name: "signal 2" |
|
47 | } | |
|
48 | ||
|
49 | Component.onCompleted: { | |
|
50 | chartView.setAxisX(axisX, lineSeries1); | |
|
51 | chartView.setAxisY(axisY, lineSeries1); | |
|
52 | chartView.setAxisX(axisX, lineSeries2); | |
|
53 | chartView.setAxisY(axisY, lineSeries2); | |
|
49 | axisX: axisX | |
|
50 | axisY: axisY | |
|
54 | 51 | } |
|
55 | 52 | |
|
56 | 53 | Timer { |
@@ -79,8 +76,8 ChartView { | |||
|
79 | 76 | series.markerSize = 3; |
|
80 | 77 | series.borderColor = "transparent"; |
|
81 | 78 | } |
|
82 |
|
|
|
83 |
|
|
|
79 | // chartView.setAxisX(axisX, series); | |
|
80 | // chartView.setAxisY(axisY, series); | |
|
84 | 81 | } |
|
85 | 82 | } |
|
86 | 83 | |
@@ -92,7 +89,6 ChartView { | |||
|
92 | 89 | } |
|
93 | 90 | |
|
94 | 91 | function changeRefreshRate(rate) { |
|
95 | console.log("rate " + rate); | |
|
96 | 92 | refreshTimer.interval = 1 / Number(rate) * 1000; |
|
97 | 93 | } |
|
98 | 94 | } |
@@ -38,43 +38,45 Rectangle { | |||
|
38 | 38 | |
|
39 | 39 | //![2] |
|
40 | 40 | BarCategoriesAxis { |
|
41 |
|
|
|
42 | categories: ["Mo", "Tu", "We", "Th", "Fr"] | |
|
41 | id: barCategoriesAxis | |
|
43 | 42 | } |
|
44 | 43 | |
|
45 | 44 | BarSeries { |
|
46 | 45 | id: myBarSeries |
|
46 | axisX: barCategoriesAxis | |
|
47 | axisY: valuesAxisY | |
|
47 | 48 | BarSet { |
|
48 | 49 | id: rainfallSet |
|
49 | 50 | label: "Rainfall" |
|
50 | 51 | } |
|
51 | 52 | } |
|
52 | 53 | |
|
54 | ValuesAxis { | |
|
55 | id: valuesAxisX | |
|
56 | min: 0 | |
|
57 | max: 5 | |
|
58 | } | |
|
59 | ||
|
53 | 60 | ValuesAxis{ |
|
54 |
id: |
|
|
61 | id: valuesAxisY | |
|
55 | 62 | min: 0 |
|
56 | 63 | max: 10 |
|
57 | 64 | } |
|
58 | 65 | |
|
59 | 66 | LineSeries { |
|
60 | 67 | id: maxTempSeries |
|
68 | axisX: valuesAxisX | |
|
69 | axisY: valuesAxisY | |
|
61 | 70 | name: "Max. temperature" |
|
62 | 71 | } |
|
63 | 72 | |
|
64 | 73 | LineSeries { |
|
65 | 74 | id: minTempSeries |
|
75 | axisX: valuesAxisX | |
|
76 | axisY: valuesAxisY | |
|
66 | 77 | name: "Min. temperature" |
|
67 | 78 | } |
|
68 | 79 | //![2] |
|
69 | ||
|
70 | Component.onCompleted: { | |
|
71 | setAxisX(myBarCategoryAxis,myBarSeries) | |
|
72 | setAxisX(myBarCategoryAxis,maxTempSeries) | |
|
73 | setAxisX(myBarCategoryAxis,minTempSeries) | |
|
74 | setAxisY(myValuesAxisY,maxTempSeries) | |
|
75 | setAxisY(myValuesAxisY,minTempSeries) | |
|
76 | setAxisY(myValuesAxisY,myBarSeries) | |
|
77 | } | |
|
78 | 80 | } |
|
79 | 81 | |
|
80 | 82 | // A timer to refresh the forecast every 5 minutes |
@@ -100,7 +102,7 Rectangle { | |||
|
100 | 102 | xhr.send(); |
|
101 | 103 | //![3] |
|
102 | 104 | } else { |
|
103 | // No app key for worldweatheronline.com given by the user -> use static data | |
|
105 | // No app key for worldweatheronline.com given by the user -> use dummy static data | |
|
104 | 106 | var responseText = "{ \"data\": { \"current_condition\": [ {\"cloudcover\": \"10\", \"humidity\": \"61\", \"observation_time\": \"06:26 AM\", \"precipMM\": \"0.0\", \"pressure\": \"1022\", \"temp_C\": \"6\", \"temp_F\": \"43\", \"visibility\": \"10\", \"weatherCode\": \"113\", \"weatherDesc\": [ {\"value\": \"Sunny\" } ], \"weatherIconUrl\": [ {\"value\": \"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png\" } ], \"winddir16Point\": \"SE\", \"winddirDegree\": \"140\", \"windspeedKmph\": \"7\", \"windspeedMiles\": \"4\" } ], \"request\": [ {\"query\": \"Jyvaskyla, Finland\", \"type\": \"City\" } ], \"weather\": [ {\"date\": \"2012-05-09\", \"precipMM\": \"0.4\", \"tempMaxC\": \"14\", \"tempMaxF\": \"57\", \"tempMinC\": \"7\", \"tempMinF\": \"45\", \"weatherCode\": \"116\", \"weatherDesc\": [ {\"value\": \"Partly Cloudy\" } ], \"weatherIconUrl\": [ {\"value\": \"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0002_sunny_intervals.png\" } ], \"winddir16Point\": \"S\", \"winddirDegree\": \"179\", \"winddirection\": \"S\", \"windspeedKmph\": \"20\", \"windspeedMiles\": \"12\" }, {\"date\": \"2012-05-10\", \"precipMM\": \"2.4\", \"tempMaxC\": \"13\", \"tempMaxF\": \"55\", \"tempMinC\": \"8\", \"tempMinF\": \"46\", \"weatherCode\": \"266\", \"weatherDesc\": [ {\"value\": \"Light drizzle\" } ], \"weatherIconUrl\": [ {\"value\": \"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0017_cloudy_with_light_rain.png\" } ], \"winddir16Point\": \"SW\", \"winddirDegree\": \"219\", \"winddirection\": \"SW\", \"windspeedKmph\": \"21\", \"windspeedMiles\": \"13\" }, {\"date\": \"2012-05-11\", \"precipMM\": \"11.1\", \"tempMaxC\": \"15\", \"tempMaxF\": \"59\", \"tempMinC\": \"7\", \"tempMinF\": \"44\", \"weatherCode\": \"266\", \"weatherDesc\": [ {\"value\": \"Light drizzle\" } ], \"weatherIconUrl\": [ {\"value\": \"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0017_cloudy_with_light_rain.png\" } ], \"winddir16Point\": \"SSW\", \"winddirDegree\": \"200\", \"winddirection\": \"SSW\", \"windspeedKmph\": \"20\", \"windspeedMiles\": \"12\" }, {\"date\": \"2012-05-12\", \"precipMM\": \"2.8\", \"tempMaxC\": \"7\", \"tempMaxF\": \"44\", \"tempMinC\": \"2\", \"tempMinF\": \"35\", \"weatherCode\": \"317\", \"weatherDesc\": [ {\"value\": \"Light sleet\" } ], \"weatherIconUrl\": [ {\"value\": \"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0021_cloudy_with_sleet.png\" } ], \"winddir16Point\": \"NW\", \"winddirDegree\": \"311\", \"winddirection\": \"NW\", \"windspeedKmph\": \"24\", \"windspeedMiles\": \"15\" }, {\"date\": \"2012-05-13\", \"precipMM\": \"0.4\", \"tempMaxC\": \"6\", \"tempMaxF\": \"42\", \"tempMinC\": \"2\", \"tempMinF\": \"35\", \"weatherCode\": \"116\", \"weatherDesc\": [ {\"value\": \"Partly Cloudy\" } ], \"weatherIconUrl\": [ {\"value\": \"http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0002_sunny_intervals.png\" } ], \"winddir16Point\": \"WNW\", \"winddirDegree\": \"281\", \"winddirection\": \"WNW\", \"windspeedKmph\": \"21\", \"windspeedMiles\": \"13\" } ] }}"; |
|
105 | 107 | var a = JSON.parse(responseText); |
|
106 | 108 | parseWeatherData(a); |
@@ -156,26 +158,25 Rectangle { | |||
|
156 | 158 | |
|
157 | 159 | //![5] |
|
158 | 160 | // Store temperature values, rainfall and weather icon |
|
159 | maxTempSeries.append(i, weatherObj.tempMaxC); | |
|
160 | minTempSeries.append(i, weatherObj.tempMinC); | |
|
161 | maxTempSeries.append(Number(i) + 0.5, weatherObj.tempMaxC); | |
|
162 | minTempSeries.append(Number(i) + 0.5, weatherObj.tempMinC); | |
|
161 | 163 | rainfallSet.append(i, weatherObj.precipMM); |
|
162 | 164 | weatherImageModel.append({"imageSource":weatherObj.weatherIconUrl[0].value}); |
|
163 | 165 | //![5] |
|
164 | 166 | |
|
165 | 167 | // Update scale of the chart |
|
166 |
|
|
|
167 | chartView.axisY().max = Math.max(chartView.axisY().max,weatherObj.tempMinC) | |
|
168 | chartView.axisX().min = 0; | |
|
169 | chartView.axisX().max = i+1; | |
|
168 | valuesAxisY.max = Math.max(chartView.axisY().max,weatherObj.tempMaxC); | |
|
169 | valuesAxisX.min = 0; | |
|
170 | valuesAxisX.max = Number(i) + 1; | |
|
170 | 171 | |
|
171 | 172 | // Set the x-axis labels to the dates of the forecast |
|
172 |
var xLabels = |
|
|
173 | var xLabels = barCategoriesAxis.categories; | |
|
173 | 174 | xLabels[Number(i)] = weatherObj.date.substring(5, 10); |
|
174 |
|
|
|
175 |
|
|
|
175 | barCategoriesAxis.categories = xLabels; | |
|
176 | barCategoriesAxis.visible = true; | |
|
177 | barCategoriesAxis.min = 0; | |
|
178 | barCategoriesAxis.max = xLabels.length - 1; | |
|
176 | 179 | } |
|
177 | ||
|
178 | ||
|
179 | 180 | } |
|
180 | 181 | |
|
181 | 182 | } |
@@ -4,6 +4,7 QT += declarative | |||
|
4 | 4 | !include( ../plugins.pri ) { |
|
5 | 5 | error( "Couldn't find the plugins.pri file!" ) |
|
6 | 6 | } |
|
7 | INCLUDEPATH += $$CHART_BUILD_PRIVATE_HEADER_DIR | |
|
7 | 8 | |
|
8 | 9 | contains(QT_MAJOR_VERSION, 5) { |
|
9 | 10 | # TODO: QtQuick2 not supported by the implementation currently |
@@ -23,11 +23,12 | |||
|
23 | 23 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
24 | 24 | |
|
25 | 25 | DeclarativeAreaSeries::DeclarativeAreaSeries(QObject *parent) : |
|
26 | QAreaSeries(parent) | |
|
26 | QAreaSeries(parent), | |
|
27 | m_axisX(0), | |
|
28 | m_axisY(0) | |
|
27 | 29 | { |
|
28 | 30 | } |
|
29 | 31 | |
|
30 | ||
|
31 | 32 | void DeclarativeAreaSeries::setUpperSeries(DeclarativeLineSeries* series) |
|
32 | 33 | { |
|
33 | 34 | QAreaSeries::setUpperSeries(series); |
@@ -31,6 +31,8 class DeclarativeAreaSeries : public QAreaSeries | |||
|
31 | 31 | Q_OBJECT |
|
32 | 32 | Q_PROPERTY(DeclarativeLineSeries *upperSeries READ upperSeries WRITE setUpperSeries) |
|
33 | 33 | Q_PROPERTY(DeclarativeLineSeries *lowerSeries READ lowerSeries WRITE setLowerSeries) |
|
34 | Q_PROPERTY(QAbstractAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) | |
|
35 | Q_PROPERTY(QAbstractAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) | |
|
34 | 36 | |
|
35 | 37 | public: |
|
36 | 38 | explicit DeclarativeAreaSeries(QObject *parent = 0); |
@@ -38,6 +40,18 public: | |||
|
38 | 40 | DeclarativeLineSeries* upperSeries() const; |
|
39 | 41 | void setLowerSeries(DeclarativeLineSeries* series); |
|
40 | 42 | DeclarativeLineSeries* lowerSeries() const; |
|
43 | QAbstractAxis *axisX() { return m_axisX; } | |
|
44 | void setAxisX(QAbstractAxis *axis) { m_axisX = axis; emit axisXChanged(axis); } | |
|
45 | QAbstractAxis *axisY() { return m_axisY; } | |
|
46 | void setAxisY(QAbstractAxis *axis) { m_axisY = axis; emit axisYChanged(axis); } | |
|
47 | ||
|
48 | Q_SIGNALS: | |
|
49 | void axisXChanged(QAbstractAxis *axis); | |
|
50 | void axisYChanged(QAbstractAxis *axis); | |
|
51 | ||
|
52 | private: | |
|
53 | QAbstractAxis *m_axisX; | |
|
54 | QAbstractAxis *m_axisY; | |
|
41 | 55 | }; |
|
42 | 56 | |
|
43 | 57 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -60,7 +60,9 void DeclarativeBarSet::setValues(QVariantList values) | |||
|
60 | 60 | |
|
61 | 61 | // Declarative bar series ====================================================================================== |
|
62 | 62 | DeclarativeBarSeries::DeclarativeBarSeries(QDeclarativeItem *parent) : |
|
63 | QBarSeries(parent) | |
|
63 | QBarSeries(parent), | |
|
64 | m_axisX(0), | |
|
65 | m_axisY(0) | |
|
64 | 66 | { |
|
65 | 67 | } |
|
66 | 68 | |
@@ -117,7 +119,9 DeclarativeBarSet *DeclarativeBarSeries::insert(int index, QString label, QVaria | |||
|
117 | 119 | |
|
118 | 120 | // Declarative stacked bar series ============================================================================== |
|
119 | 121 | DeclarativeStackedBarSeries::DeclarativeStackedBarSeries(QDeclarativeItem *parent) : |
|
120 | QStackedBarSeries(parent) | |
|
122 | QStackedBarSeries(parent), | |
|
123 | m_axisX(0), | |
|
124 | m_axisY(0) | |
|
121 | 125 | { |
|
122 | 126 | } |
|
123 | 127 | |
@@ -175,7 +179,9 DeclarativeBarSet *DeclarativeStackedBarSeries::insert(int index, QString label, | |||
|
175 | 179 | |
|
176 | 180 | // Declarative percent bar series ============================================================================== |
|
177 | 181 | DeclarativePercentBarSeries::DeclarativePercentBarSeries(QDeclarativeItem *parent) : |
|
178 | QPercentBarSeries(parent) | |
|
182 | QPercentBarSeries(parent), | |
|
183 | m_axisX(0), | |
|
184 | m_axisY(0) | |
|
179 | 185 | { |
|
180 | 186 | } |
|
181 | 187 | |
@@ -232,7 +238,9 DeclarativeBarSet *DeclarativePercentBarSeries::insert(int index, QString label, | |||
|
232 | 238 | |
|
233 | 239 | // Declarative horizontal bar series =========================================================================== |
|
234 | 240 | DeclarativeHorizontalBarSeries::DeclarativeHorizontalBarSeries(QDeclarativeItem *parent) : |
|
235 | QHorizontalBarSeries(parent) | |
|
241 | QHorizontalBarSeries(parent), | |
|
242 | m_axisX(0), | |
|
243 | m_axisY(0) | |
|
236 | 244 | { |
|
237 | 245 | } |
|
238 | 246 | |
@@ -289,7 +297,9 DeclarativeBarSet *DeclarativeHorizontalBarSeries::insert(int index, QString lab | |||
|
289 | 297 | |
|
290 | 298 | // Declarative horizontal stacked bar series =================================================================== |
|
291 | 299 | DeclarativeHorizontalStackedBarSeries::DeclarativeHorizontalStackedBarSeries(QDeclarativeItem *parent) : |
|
292 | QHorizontalStackedBarSeries(parent) | |
|
300 | QHorizontalStackedBarSeries(parent), | |
|
301 | m_axisX(0), | |
|
302 | m_axisY(0) | |
|
293 | 303 | { |
|
294 | 304 | } |
|
295 | 305 | |
@@ -346,7 +356,9 DeclarativeBarSet *DeclarativeHorizontalStackedBarSeries::insert(int index, QStr | |||
|
346 | 356 | |
|
347 | 357 | // Declarative horizontal percent bar series =================================================================== |
|
348 | 358 | DeclarativeHorizontalPercentBarSeries::DeclarativeHorizontalPercentBarSeries(QDeclarativeItem *parent) : |
|
349 | QHorizontalPercentBarSeries(parent) | |
|
359 | QHorizontalPercentBarSeries(parent), | |
|
360 | m_axisX(0), | |
|
361 | m_axisY(0) | |
|
350 | 362 | { |
|
351 | 363 | } |
|
352 | 364 |
@@ -63,12 +63,20 class DeclarativeBarSeries : public QBarSeries, public QDeclarativeParserStatus | |||
|
63 | 63 | { |
|
64 | 64 | Q_OBJECT |
|
65 | 65 | Q_INTERFACES(QDeclarativeParserStatus) |
|
66 | Q_PROPERTY(QAbstractAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) | |
|
67 | Q_PROPERTY(QAbstractAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) | |
|
66 | 68 | Q_PROPERTY(QDeclarativeListProperty<QObject> seriesChildren READ seriesChildren) |
|
67 | 69 | Q_CLASSINFO("DefaultProperty", "seriesChildren") |
|
68 | 70 | |
|
69 | 71 | public: |
|
70 | 72 | explicit DeclarativeBarSeries(QDeclarativeItem *parent = 0); |
|
73 | QAbstractAxis *axisX() { return m_axisX; } | |
|
74 | void setAxisX(QAbstractAxis *axis) { m_axisX = axis; emit axisXChanged(axis); } | |
|
75 | QAbstractAxis *axisY() { return m_axisY; } | |
|
76 | void setAxisY(QAbstractAxis *axis) { m_axisY = axis; emit axisYChanged(axis); } | |
|
71 | 77 | QDeclarativeListProperty<QObject> seriesChildren(); |
|
78 | ||
|
79 | public: | |
|
72 | 80 | Q_INVOKABLE DeclarativeBarSet *at(int index); |
|
73 | 81 | Q_INVOKABLE DeclarativeBarSet *append(QString label, QVariantList values) { return insert(count(), label, values); } |
|
74 | 82 | Q_INVOKABLE DeclarativeBarSet *insert(int index, QString label, QVariantList values); |
@@ -79,6 +87,10 public: // from QDeclarativeParserStatus | |||
|
79 | 87 | void classBegin(); |
|
80 | 88 | void componentComplete(); |
|
81 | 89 | |
|
90 | Q_SIGNALS: | |
|
91 | void axisXChanged(QAbstractAxis *axis); | |
|
92 | void axisYChanged(QAbstractAxis *axis); | |
|
93 | ||
|
82 | 94 | public Q_SLOTS: |
|
83 | 95 | static void appendSeriesChildren(QDeclarativeListProperty<QObject> *list, QObject *element); |
|
84 | 96 | |
@@ -91,12 +103,20 class DeclarativeStackedBarSeries : public QStackedBarSeries, public QDeclarativ | |||
|
91 | 103 | { |
|
92 | 104 | Q_OBJECT |
|
93 | 105 | Q_INTERFACES(QDeclarativeParserStatus) |
|
106 | Q_PROPERTY(QAbstractAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) | |
|
107 | Q_PROPERTY(QAbstractAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) | |
|
94 | 108 | Q_PROPERTY(QDeclarativeListProperty<QObject> seriesChildren READ seriesChildren) |
|
95 | 109 | Q_CLASSINFO("DefaultProperty", "seriesChildren") |
|
96 | 110 | |
|
97 | 111 | public: |
|
98 | 112 | explicit DeclarativeStackedBarSeries(QDeclarativeItem *parent = 0); |
|
113 | QAbstractAxis *axisX() { return m_axisX; } | |
|
114 | void setAxisX(QAbstractAxis *axis) { m_axisX = axis; emit axisXChanged(axis); } | |
|
115 | QAbstractAxis *axisY() { return m_axisY; } | |
|
116 | void setAxisY(QAbstractAxis *axis) { m_axisY = axis; emit axisYChanged(axis); } | |
|
99 | 117 | QDeclarativeListProperty<QObject> seriesChildren(); |
|
118 | ||
|
119 | public: | |
|
100 | 120 | Q_INVOKABLE DeclarativeBarSet *at(int index); |
|
101 | 121 | Q_INVOKABLE DeclarativeBarSet *append(QString label, QVariantList values) { return insert(count(), label, values); } |
|
102 | 122 | Q_INVOKABLE DeclarativeBarSet *insert(int index, QString label, QVariantList values); |
@@ -107,21 +127,36 public: // from QDeclarativeParserStatus | |||
|
107 | 127 | void classBegin(); |
|
108 | 128 | void componentComplete(); |
|
109 | 129 | |
|
130 | Q_SIGNALS: | |
|
131 | void axisXChanged(QAbstractAxis *axis); | |
|
132 | void axisYChanged(QAbstractAxis *axis); | |
|
133 | ||
|
110 | 134 | public Q_SLOTS: |
|
111 | 135 | static void appendSeriesChildren(QDeclarativeListProperty<QObject> *list, QObject *element); |
|
112 | 136 | |
|
137 | private: | |
|
138 | QAbstractAxis* m_axisX; | |
|
139 | QAbstractAxis* m_axisY; | |
|
113 | 140 | }; |
|
114 | 141 | |
|
115 | 142 | class DeclarativePercentBarSeries : public QPercentBarSeries, public QDeclarativeParserStatus |
|
116 | 143 | { |
|
117 | 144 | Q_OBJECT |
|
118 | 145 | Q_INTERFACES(QDeclarativeParserStatus) |
|
146 | Q_PROPERTY(QAbstractAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) | |
|
147 | Q_PROPERTY(QAbstractAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) | |
|
119 | 148 | Q_PROPERTY(QDeclarativeListProperty<QObject> seriesChildren READ seriesChildren) |
|
120 | 149 | Q_CLASSINFO("DefaultProperty", "seriesChildren") |
|
121 | 150 | |
|
122 | 151 | public: |
|
123 | 152 | explicit DeclarativePercentBarSeries(QDeclarativeItem *parent = 0); |
|
153 | QAbstractAxis *axisX() { return m_axisX; } | |
|
154 | void setAxisX(QAbstractAxis *axis) { m_axisX = axis; emit axisXChanged(axis); } | |
|
155 | QAbstractAxis *axisY() { return m_axisY; } | |
|
156 | void setAxisY(QAbstractAxis *axis) { m_axisY = axis; emit axisYChanged(axis); } | |
|
124 | 157 | QDeclarativeListProperty<QObject> seriesChildren(); |
|
158 | ||
|
159 | public: | |
|
125 | 160 | Q_INVOKABLE DeclarativeBarSet *at(int index); |
|
126 | 161 | Q_INVOKABLE DeclarativeBarSet *append(QString label, QVariantList values) { return insert(count(), label, values); } |
|
127 | 162 | Q_INVOKABLE DeclarativeBarSet *insert(int index, QString label, QVariantList values); |
@@ -132,20 +167,36 public: // from QDeclarativeParserStatus | |||
|
132 | 167 | void classBegin(); |
|
133 | 168 | void componentComplete(); |
|
134 | 169 | |
|
170 | Q_SIGNALS: | |
|
171 | void axisXChanged(QAbstractAxis *axis); | |
|
172 | void axisYChanged(QAbstractAxis *axis); | |
|
173 | ||
|
135 | 174 | public Q_SLOTS: |
|
136 | 175 | static void appendSeriesChildren(QDeclarativeListProperty<QObject> *list, QObject *element); |
|
176 | ||
|
177 | private: | |
|
178 | QAbstractAxis* m_axisX; | |
|
179 | QAbstractAxis* m_axisY; | |
|
137 | 180 | }; |
|
138 | 181 | |
|
139 | 182 | class DeclarativeHorizontalBarSeries : public QHorizontalBarSeries, public QDeclarativeParserStatus |
|
140 | 183 | { |
|
141 | 184 | Q_OBJECT |
|
142 | 185 | Q_INTERFACES(QDeclarativeParserStatus) |
|
186 | Q_PROPERTY(QAbstractAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) | |
|
187 | Q_PROPERTY(QAbstractAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) | |
|
143 | 188 | Q_PROPERTY(QDeclarativeListProperty<QObject> seriesChildren READ seriesChildren) |
|
144 | 189 | Q_CLASSINFO("DefaultProperty", "seriesChildren") |
|
145 | 190 | |
|
146 | 191 | public: |
|
147 | 192 | explicit DeclarativeHorizontalBarSeries(QDeclarativeItem *parent = 0); |
|
193 | QAbstractAxis *axisX() { return m_axisX; } | |
|
194 | void setAxisX(QAbstractAxis *axis) { m_axisX = axis; emit axisXChanged(axis); } | |
|
195 | QAbstractAxis *axisY() { return m_axisY; } | |
|
196 | void setAxisY(QAbstractAxis *axis) { m_axisY = axis; emit axisYChanged(axis); } | |
|
148 | 197 | QDeclarativeListProperty<QObject> seriesChildren(); |
|
198 | ||
|
199 | public: | |
|
149 | 200 | Q_INVOKABLE DeclarativeBarSet *at(int index); |
|
150 | 201 | Q_INVOKABLE DeclarativeBarSet *append(QString label, QVariantList values) { return insert(count(), label, values); } |
|
151 | 202 | Q_INVOKABLE DeclarativeBarSet *insert(int index, QString label, QVariantList values); |
@@ -156,20 +207,36 public: // from QDeclarativeParserStatus | |||
|
156 | 207 | void classBegin(); |
|
157 | 208 | void componentComplete(); |
|
158 | 209 | |
|
210 | Q_SIGNALS: | |
|
211 | void axisXChanged(QAbstractAxis *axis); | |
|
212 | void axisYChanged(QAbstractAxis *axis); | |
|
213 | ||
|
159 | 214 | public Q_SLOTS: |
|
160 | 215 | static void appendSeriesChildren(QDeclarativeListProperty<QObject> *list, QObject *element); |
|
216 | ||
|
217 | private: | |
|
218 | QAbstractAxis* m_axisX; | |
|
219 | QAbstractAxis* m_axisY; | |
|
161 | 220 | }; |
|
162 | 221 | |
|
163 | 222 | class DeclarativeHorizontalStackedBarSeries : public QHorizontalStackedBarSeries, public QDeclarativeParserStatus |
|
164 | 223 | { |
|
165 | 224 | Q_OBJECT |
|
166 | 225 | Q_INTERFACES(QDeclarativeParserStatus) |
|
226 | Q_PROPERTY(QAbstractAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) | |
|
227 | Q_PROPERTY(QAbstractAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) | |
|
167 | 228 | Q_PROPERTY(QDeclarativeListProperty<QObject> seriesChildren READ seriesChildren) |
|
168 | 229 | Q_CLASSINFO("DefaultProperty", "seriesChildren") |
|
169 | 230 | |
|
170 | 231 | public: |
|
171 | 232 | explicit DeclarativeHorizontalStackedBarSeries(QDeclarativeItem *parent = 0); |
|
233 | QAbstractAxis *axisX() { return m_axisX; } | |
|
234 | void setAxisX(QAbstractAxis *axis) { m_axisX = axis; emit axisXChanged(axis); } | |
|
235 | QAbstractAxis *axisY() { return m_axisY; } | |
|
236 | void setAxisY(QAbstractAxis *axis) { m_axisY = axis; emit axisYChanged(axis); } | |
|
172 | 237 | QDeclarativeListProperty<QObject> seriesChildren(); |
|
238 | ||
|
239 | public: | |
|
173 | 240 | Q_INVOKABLE DeclarativeBarSet *at(int index); |
|
174 | 241 | Q_INVOKABLE DeclarativeBarSet *append(QString label, QVariantList values) { return insert(count(), label, values); } |
|
175 | 242 | Q_INVOKABLE DeclarativeBarSet *insert(int index, QString label, QVariantList values); |
@@ -180,20 +247,36 public: // from QDeclarativeParserStatus | |||
|
180 | 247 | void classBegin(); |
|
181 | 248 | void componentComplete(); |
|
182 | 249 | |
|
250 | Q_SIGNALS: | |
|
251 | void axisXChanged(QAbstractAxis *axis); | |
|
252 | void axisYChanged(QAbstractAxis *axis); | |
|
253 | ||
|
183 | 254 | public Q_SLOTS: |
|
184 | 255 | static void appendSeriesChildren(QDeclarativeListProperty<QObject> *list, QObject *element); |
|
256 | ||
|
257 | private: | |
|
258 | QAbstractAxis* m_axisX; | |
|
259 | QAbstractAxis* m_axisY; | |
|
185 | 260 | }; |
|
186 | 261 | |
|
187 | 262 | class DeclarativeHorizontalPercentBarSeries : public QHorizontalPercentBarSeries, public QDeclarativeParserStatus |
|
188 | 263 | { |
|
189 | 264 | Q_OBJECT |
|
190 | 265 | Q_INTERFACES(QDeclarativeParserStatus) |
|
266 | Q_PROPERTY(QAbstractAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) | |
|
267 | Q_PROPERTY(QAbstractAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) | |
|
191 | 268 | Q_PROPERTY(QDeclarativeListProperty<QObject> seriesChildren READ seriesChildren) |
|
192 | 269 | Q_CLASSINFO("DefaultProperty", "seriesChildren") |
|
193 | 270 | |
|
194 | 271 | public: |
|
195 | 272 | explicit DeclarativeHorizontalPercentBarSeries(QDeclarativeItem *parent = 0); |
|
273 | QAbstractAxis *axisX() { return m_axisX; } | |
|
274 | void setAxisX(QAbstractAxis *axis) { m_axisX = axis; emit axisXChanged(axis); } | |
|
275 | QAbstractAxis *axisY() { return m_axisY; } | |
|
276 | void setAxisY(QAbstractAxis *axis) { m_axisY = axis; emit axisYChanged(axis); } | |
|
196 | 277 | QDeclarativeListProperty<QObject> seriesChildren(); |
|
278 | ||
|
279 | public: | |
|
197 | 280 | Q_INVOKABLE DeclarativeBarSet *at(int index); |
|
198 | 281 | Q_INVOKABLE DeclarativeBarSet *append(QString label, QVariantList values) { return insert(count(), label, values); } |
|
199 | 282 | Q_INVOKABLE DeclarativeBarSet *insert(int index, QString label, QVariantList values); |
@@ -204,8 +287,16 public: // from QDeclarativeParserStatus | |||
|
204 | 287 | void classBegin(); |
|
205 | 288 | void componentComplete(); |
|
206 | 289 | |
|
290 | Q_SIGNALS: | |
|
291 | void axisXChanged(QAbstractAxis *axis); | |
|
292 | void axisYChanged(QAbstractAxis *axis); | |
|
293 | ||
|
207 | 294 | public Q_SLOTS: |
|
208 | 295 | static void appendSeriesChildren(QDeclarativeListProperty<QObject> *list, QObject *element); |
|
296 | ||
|
297 | private: | |
|
298 | QAbstractAxis* m_axisX; | |
|
299 | QAbstractAxis* m_axisY; | |
|
209 | 300 | }; |
|
210 | 301 | |
|
211 | 302 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -20,6 +20,7 | |||
|
20 | 20 | |
|
21 | 21 | #include "declarativechart.h" |
|
22 | 22 | #include <QPainter> |
|
23 | #include <QDeclarativeEngine> | |
|
23 | 24 | #include "declarativelineseries.h" |
|
24 | 25 | #include "declarativeareaseries.h" |
|
25 | 26 | #include "declarativebarseries.h" |
@@ -27,6 +28,10 | |||
|
27 | 28 | #include "declarativesplineseries.h" |
|
28 | 29 | #include "declarativescatterseries.h" |
|
29 | 30 | #include "qbarcategoryaxis.h" |
|
31 | #include "qvalueaxis.h" | |
|
32 | #include "qdatetimeaxis.h" | |
|
33 | #include "qintervalsaxis.h" | |
|
34 | #include "qabstractseries_p.h" | |
|
30 | 35 | |
|
31 | 36 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
32 | 37 | |
@@ -165,25 +170,25 QTCOMMERCIALCHART_BEGIN_NAMESPACE | |||
|
165 | 170 | /*! |
|
166 | 171 | \qmlmethod ChartView::scrollLeft(real pixels) |
|
167 | 172 | Scrolls to left by \a pixels. This is a convenience function that suits for example for key navigation. |
|
168 |
\sa Value |
|
|
173 | \sa ValueAxis::min, ValueAxis::max, BarCategoriesAxis::min, BarCategoriesAxis::max | |
|
169 | 174 | */ |
|
170 | 175 | |
|
171 | 176 | /*! |
|
172 | 177 | \qmlmethod ChartView::scrollRight(real pixels) |
|
173 | 178 | Scrolls to right by \a pixels. This is a convenience function that suits for example for key navigation. |
|
174 |
\sa Value |
|
|
179 | \sa ValueAxis::min, ValueAxis::max, BarCategoriesAxis::min, BarCategoriesAxis::max | |
|
175 | 180 | */ |
|
176 | 181 | |
|
177 | 182 | /*! |
|
178 | 183 | \qmlmethod ChartView::scrollUp(real pixels) |
|
179 | 184 | Scrolls up by \a pixels. This is a convenience function that suits for example for key navigation. |
|
180 |
\sa Value |
|
|
185 | \sa ValueAxis::min, ValueAxis::max, BarCategoriesAxis::min, BarCategoriesAxis::max | |
|
181 | 186 | */ |
|
182 | 187 | |
|
183 | 188 | /*! |
|
184 | 189 | \qmlmethod ChartView::scrollDown(real pixels) |
|
185 | 190 | Scrolls down by \a pixels. This is a convenience function that suits for example for key navigation. |
|
186 |
\sa Value |
|
|
191 | \sa ValueAxis::min, ValueAxis::max, BarCategoriesAxis::min, BarCategoriesAxis::max | |
|
187 | 192 | */ |
|
188 | 193 | |
|
189 | 194 | /*! |
@@ -252,16 +257,96 void DeclarativeChart::componentComplete() | |||
|
252 | 257 | { |
|
253 | 258 | foreach(QObject *child, children()) { |
|
254 | 259 | if (qobject_cast<QAbstractSeries *>(child)) { |
|
255 | // qDebug() << "DeclarativeChart::componentComplete(), add: " << child; | |
|
256 | // TODO: how about optional y-axis? | |
|
257 | 260 | m_chart->addSeries(qobject_cast<QAbstractSeries *>(child)); |
|
258 |
|
|
|
259 | ||
|
261 | if (qobject_cast<DeclarativeLineSeries *>(child)) { | |
|
262 | DeclarativeLineSeries *s = qobject_cast<DeclarativeLineSeries *>(child); | |
|
263 | connect(s, SIGNAL(axisXChanged(QAbstractAxis *)), this, SLOT(handleAxisXSet(QAbstractAxis *))); | |
|
264 | connect(s, SIGNAL(axisYChanged(QAbstractAxis *)), this, SLOT(handleAxisYSet(QAbstractAxis *))); | |
|
265 | setAxisX(s->axisX(), s); | |
|
266 | setAxisY(s->axisY(), s); | |
|
267 | } else if (qobject_cast<DeclarativeSplineSeries *>(child)) { | |
|
268 | DeclarativeSplineSeries *s = qobject_cast<DeclarativeSplineSeries *>(child); | |
|
269 | connect(s, SIGNAL(axisXChanged(QAbstractAxis *)), this, SLOT(handleAxisXSet(QAbstractAxis *))); | |
|
270 | connect(s, SIGNAL(axisYChanged(QAbstractAxis *)), this, SLOT(handleAxisYSet(QAbstractAxis *))); | |
|
271 | setAxisX(s->axisX(), s); | |
|
272 | setAxisY(s->axisY(), s); | |
|
273 | } else if (qobject_cast<DeclarativeScatterSeries *>(child)) { | |
|
274 | DeclarativeScatterSeries *s = qobject_cast<DeclarativeScatterSeries *>(child); | |
|
275 | connect(s, SIGNAL(axisXChanged(QAbstractAxis *)), this, SLOT(handleAxisXSet(QAbstractAxis *))); | |
|
276 | connect(s, SIGNAL(axisYChanged(QAbstractAxis *)), this, SLOT(handleAxisYSet(QAbstractAxis *))); | |
|
277 | setAxisX(s->axisX(), s); | |
|
278 | setAxisY(s->axisY(), s); | |
|
279 | } else if (qobject_cast<DeclarativeAreaSeries *>(child)) { | |
|
280 | DeclarativeAreaSeries *s = qobject_cast<DeclarativeAreaSeries *>(child); | |
|
281 | connect(s, SIGNAL(axisXChanged(QAbstractAxis *)), this, SLOT(handleAxisXSet(QAbstractAxis *))); | |
|
282 | connect(s, SIGNAL(axisYChanged(QAbstractAxis *)), this, SLOT(handleAxisYSet(QAbstractAxis *))); | |
|
283 | setAxisX(s->axisX(), s); | |
|
284 | setAxisY(s->axisY(), s); | |
|
285 | } else if (qobject_cast<DeclarativeBarSeries *>(child)) { | |
|
286 | DeclarativeBarSeries *s = qobject_cast<DeclarativeBarSeries *>(child); | |
|
287 | connect(s, SIGNAL(axisXChanged(QAbstractAxis *)), this, SLOT(handleAxisXSet(QAbstractAxis *))); | |
|
288 | connect(s, SIGNAL(axisYChanged(QAbstractAxis *)), this, SLOT(handleAxisYSet(QAbstractAxis *))); | |
|
289 | setAxisX(s->axisX(), s); | |
|
290 | setAxisY(s->axisY(), s); | |
|
291 | } else if (qobject_cast<DeclarativeStackedBarSeries *>(child)) { | |
|
292 | DeclarativeStackedBarSeries *s = qobject_cast<DeclarativeStackedBarSeries *>(child); | |
|
293 | connect(s, SIGNAL(axisXChanged(QAbstractAxis *)), this, SLOT(handleAxisXSet(QAbstractAxis *))); | |
|
294 | connect(s, SIGNAL(axisYChanged(QAbstractAxis *)), this, SLOT(handleAxisYSet(QAbstractAxis *))); | |
|
295 | setAxisX(s->axisX(), s); | |
|
296 | setAxisY(s->axisY(), s); | |
|
297 | } else if (qobject_cast<DeclarativePercentBarSeries *>(child)) { | |
|
298 | DeclarativePercentBarSeries *s = qobject_cast<DeclarativePercentBarSeries *>(child); | |
|
299 | connect(s, SIGNAL(axisXChanged(QAbstractAxis *)), this, SLOT(handleAxisXSet(QAbstractAxis *))); | |
|
300 | connect(s, SIGNAL(axisYChanged(QAbstractAxis *)), this, SLOT(handleAxisYSet(QAbstractAxis *))); | |
|
301 | setAxisX(s->axisX(), s); | |
|
302 | setAxisY(s->axisY(), s); | |
|
303 | } else if (qobject_cast<DeclarativeHorizontalBarSeries *>(child)) { | |
|
304 | DeclarativeHorizontalBarSeries *s = qobject_cast<DeclarativeHorizontalBarSeries *>(child); | |
|
305 | connect(s, SIGNAL(axisXChanged(QAbstractAxis *)), this, SLOT(handleAxisXSet(QAbstractAxis *))); | |
|
306 | connect(s, SIGNAL(axisYChanged(QAbstractAxis *)), this, SLOT(handleAxisYSet(QAbstractAxis *))); | |
|
307 | setAxisX(s->axisX(), s); | |
|
308 | setAxisY(s->axisY(), s); | |
|
309 | } else if (qobject_cast<DeclarativeHorizontalStackedBarSeries *>(child)) { | |
|
310 | DeclarativeHorizontalStackedBarSeries *s = qobject_cast<DeclarativeHorizontalStackedBarSeries *>(child); | |
|
311 | connect(s, SIGNAL(axisXChanged(QAbstractAxis *)), this, SLOT(handleAxisXSet(QAbstractAxis *))); | |
|
312 | connect(s, SIGNAL(axisYChanged(QAbstractAxis *)), this, SLOT(handleAxisYSet(QAbstractAxis *))); | |
|
313 | setAxisX(s->axisX(), s); | |
|
314 | setAxisY(s->axisY(), s); | |
|
315 | } else if (qobject_cast<DeclarativeHorizontalPercentBarSeries *>(child)) { | |
|
316 | DeclarativeHorizontalPercentBarSeries *s = qobject_cast<DeclarativeHorizontalPercentBarSeries *>(child); | |
|
317 | connect(s, SIGNAL(axisXChanged(QAbstractAxis *)), this, SLOT(handleAxisXSet(QAbstractAxis *))); | |
|
318 | connect(s, SIGNAL(axisYChanged(QAbstractAxis *)), this, SLOT(handleAxisYSet(QAbstractAxis *))); | |
|
319 | setAxisX(s->axisX(), s); | |
|
320 | setAxisY(s->axisY(), s); | |
|
321 | } | |
|
322 | } else if(qobject_cast<QAbstractAxis *>(child)) { | |
|
323 | // Do nothing, axes are set for the chart in the context of series | |
|
260 | 324 | } |
|
261 | 325 | } |
|
326 | ||
|
327 | // Create the missing axes for the series that cannot be painted without axes | |
|
328 | foreach(QAbstractSeries *series, m_chart->series()) | |
|
329 | createDefaultAxes(series); | |
|
330 | ||
|
262 | 331 | QDeclarativeItem::componentComplete(); |
|
263 | 332 | } |
|
264 | 333 | |
|
334 | void DeclarativeChart::handleAxisXSet(QAbstractAxis* axis) | |
|
335 | { | |
|
336 | // qDebug() << "DeclarativeChart::handleAxisXSet" << sender() << axis; | |
|
337 | if (axis && qobject_cast<DeclarativeLineSeries *>(sender())) { | |
|
338 | m_chart->setAxisX(axis, qobject_cast<DeclarativeLineSeries *>(sender())); | |
|
339 | } | |
|
340 | } | |
|
341 | ||
|
342 | void DeclarativeChart::handleAxisYSet(QAbstractAxis* axis) | |
|
343 | { | |
|
344 | // qDebug() << "DeclarativeChart::handleAxisYSet" << sender() << axis; | |
|
345 | if (axis && qobject_cast<DeclarativeLineSeries *>(sender())) { | |
|
346 | m_chart->setAxisY(axis, qobject_cast<DeclarativeLineSeries *>(sender())); | |
|
347 | } | |
|
348 | } | |
|
349 | ||
|
265 | 350 | void DeclarativeChart::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) |
|
266 | 351 | { |
|
267 | 352 | // qDebug() << "DeclarativeChart::geometryChanged" << newGeometry.width() << newGeometry.height(); |
@@ -462,6 +547,7 QAbstractSeries *DeclarativeChart::series(QString seriesName) | |||
|
462 | 547 | QAbstractSeries *DeclarativeChart::createSeries(DeclarativeChart::SeriesType type, QString name) |
|
463 | 548 | { |
|
464 | 549 | QAbstractSeries *series = 0; |
|
550 | ||
|
465 | 551 | switch (type) { |
|
466 | 552 | case DeclarativeChart::SeriesTypeLine: |
|
467 | 553 | series = new DeclarativeLineSeries(); |
@@ -499,24 +585,90 QAbstractSeries *DeclarativeChart::createSeries(DeclarativeChart::SeriesType typ | |||
|
499 | 585 | default: |
|
500 | 586 | qWarning() << "Illegal series type"; |
|
501 | 587 | } |
|
502 | series->setName(name); | |
|
503 | m_chart->addSeries(series); | |
|
588 | ||
|
589 | if (series) { | |
|
590 | series->setName(name); | |
|
591 | m_chart->addSeries(series); | |
|
592 | createDefaultAxes(series); | |
|
593 | } | |
|
594 | ||
|
504 | 595 | return series; |
|
505 | 596 | } |
|
506 | 597 | |
|
507 |
void DeclarativeChart::setAxisX(QAbstractAxis* |
|
|
598 | void DeclarativeChart::setAxisX(QAbstractAxis *axis, QAbstractSeries *series) | |
|
508 | 599 | { |
|
509 | m_chart->setAxisX(axis,series); | |
|
600 | if (axis) | |
|
601 | m_chart->setAxisX(axis, series); | |
|
510 | 602 | } |
|
511 | 603 | |
|
512 |
void DeclarativeChart::setAxisY(QAbstractAxis* |
|
|
604 | void DeclarativeChart::setAxisY(QAbstractAxis *axis, QAbstractSeries *series) | |
|
513 | 605 | { |
|
514 | m_chart->setAxisY(axis,series); | |
|
606 | if (axis) | |
|
607 | m_chart->setAxisY(axis, series); | |
|
515 | 608 | } |
|
516 | 609 | |
|
517 | 610 | void DeclarativeChart::createDefaultAxes() |
|
518 | 611 | { |
|
519 | m_chart->createDefaultAxes(); | |
|
612 | qWarning() << "ChartView.createDefaultAxes() is deprecated. Axes are created automatically."; | |
|
613 | } | |
|
614 | ||
|
615 | void DeclarativeChart::createDefaultAxes(QAbstractSeries* series) | |
|
616 | { | |
|
617 | foreach (QAbstractSeries *s, m_chart->series()) { | |
|
618 | // If there is already an x axis of the correct type, re-use it | |
|
619 | if (!m_chart->axisX(series) && s != series && m_chart->axisX(s) | |
|
620 | && m_chart->axisX(s)->type() == series->d_ptr->defaultAxisType(Qt::Horizontal)) | |
|
621 | m_chart->setAxisX(m_chart->axisX(s), series); | |
|
622 | ||
|
623 | // If there is already a y axis of the correct type, re-use it | |
|
624 | if (!m_chart->axisY(series) && s != series && m_chart->axisY(s) | |
|
625 | && m_chart->axisY(s)->type() == series->d_ptr->defaultAxisType(Qt::Vertical)) | |
|
626 | m_chart->setAxisY(m_chart->axisY(s), series); | |
|
627 | } | |
|
628 | ||
|
629 | // If no x axis of correct type was found, create a new x axis based of default axis type | |
|
630 | if (!m_chart->axisX(series)) { | |
|
631 | switch (series->d_ptr->defaultAxisType(Qt::Horizontal)) { | |
|
632 | case QAbstractAxis::AxisTypeValues: | |
|
633 | m_chart->setAxisX(new QValueAxis(this), series); | |
|
634 | break; | |
|
635 | case QAbstractAxis::AxisTypeCategories: | |
|
636 | m_chart->setAxisX(new QBarCategoryAxis(this), series); | |
|
637 | break; | |
|
638 | case QAbstractAxis::AxisTypeIntervals: | |
|
639 | m_chart->setAxisX(new QIntervalsAxis(this), series); | |
|
640 | break; | |
|
641 | case QAbstractAxis::AxisTypeDateTime: | |
|
642 | m_chart->setAxisX(new QDateTimeAxis(this), series); | |
|
643 | break; | |
|
644 | default: | |
|
645 | // Do nothing, assume AxisTypeNoAxis | |
|
646 | break; | |
|
647 | } | |
|
648 | } | |
|
649 | ||
|
650 | // If no y axis of correct type was found, create a new y axis based of default axis type | |
|
651 | if (!m_chart->axisY(series)) { | |
|
652 | switch (series->d_ptr->defaultAxisType(Qt::Vertical)) { | |
|
653 | case QAbstractAxis::AxisTypeValues: | |
|
654 | m_chart->setAxisY(new QValueAxis(this), series); | |
|
655 | break; | |
|
656 | case QAbstractAxis::AxisTypeCategories: | |
|
657 | m_chart->setAxisY(new QBarCategoryAxis(this), series); | |
|
658 | break; | |
|
659 | case QAbstractAxis::AxisTypeIntervals: | |
|
660 | m_chart->setAxisY(new QIntervalsAxis(this), series); | |
|
661 | break; | |
|
662 | case QAbstractAxis::AxisTypeDateTime: | |
|
663 | m_chart->setAxisY(new QDateTimeAxis(this), series); | |
|
664 | break; | |
|
665 | default: | |
|
666 | // Do nothing, assume AxisTypeNoAxis | |
|
667 | break; | |
|
668 | } | |
|
669 | } | |
|
670 | ||
|
671 | //qDebug() << "axis for series" << series << "x:" << m_chart->axisX(series) << "y:" << m_chart->axisY(series); | |
|
520 | 672 | } |
|
521 | 673 | |
|
522 | 674 | #include "moc_declarativechart.cpp" |
@@ -27,7 +27,6 | |||
|
27 | 27 | |
|
28 | 28 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
29 | 29 | |
|
30 | // TODO: Derive from QChart for easier definition of properties? | |
|
31 | 30 | class DeclarativeChart : public QDeclarativeItem |
|
32 | 31 | // TODO: for QTQUICK2: extend QQuickPainterItem instead |
|
33 | 32 | //class DeclarativeChart : public QQuickPaintedItem, public Chart |
@@ -49,6 +48,7 class DeclarativeChart : public QDeclarativeItem | |||
|
49 | 48 | Q_ENUMS(Animation) |
|
50 | 49 | Q_ENUMS(Theme) |
|
51 | 50 | Q_ENUMS(SeriesType) |
|
51 | // Q_ENUMS(AxisType) | |
|
52 | 52 | |
|
53 | 53 | public: |
|
54 | 54 | // duplicating enums from QChart to make the QML api namings 1-to-1 with the C++ api |
@@ -114,15 +114,14 public: | |||
|
114 | 114 | qreal bottomMargin(); |
|
115 | 115 | qreal leftMargin(); |
|
116 | 116 | qreal rightMargin(); |
|
117 | ||
|
118 | ||
|
117 | void createDefaultAxes(QAbstractSeries* series); | |
|
119 | 118 | |
|
120 | 119 | public: |
|
121 | 120 | Q_INVOKABLE QAbstractSeries *series(int index); |
|
122 | 121 | Q_INVOKABLE QAbstractSeries *series(QString seriesName); |
|
123 | 122 | Q_INVOKABLE QAbstractSeries *createSeries(DeclarativeChart::SeriesType type, QString name = ""); |
|
124 |
Q_INVOKABLE void setAxisX(QAbstractAxis* |
|
|
125 |
Q_INVOKABLE void setAxisY(QAbstractAxis* |
|
|
123 | Q_INVOKABLE void setAxisX(QAbstractAxis *axis, QAbstractSeries *series = 0); | |
|
124 | Q_INVOKABLE void setAxisY(QAbstractAxis *axis, QAbstractSeries *series = 0); | |
|
126 | 125 | Q_INVOKABLE void createDefaultAxes(); |
|
127 | 126 | Q_INVOKABLE QAbstractAxis *axisX(QAbstractSeries *series = 0); |
|
128 | 127 | Q_INVOKABLE QAbstractAxis *axisY(QAbstractSeries *series = 0); |
@@ -145,6 +144,8 Q_SIGNALS: | |||
|
145 | 144 | |
|
146 | 145 | public Q_SLOTS: |
|
147 | 146 | void handleMarginsChanged(QRectF newMargins); |
|
147 | void handleAxisXSet(QAbstractAxis *axis); | |
|
148 | void handleAxisYSet(QAbstractAxis *axis); | |
|
148 | 149 | |
|
149 | 150 | private: |
|
150 | 151 | // Extending QChart with DeclarativeChart is not possible because QObject does not support |
@@ -23,17 +23,14 | |||
|
23 | 23 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
24 | 24 | |
|
25 | 25 | DeclarativeLineSeries::DeclarativeLineSeries(QObject *parent) : |
|
26 | QLineSeries(parent) | |
|
26 | QLineSeries(parent), | |
|
27 | m_axisX(0), | |
|
28 | m_axisY(0) | |
|
27 | 29 | { |
|
28 | 30 | connect(this, SIGNAL(pointAdded(int)), this, SLOT(handleCountChanged(int))); |
|
29 | 31 | connect(this, SIGNAL(pointRemoved(int)), this, SLOT(handleCountChanged(int))); |
|
30 | 32 | } |
|
31 | 33 | |
|
32 | QXYSeries *DeclarativeLineSeries::xySeries() | |
|
33 | { | |
|
34 | return this; | |
|
35 | } | |
|
36 | ||
|
37 | 34 | void DeclarativeLineSeries::handleCountChanged(int index) |
|
38 | 35 | { |
|
39 | 36 | Q_UNUSED(index) |
@@ -33,12 +33,18 class DeclarativeLineSeries : public QLineSeries, public DeclarativeXySeries, pu | |||
|
33 | 33 | Q_OBJECT |
|
34 | 34 | Q_INTERFACES(QDeclarativeParserStatus) |
|
35 | 35 | Q_PROPERTY(int count READ count NOTIFY countChanged) |
|
36 | Q_PROPERTY(QAbstractAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) | |
|
37 | Q_PROPERTY(QAbstractAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) | |
|
36 | 38 | Q_PROPERTY(QDeclarativeListProperty<QObject> declarativeChildren READ declarativeChildren) |
|
37 | 39 | Q_CLASSINFO("DefaultProperty", "declarativeChildren") |
|
38 | 40 | |
|
39 | 41 | public: |
|
40 | 42 | explicit DeclarativeLineSeries(QObject *parent = 0); |
|
41 | QXYSeries *xySeries(); | |
|
43 | QXYSeries *xySeries() { return this; } | |
|
44 | QAbstractAxis *axisX() { return m_axisX; } | |
|
45 | void setAxisX(QAbstractAxis *axis) { m_axisX = axis; emit axisXChanged(axis); } | |
|
46 | QAbstractAxis *axisY() { return m_axisY; } | |
|
47 | void setAxisY(QAbstractAxis *axis) { m_axisY = axis; emit axisYChanged(axis); } | |
|
42 | 48 | QDeclarativeListProperty<QObject> declarativeChildren(); |
|
43 | 49 | |
|
44 | 50 | public: // from QDeclarativeParserStatus |
@@ -55,10 +61,16 public: | |||
|
55 | 61 | |
|
56 | 62 | Q_SIGNALS: |
|
57 | 63 | void countChanged(int count); |
|
64 | void axisXChanged(QAbstractAxis *axis); | |
|
65 | void axisYChanged(QAbstractAxis *axis); | |
|
58 | 66 | |
|
59 | 67 | public Q_SLOTS: |
|
60 | 68 | static void appendDeclarativeChildren(QDeclarativeListProperty<QObject> *list, QObject *element); |
|
61 | 69 | void handleCountChanged(int index); |
|
70 | ||
|
71 | private: | |
|
72 | QAbstractAxis *m_axisX; | |
|
73 | QAbstractAxis *m_axisY; | |
|
62 | 74 | }; |
|
63 | 75 | |
|
64 | 76 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -23,17 +23,14 | |||
|
23 | 23 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
24 | 24 | |
|
25 | 25 | DeclarativeScatterSeries::DeclarativeScatterSeries(QObject *parent) : |
|
26 | QScatterSeries(parent) | |
|
26 | QScatterSeries(parent), | |
|
27 | m_axisX(0), | |
|
28 | m_axisY(0) | |
|
27 | 29 | { |
|
28 | 30 | connect(this, SIGNAL(pointAdded(int)), this, SLOT(handleCountChanged(int))); |
|
29 | 31 | connect(this, SIGNAL(pointRemoved(int)), this, SLOT(handleCountChanged(int))); |
|
30 | 32 | } |
|
31 | 33 | |
|
32 | QXYSeries *DeclarativeScatterSeries::xySeries() | |
|
33 | { | |
|
34 | return this; | |
|
35 | } | |
|
36 | ||
|
37 | 34 | void DeclarativeScatterSeries::handleCountChanged(int index) |
|
38 | 35 | { |
|
39 | 36 | Q_UNUSED(index) |
@@ -33,12 +33,18 class DeclarativeScatterSeries : public QScatterSeries, public DeclarativeXySeri | |||
|
33 | 33 | Q_OBJECT |
|
34 | 34 | Q_INTERFACES(QDeclarativeParserStatus) |
|
35 | 35 | Q_PROPERTY(int count READ count NOTIFY countChanged) |
|
36 | Q_PROPERTY(QAbstractAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) | |
|
37 | Q_PROPERTY(QAbstractAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) | |
|
36 | 38 | Q_PROPERTY(QDeclarativeListProperty<QObject> declarativeChildren READ declarativeChildren) |
|
37 | 39 | Q_CLASSINFO("DefaultProperty", "declarativeChildren") |
|
38 | 40 | |
|
39 | 41 | public: |
|
40 | 42 | explicit DeclarativeScatterSeries(QObject *parent = 0); |
|
41 | QXYSeries *xySeries(); | |
|
43 | QXYSeries *xySeries() { return this; } | |
|
44 | QAbstractAxis *axisX() { return m_axisX; } | |
|
45 | void setAxisX(QAbstractAxis *axis) { m_axisX = axis; emit axisXChanged(axis); } | |
|
46 | QAbstractAxis *axisY() { return m_axisY; } | |
|
47 | void setAxisY(QAbstractAxis *axis) { m_axisY = axis; emit axisYChanged(axis); } | |
|
42 | 48 | QDeclarativeListProperty<QObject> declarativeChildren(); |
|
43 | 49 | |
|
44 | 50 | public: // from QDeclarativeParserStatus |
@@ -55,10 +61,16 public: | |||
|
55 | 61 | |
|
56 | 62 | Q_SIGNALS: |
|
57 | 63 | void countChanged(int count); |
|
64 | void axisXChanged(QAbstractAxis *axis); | |
|
65 | void axisYChanged(QAbstractAxis *axis); | |
|
58 | 66 | |
|
59 | 67 | public Q_SLOTS: |
|
60 | 68 | static void appendDeclarativeChildren(QDeclarativeListProperty<QObject> *list, QObject *element); |
|
61 | 69 | void handleCountChanged(int index); |
|
70 | ||
|
71 | private: | |
|
72 | QAbstractAxis *m_axisX; | |
|
73 | QAbstractAxis *m_axisY; | |
|
62 | 74 | }; |
|
63 | 75 | |
|
64 | 76 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -23,17 +23,14 | |||
|
23 | 23 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
24 | 24 | |
|
25 | 25 | DeclarativeSplineSeries::DeclarativeSplineSeries(QObject *parent) : |
|
26 | QSplineSeries(parent) | |
|
26 | QSplineSeries(parent), | |
|
27 | m_axisX(0), | |
|
28 | m_axisY(0) | |
|
27 | 29 | { |
|
28 | 30 | connect(this, SIGNAL(pointAdded(int)), this, SLOT(handleCountChanged(int))); |
|
29 | 31 | connect(this, SIGNAL(pointRemoved(int)), this, SLOT(handleCountChanged(int))); |
|
30 | 32 | } |
|
31 | 33 | |
|
32 | QXYSeries *DeclarativeSplineSeries::xySeries() | |
|
33 | { | |
|
34 | return this; | |
|
35 | } | |
|
36 | ||
|
37 | 34 | void DeclarativeSplineSeries::handleCountChanged(int index) |
|
38 | 35 | { |
|
39 | 36 | Q_UNUSED(index) |
@@ -33,12 +33,18 class DeclarativeSplineSeries : public QSplineSeries, public DeclarativeXySeries | |||
|
33 | 33 | Q_OBJECT |
|
34 | 34 | Q_INTERFACES(QDeclarativeParserStatus) |
|
35 | 35 | Q_PROPERTY(int count READ count NOTIFY countChanged) |
|
36 | Q_PROPERTY(QAbstractAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) | |
|
37 | Q_PROPERTY(QAbstractAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) | |
|
36 | 38 | Q_PROPERTY(QDeclarativeListProperty<QObject> declarativeChildren READ declarativeChildren) |
|
37 | 39 | Q_CLASSINFO("DefaultProperty", "declarativeChildren") |
|
38 | 40 | |
|
39 | 41 | public: |
|
40 | 42 | explicit DeclarativeSplineSeries(QObject *parent = 0); |
|
41 | QXYSeries *xySeries(); | |
|
43 | QXYSeries *xySeries() { return this; } | |
|
44 | QAbstractAxis *axisX() { return m_axisX; } | |
|
45 | void setAxisX(QAbstractAxis *axis) { m_axisX = axis; emit axisXChanged(axis); } | |
|
46 | QAbstractAxis *axisY() { return m_axisY; } | |
|
47 | void setAxisY(QAbstractAxis *axis) { m_axisY = axis; emit axisYChanged(axis); } | |
|
42 | 48 | QDeclarativeListProperty<QObject> declarativeChildren(); |
|
43 | 49 | |
|
44 | 50 | public: // from QDeclarativeParserStatus |
@@ -55,10 +61,16 public: | |||
|
55 | 61 | |
|
56 | 62 | Q_SIGNALS: |
|
57 | 63 | void countChanged(int count); |
|
64 | void axisXChanged(QAbstractAxis *axis); | |
|
65 | void axisYChanged(QAbstractAxis *axis); | |
|
58 | 66 | |
|
59 | 67 | public Q_SLOTS: |
|
60 | 68 | static void appendDeclarativeChildren(QDeclarativeListProperty<QObject> *list, QObject *element); |
|
61 | 69 | void handleCountChanged(int index); |
|
70 | ||
|
71 | public: | |
|
72 | QAbstractAxis *m_axisX; | |
|
73 | QAbstractAxis *m_axisY; | |
|
62 | 74 | }; |
|
63 | 75 | |
|
64 | 76 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -91,7 +91,7 public: | |||
|
91 | 91 | qmlRegisterUncreatableType<QAbstractBarSeries>(uri, 1, 0, "AbstractBarSeries", |
|
92 | 92 | QLatin1String("Trying to create uncreatable: AbstractBarSeries.")); |
|
93 | 93 | qmlRegisterUncreatableType<QAbstractAxis>(uri, 1, 0, "AbstractAxis", |
|
94 | QLatin1String("Trying to create uncreatable: AbstractAxis.")); | |
|
94 | QLatin1String("Trying to create uncreatable: AbstractAxis. Use specific types of axis instead.")); | |
|
95 | 95 | } |
|
96 | 96 | }; |
|
97 | 97 |
@@ -116,12 +116,13 void ChartDataSet::removeSeriesIndex(QAbstractSeries* series) | |||
|
116 | 116 | |
|
117 | 117 | void ChartDataSet::createDefaultAxes() |
|
118 | 118 | { |
|
119 | ||
|
120 | if(m_seriesDomainMap.isEmpty()) return; | |
|
119 | if (m_seriesDomainMap.isEmpty()) | |
|
120 | return; | |
|
121 | 121 | |
|
122 | 122 | QAbstractAxis::AxisTypes typeX(0); |
|
123 | 123 | QAbstractAxis::AxisTypes typeY(0); |
|
124 | 124 | |
|
125 | // Remove possibly existing axes | |
|
125 | 126 | QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap); |
|
126 | 127 | while (i.hasNext()) { |
|
127 | 128 | i.next(); |
@@ -130,8 +131,10 void ChartDataSet::createDefaultAxes() | |||
|
130 | 131 | |
|
131 | 132 | i.toFront(); |
|
132 | 133 | |
|
134 | // Select the required axis x and axis y types based on the types of the current series | |
|
133 | 135 | while (i.hasNext()) { |
|
134 | 136 | i.next(); |
|
137 | ||
|
135 | 138 | QAbstractAxis* axisX = m_seriesAxisXMap.value(i.key()); |
|
136 | 139 | QAbstractAxis* axisY = m_seriesAxisYMap.value(i.key()); |
|
137 | 140 | if(axisX) typeX&=axisX->type(); |
@@ -140,27 +143,27 void ChartDataSet::createDefaultAxes() | |||
|
140 | 143 | else typeY|=i.key()->d_ptr->defaultAxisType(Qt::Vertical); |
|
141 | 144 | } |
|
142 | 145 | |
|
143 | createAxes(typeX,Qt::Horizontal); | |
|
144 |
createAxes(type |
|
|
146 | // Create the axes of the types selected | |
|
147 | createAxes(typeX, Qt::Horizontal); | |
|
148 | createAxes(typeY, Qt::Vertical); | |
|
145 | 149 | } |
|
146 | 150 | |
|
147 | void ChartDataSet::createAxes(QAbstractAxis::AxisTypes type,Qt::Orientation orientation) | |
|
151 | void ChartDataSet::createAxes(QAbstractAxis::AxisTypes type, Qt::Orientation orientation) | |
|
148 | 152 | { |
|
149 | 153 | QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap); |
|
150 | 154 | |
|
151 | if(type.testFlag(QAbstractAxis::AxisTypeValues) && type.testFlag(QAbstractAxis::AxisTypeCategories)) | |
|
152 | { | |
|
155 | // TODO: Add a descriptive comment of what happens here | |
|
156 | if (type.testFlag(QAbstractAxis::AxisTypeValues) && type.testFlag(QAbstractAxis::AxisTypeCategories)) { | |
|
153 | 157 | while (i.hasNext()) { |
|
154 | 158 | i.next(); |
|
155 | QAbstractAxis* axis = createAxis(i.key()->d_ptr->defaultAxisType(orientation),orientation); | |
|
156 |
if( |
|
|
157 | initializeAxis(axis,i.key()); | |
|
158 | emit axisAdded(axis,i.value()); | |
|
159 | QAbstractAxis* axis = createAxis(i.key()->d_ptr->defaultAxisType(orientation), orientation); | |
|
160 | if (axis) { | |
|
161 | initializeAxis(axis, i.key()); | |
|
162 | emit axisAdded(axis, i.value()); | |
|
163 | } | |
|
159 | 164 | } |
|
160 | ||
|
161 | } | |
|
162 | else if(!type.testFlag(QAbstractAxis::AxisTypeNoAxis)) { | |
|
163 | QAbstractAxis* axis = createAxis(QAbstractAxis::AxisType(int(type)),orientation); | |
|
165 | } else if (!type.testFlag(QAbstractAxis::AxisTypeNoAxis)) { | |
|
166 | QAbstractAxis* axis = createAxis(QAbstractAxis::AxisType(int(type)), orientation); | |
|
164 | 167 | i.toFront(); |
|
165 | 168 | while (i.hasNext()) { |
|
166 | 169 | i.next(); |
@@ -170,10 +173,9 void ChartDataSet::createAxes(QAbstractAxis::AxisTypes type,Qt::Orientation orie | |||
|
170 | 173 | } |
|
171 | 174 | } |
|
172 | 175 | |
|
173 | ||
|
174 | QAbstractAxis* ChartDataSet::createAxis(QAbstractAxis::AxisType type,Qt::Orientation orientation) | |
|
176 | QAbstractAxis* ChartDataSet::createAxis(QAbstractAxis::AxisType type, Qt::Orientation orientation) | |
|
175 | 177 | { |
|
176 | QAbstractAxis* axis =0; | |
|
178 | QAbstractAxis* axis = 0; | |
|
177 | 179 | |
|
178 | 180 | switch(type) { |
|
179 | 181 | case QAbstractAxis::AxisTypeValues: |
@@ -433,6 +435,11 void ChartDataSet::setAxis(QAbstractSeries *series, QAbstractAxis *axis, Qt::Ori | |||
|
433 | 435 | seriesAxisMap= &m_seriesAxisXMap; |
|
434 | 436 | } |
|
435 | 437 | |
|
438 | if (seriesAxisMap->value(series) == axis) { | |
|
439 | qWarning() << "The axis already set for the series"; | |
|
440 | return; | |
|
441 | } | |
|
442 | ||
|
436 | 443 | QAbstractAxis *oldAxis = seriesAxisMap->take(series); |
|
437 | 444 | QList<QAbstractAxis*> axes = seriesAxisMap->values(); |
|
438 | 445 | if(oldAxis) { |
@@ -79,6 +79,7 protected: | |||
|
79 | 79 | friend class ChartDataSet; |
|
80 | 80 | friend class ChartPresenter; |
|
81 | 81 | friend class QLegendPrivate; |
|
82 | friend class DeclarativeChart; | |
|
82 | 83 | }; |
|
83 | 84 | |
|
84 | 85 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -50,7 +50,6 | |||
|
50 | 50 | |
|
51 | 51 | The following QML shows how to create a chart with two simple scatter series: |
|
52 | 52 | \snippet ../demos/qmlchart/qml/qmlchart/View5.qml 1 |
|
53 | \snippet ../demos/qmlchart/qml/qmlchart/View5.qml 2 | |
|
54 | 53 | |
|
55 | 54 | \beginfloatleft |
|
56 | 55 | \image demos_qmlchart5.png |
@@ -68,10 +68,6 ChartView { | |||
|
68 | 68 | onColorChanged: console.log(name + ".onColorChanged: " + color); |
|
69 | 69 | onBorderColorChanged: console.log(name + ".onBorderColorChanged: " + borderColor); |
|
70 | 70 | // onCountChanged: console.log(name + ".onCountChanged: " + count); |
|
71 | ||
|
72 | Component.onCompleted: { | |
|
73 | createDefaultAxes(); | |
|
74 | } | |
|
75 | 71 | } |
|
76 | 72 | |
|
77 | 73 | AreaSeries { |
@@ -30,14 +30,11 ChartView { | |||
|
30 | 30 | |
|
31 | 31 | property variant series: mySeries |
|
32 | 32 | |
|
33 | BarCategoriesAxis { | |
|
34 | id:myAxis; | |
|
35 | categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] } | |
|
36 | 33 | |
|
37 | 34 | BarSeries { |
|
38 | 35 | id: mySeries |
|
39 | 36 | name: "bar" |
|
40 | ||
|
37 | axisX: BarCategoriesAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] } | |
|
41 | 38 | BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] |
|
42 | 39 | onClicked: console.log("barset.onClicked: " + index); |
|
43 | 40 | onHovered: console.log("barset.onHovered: " + status); |
@@ -64,10 +61,4 ChartView { | |||
|
64 | 61 | onLabelsVisibleChanged: console.log("groupedBarSeries.onLabelsVisibleChanged: " + series.labelsVisible); |
|
65 | 62 | onCountChanged: console.log("groupedBarSeries.onCountChanged: " + count); |
|
66 | 63 | } |
|
67 | ||
|
68 | Component.onCompleted: { | |
|
69 | createDefaultAxes(); | |
|
70 | setAxisX(myAxis,mySeries); | |
|
71 | } | |
|
72 | ||
|
73 | 64 | } |
@@ -107,8 +107,4 ChartView { | |||
|
107 | 107 | NumberAnimation { duration: 800 } |
|
108 | 108 | } |
|
109 | 109 | } |
|
110 | ||
|
111 | Component.onCompleted: { | |
|
112 | createDefaultAxes(); | |
|
113 | } | |
|
114 | 110 | } |
@@ -59,8 +59,4 ChartView { | |||
|
59 | 59 | XYPoint { x: 4.1; y: 2.3 } |
|
60 | 60 | onClicked: console.log(name + ".onClicked: " + point.x + ", " + point.y); |
|
61 | 61 | } |
|
62 | ||
|
63 | Component.onCompleted: { | |
|
64 | createDefaultAxes(); | |
|
65 | } | |
|
66 | 62 | } |
@@ -30,14 +30,11 ChartView { | |||
|
30 | 30 | |
|
31 | 31 | property variant series: mySeries |
|
32 | 32 | |
|
33 | BarCategoriesAxis { | |
|
34 | id: myAxis | |
|
35 | categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] | |
|
36 | } | |
|
37 | ||
|
38 | 33 | PercentBarSeries { |
|
39 | 34 | id: mySeries |
|
40 | 35 | name: "bar" |
|
36 | axisX: BarCategoriesAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] } | |
|
37 | ||
|
41 | 38 | BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] |
|
42 | 39 | onClicked: console.log("barset.onClicked: " + index); |
|
43 | 40 | onHovered: console.log("barset.onHovered: " + status); |
@@ -64,9 +61,4 ChartView { | |||
|
64 | 61 | onLabelsVisibleChanged: console.log("percentBarSeries.onLabelsVisibleChanged: " + series.labelsVisible); |
|
65 | 62 | onCountChanged: console.log("percentBarSeries.onCountChanged: " + count); |
|
66 | 63 | } |
|
67 | ||
|
68 | Component.onCompleted: { | |
|
69 | createDefaultAxes(); | |
|
70 | setAxisX(myAxis,mySeries); | |
|
71 | } | |
|
72 | 64 | } |
@@ -58,8 +58,4 ChartView { | |||
|
58 | 58 | XYPoint { x: 2.67; y: 2.65 } |
|
59 | 59 | onClicked: console.log(name + ".onClicked: " + point.x + ", " + point.y); |
|
60 | 60 | } |
|
61 | ||
|
62 | Component.onCompleted: { | |
|
63 | createDefaultAxes(); | |
|
64 | } | |
|
65 | 61 | } |
@@ -58,8 +58,4 ChartView { | |||
|
58 | 58 | XYPoint { x: 4.1; y: 2.3 } |
|
59 | 59 | onClicked: console.log(name + ".onClicked: " + point.x + ", " + point.y); |
|
60 | 60 | } |
|
61 | ||
|
62 | Component.onCompleted: { | |
|
63 | createDefaultAxes(); | |
|
64 | } | |
|
65 | 61 | } |
@@ -30,14 +30,10 ChartView { | |||
|
30 | 30 | |
|
31 | 31 | property variant series: mySeries |
|
32 | 32 | |
|
33 | BarCategoriesAxis { | |
|
34 | id: myAxis | |
|
35 | categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] | |
|
36 | } | |
|
37 | ||
|
38 | 33 | StackedBarSeries { |
|
39 | 34 | id: mySeries |
|
40 | 35 | name: "bar" |
|
36 | axisX: BarCategoriesAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] } | |
|
41 | 37 | BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] |
|
42 | 38 | onClicked: console.log("barset.onClicked: " + index); |
|
43 | 39 | onHovered: console.log("barset.onHovered: " + status); |
@@ -64,9 +60,4 ChartView { | |||
|
64 | 60 | onLabelsVisibleChanged: console.log("stackedBarSeries.onLabelsVisibleChanged: " + series.labelsVisible); |
|
65 | 61 | onCountChanged: console.log("stackedBarSeries.onCountChanged: " + count); |
|
66 | 62 | } |
|
67 | ||
|
68 | Component.onCompleted: { | |
|
69 | createDefaultAxes(); | |
|
70 | setAxisX(myAxis,mySeries); | |
|
71 | } | |
|
72 | 63 | } |
General Comments 0
You need to be logged in to leave comments.
Login now