@@ -0,0 +1,111 | |||
|
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 "declarativemargins.h" | |
|
22 | #include <QDataStream> | |
|
23 | #include <QDebug> | |
|
24 | ||
|
25 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
|
26 | ||
|
27 | /*! | |
|
28 | \qmlclass Margins | |
|
29 | Uncreatable type that is used to define top, bottom, left and right margins. | |
|
30 | */ | |
|
31 | ||
|
32 | /*! | |
|
33 | \qmlproperty int Margins::top | |
|
34 | The top margin. | |
|
35 | */ | |
|
36 | ||
|
37 | /*! | |
|
38 | \qmlproperty int Margins::bottom | |
|
39 | The bottom margin. | |
|
40 | */ | |
|
41 | ||
|
42 | /*! | |
|
43 | \qmlproperty int Margins::left | |
|
44 | The left margin. | |
|
45 | */ | |
|
46 | ||
|
47 | /*! | |
|
48 | \qmlproperty int Margins::right | |
|
49 | The right margin. | |
|
50 | */ | |
|
51 | ||
|
52 | DeclarativeMargins::DeclarativeMargins(QObject *parent) : | |
|
53 | QObject(parent) | |
|
54 | { | |
|
55 | QMargins::setTop(0); | |
|
56 | QMargins::setBottom(0); | |
|
57 | QMargins::setLeft(0); | |
|
58 | QMargins::setRight(0); | |
|
59 | } | |
|
60 | ||
|
61 | void DeclarativeMargins::setTop(int top) | |
|
62 | { | |
|
63 | if (top < 0) { | |
|
64 | qWarning() << "Cannot set top margin to a negative value:" << top; | |
|
65 | } else { | |
|
66 | if (top != QMargins::top()) { | |
|
67 | QMargins::setTop(top); | |
|
68 | emit topChanged(QMargins::top(), QMargins::bottom(), QMargins::left(), QMargins::right()); | |
|
69 | } | |
|
70 | } | |
|
71 | } | |
|
72 | ||
|
73 | void DeclarativeMargins::setBottom(int bottom) | |
|
74 | { | |
|
75 | if (bottom < 0) { | |
|
76 | qWarning() << "Cannot set bottom margin to a negative value:" << bottom; | |
|
77 | } else { | |
|
78 | if (bottom != QMargins::bottom()) { | |
|
79 | QMargins::setBottom(bottom); | |
|
80 | emit bottomChanged(QMargins::top(), QMargins::bottom(), QMargins::left(), QMargins::right()); | |
|
81 | } | |
|
82 | } | |
|
83 | } | |
|
84 | ||
|
85 | void DeclarativeMargins::setLeft(int left) | |
|
86 | { | |
|
87 | if (left < 0) { | |
|
88 | qWarning() << "Cannot set left margin to a negative value:" << left; | |
|
89 | } else { | |
|
90 | if (left != QMargins::left()) { | |
|
91 | QMargins::setLeft(left); | |
|
92 | emit leftChanged(QMargins::top(), QMargins::bottom(), QMargins::left(), QMargins::right()); | |
|
93 | } | |
|
94 | } | |
|
95 | } | |
|
96 | ||
|
97 | void DeclarativeMargins::setRight(int right) | |
|
98 | { | |
|
99 | if (right < 0) { | |
|
100 | qWarning() << "Cannot set left margin to a negative value:" << right; | |
|
101 | } else { | |
|
102 | if (right != QMargins::right()) { | |
|
103 | QMargins::setRight(right); | |
|
104 | emit rightChanged(QMargins::top(), QMargins::bottom(), QMargins::left(), QMargins::right()); | |
|
105 | } | |
|
106 | } | |
|
107 | } | |
|
108 | ||
|
109 | #include "moc_declarativemargins.cpp" | |
|
110 | ||
|
111 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -0,0 +1,54 | |||
|
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 | #ifndef DECLARATIVE_MARGINS_H | |
|
22 | #define DECLARATIVE_MARGINS_H | |
|
23 | ||
|
24 | #include "qchartglobal.h" | |
|
25 | #include <QObject> | |
|
26 | #include <QMargins> | |
|
27 | ||
|
28 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
|
29 | ||
|
30 | class DeclarativeMargins : public QObject, public QMargins | |
|
31 | { | |
|
32 | Q_OBJECT | |
|
33 | Q_PROPERTY(int top READ top WRITE setTop NOTIFY topChanged) | |
|
34 | Q_PROPERTY(int bottom READ bottom WRITE setBottom NOTIFY bottomChanged) | |
|
35 | Q_PROPERTY(int left READ left WRITE setLeft NOTIFY leftChanged) | |
|
36 | Q_PROPERTY(int right READ right WRITE setRight NOTIFY rightChanged) | |
|
37 | ||
|
38 | public: | |
|
39 | explicit DeclarativeMargins(QObject *parent = 0); | |
|
40 | void setTop(int top); | |
|
41 | void setBottom(int bottom); | |
|
42 | void setLeft(int left); | |
|
43 | void setRight(int right); | |
|
44 | ||
|
45 | Q_SIGNALS: | |
|
46 | void topChanged(int top, int bottom, int left, int right); | |
|
47 | void bottomChanged(int top, int bottom, int left, int right); | |
|
48 | void leftChanged(int top, int bottom, int left, int right); | |
|
49 | void rightChanged(int top, int bottom, int left, int right); | |
|
50 | }; | |
|
51 | ||
|
52 | QTCOMMERCIALCHART_END_NAMESPACE | |
|
53 | ||
|
54 | #endif // DECLARATIVE_MARGINS_H |
@@ -168,13 +168,14 Rectangle { | |||
|
168 | 168 | } |
|
169 | 169 | } |
|
170 | 170 | |
|
171 | } | |
|
171 | 172 |
|
|
172 | 173 |
|
|
174 | series: pieSeries | |
|
173 | 175 |
|
|
174 | 176 |
|
|
175 | 177 |
|
|
176 | 178 |
|
|
177 | } | |
|
178 | 179 | //![3] |
|
179 | 180 | } |
|
180 | 181 | } |
@@ -22,7 +22,8 SOURCES += \ | |||
|
22 | 22 | declarativescatterseries.cpp \ |
|
23 | 23 | declarativepieseries.cpp \ |
|
24 | 24 | declarativebarseries.cpp \ |
|
25 | declarativecategoryaxis.cpp | |
|
25 | declarativecategoryaxis.cpp \ | |
|
26 | declarativemargins.cpp | |
|
26 | 27 | |
|
27 | 28 | HEADERS += \ |
|
28 | 29 | declarativechart.h \ |
@@ -34,7 +35,8 HEADERS += \ | |||
|
34 | 35 | declarativescatterseries.h \ |
|
35 | 36 | declarativepieseries.h \ |
|
36 | 37 | declarativebarseries.h \ |
|
37 | declarativecategoryaxis.h | |
|
38 | declarativecategoryaxis.h \ | |
|
39 | declarativemargins.h | |
|
38 | 40 | |
|
39 | 41 | TARGETPATH = QtCommercial/Chart |
|
40 | 42 | target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH |
@@ -31,6 +31,7 | |||
|
31 | 31 | #include "qvalueaxis.h" |
|
32 | 32 | #include "qcategoryaxis.h" |
|
33 | 33 | #include "qabstractseries_p.h" |
|
34 | #include "declarativemargins.h" | |
|
34 | 35 | |
|
35 | 36 | #ifndef QT_ON_ARM |
|
36 | 37 | #include "qdatetimeaxis.h" |
@@ -117,26 +118,27 QTCOMMERCIALCHART_BEGIN_NAMESPACE | |||
|
117 | 118 | |
|
118 | 119 | /*! |
|
119 | 120 | \qmlproperty real ChartView::topMargin |
|
120 | The space between the top of chart view and the top of the plot area. The title (if non-empty) is drawn on top margin | |
|
121 | area of the chart view. Top margin area is also used by legend, if aligned to top. | |
|
121 | Deprecated. Use minimumMargins and plotArea instead. | |
|
122 | 122 | */ |
|
123 | 123 | |
|
124 | 124 | /*! |
|
125 | 125 | \qmlproperty real ChartView::bottomMargin |
|
126 | The space between the bottom of chart view and the bottom of the plot area. The bottom margin area may be used by | |
|
127 | legend (if aligned to bottom), x-axis, x-axis labels and x-axis tick marks. | |
|
126 | Deprecated. Use minimumMargins and plotArea instead. | |
|
128 | 127 | */ |
|
129 | 128 | |
|
130 | 129 | /*! |
|
131 | 130 | \qmlproperty real ChartView::leftMargin |
|
132 | The space between the left side of chart view and the left side of the plot area. The left margin area may be used by | |
|
133 | legend (if aligned to left), y-axis, y-axis labels and y-axis tick marks. | |
|
131 | Deprecated. Use minimumMargins and plotArea instead. | |
|
134 | 132 | */ |
|
135 | 133 | |
|
136 | 134 | /*! |
|
137 | 135 | \qmlproperty real ChartView::rightMargin |
|
138 | The space between the right side of chart view and the right side of the plot area. The right margin area may be used | |
|
139 | by legend (if aligned to right). | |
|
136 | Deprecated. Use minimumMargins and plotArea instead. | |
|
137 | */ | |
|
138 | ||
|
139 | /*! | |
|
140 | \qmlproperty Margins ChartView::minimumMargins | |
|
141 | The minimum margins allowed between the outer bounds and the plotArea of the ChartView. | |
|
140 | 142 | */ |
|
141 | 143 | |
|
142 | 144 | /*! |
@@ -223,24 +225,17 DeclarativeChart::DeclarativeChart(QDeclarativeItem *parent) | |||
|
223 | 225 | m_chart(new QChart(this)) |
|
224 | 226 | { |
|
225 | 227 | setFlag(QGraphicsItem::ItemHasNoContents, false); |
|
226 | //TODO: check what should be really here margins or platArea ?! | |
|
227 | m_chartMargins = m_chart->minimumMargins(); | |
|
228 |
connect(m_ |
|
|
228 | m_minMargins = new DeclarativeMargins(this); | |
|
229 | connect(m_minMargins, SIGNAL(topChanged(int, int, int, int)), this, SLOT(changeMinimumMargins(int, int, int, int))); | |
|
230 | connect(m_minMargins, SIGNAL(bottomChanged(int, int, int, int)), this, SLOT(changeMinimumMargins(int, int, int, int))); | |
|
231 | connect(m_minMargins, SIGNAL(leftChanged(int, int, int, int)), this, SLOT(changeMinimumMargins(int, int, int, int))); | |
|
232 | connect(m_minMargins, SIGNAL(rightChanged(int, int, int, int)), this, SLOT(changeMinimumMargins(int, int, int, int))); | |
|
233 | // TODO: connect to plotAreaChanged signal from m_chart | |
|
229 | 234 | } |
|
230 | 235 | |
|
231 | void DeclarativeChart::handleMarginsChanged(QRectF newMargins) | |
|
236 | void DeclarativeChart::changeMinimumMargins(int top, int bottom, int left, int right) | |
|
232 | 237 | { |
|
233 | //TODO: check what should be really here margins or platArea ?! | |
|
234 | if (m_chartMargins.top() != newMargins.top()) | |
|
235 | topMarginChanged(m_chart->minimumMargins().top()); | |
|
236 | if (m_chartMargins.bottom() != newMargins.bottom()) | |
|
237 | bottomMarginChanged(m_chart->minimumMargins().bottom()); | |
|
238 | if (m_chartMargins.left() != newMargins.left()) | |
|
239 | leftMarginChanged(m_chart->minimumMargins().left()); | |
|
240 | if (m_chartMargins.right() != newMargins.right()) | |
|
241 | rightMarginChanged(m_chart->minimumMargins().right()); | |
|
242 | ||
|
243 | m_chartMargins = m_chart->minimumMargins(); | |
|
238 | m_chart->setMinimumMargins(QMargins(left, top, right, bottom)); | |
|
244 | 239 | } |
|
245 | 240 | |
|
246 | 241 | DeclarativeChart::~DeclarativeChart() |
@@ -482,22 +477,26 bool DeclarativeChart::dropShadowEnabled() | |||
|
482 | 477 | |
|
483 | 478 | qreal DeclarativeChart::topMargin() |
|
484 | 479 | { |
|
485 | return m_chart->minimumMargins().top(); | |
|
480 | qWarning() << "ChartView.topMargin is deprecated. Use minimumMargins and plotArea instead."; | |
|
481 | return m_chart->plotArea().top(); | |
|
486 | 482 | } |
|
487 | 483 | |
|
488 | 484 | qreal DeclarativeChart::bottomMargin() |
|
489 | 485 | { |
|
490 | return m_chart->minimumMargins().bottom(); | |
|
486 | qWarning() << "ChartView.bottomMargin is deprecated. Use minimumMargins and plotArea instead."; | |
|
487 | return m_chart->plotArea().bottom(); | |
|
491 | 488 | } |
|
492 | 489 | |
|
493 | 490 | qreal DeclarativeChart::leftMargin() |
|
494 | 491 | { |
|
495 | return m_chart->minimumMargins().left(); | |
|
492 | qWarning() << "ChartView.leftMargin is deprecated. Use minimumMargins and plotArea instead."; | |
|
493 | return m_chart->plotArea().left(); | |
|
496 | 494 | } |
|
497 | 495 | |
|
498 | 496 | qreal DeclarativeChart::rightMargin() |
|
499 | 497 | { |
|
500 | return m_chart->minimumMargins().right(); | |
|
498 | qWarning() << "ChartView.rightMargin is deprecated. Use minimumMargins and plotArea instead."; | |
|
499 | return m_chart->plotArea().right(); | |
|
501 | 500 | } |
|
502 | 501 | |
|
503 | 502 | void DeclarativeChart::zoom(qreal factor) |
@@ -27,6 +27,8 | |||
|
27 | 27 | |
|
28 | 28 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
29 | 29 | |
|
30 | class DeclarativeMargins; | |
|
31 | ||
|
30 | 32 | class DeclarativeChart : public QDeclarativeItem |
|
31 | 33 | { |
|
32 | 34 | Q_OBJECT |
@@ -43,6 +45,7 class DeclarativeChart : public QDeclarativeItem | |||
|
43 | 45 | Q_PROPERTY(qreal bottomMargin READ bottomMargin NOTIFY bottomMarginChanged) |
|
44 | 46 | Q_PROPERTY(qreal leftMargin READ leftMargin NOTIFY leftMarginChanged) |
|
45 | 47 | Q_PROPERTY(qreal rightMargin READ rightMargin NOTIFY rightMarginChanged) |
|
48 | Q_PROPERTY(DeclarativeMargins *minimumMargins READ minimumMargins REVISION 1) | |
|
46 | 49 | Q_ENUMS(Animation) |
|
47 | 50 | Q_ENUMS(Theme) |
|
48 | 51 | Q_ENUMS(SeriesType) |
@@ -111,6 +114,7 public: | |||
|
111 | 114 | qreal leftMargin(); |
|
112 | 115 | qreal rightMargin(); |
|
113 | 116 | void createDefaultAxes(QAbstractSeries* series); |
|
117 | DeclarativeMargins *minimumMargins() { return m_minMargins; } | |
|
114 | 118 | |
|
115 | 119 | public: |
|
116 | 120 | Q_INVOKABLE QAbstractSeries *series(int index); |
@@ -139,7 +143,8 Q_SIGNALS: | |||
|
139 | 143 | void rightMarginChanged(qreal margin); |
|
140 | 144 | |
|
141 | 145 | public Q_SLOTS: |
|
142 | void handleMarginsChanged(QRectF newMargins); | |
|
146 | // void handleMarginsChanged(QRectF newMargins); | |
|
147 | void changeMinimumMargins(int top, int bottom, int left, int right); | |
|
143 | 148 | void handleAxisXSet(QAbstractAxis *axis); |
|
144 | 149 | void handleAxisYSet(QAbstractAxis *axis); |
|
145 | 150 | |
@@ -147,7 +152,8 private: | |||
|
147 | 152 | // Extending QChart with DeclarativeChart is not possible because QObject does not support |
|
148 | 153 | // multi inheritance, so we now have a QChart as a member instead |
|
149 | 154 | QChart *m_chart; |
|
150 | QMargins m_chartMargins; | |
|
155 | //QMargins m_chartMargins; | |
|
156 | DeclarativeMargins *m_minMargins; | |
|
151 | 157 | }; |
|
152 | 158 | |
|
153 | 159 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -40,6 +40,7 | |||
|
40 | 40 | #include "qvpiemodelmapper.h" |
|
41 | 41 | #include "qhbarmodelmapper.h" |
|
42 | 42 | #include "qvbarmodelmapper.h" |
|
43 | #include "declarativemargins.h" | |
|
43 | 44 | #include <QAbstractItemModel> |
|
44 | 45 | |
|
45 | 46 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
@@ -97,7 +98,7 public: | |||
|
97 | 98 | QLatin1String("Trying to create uncreatable: QPieSeries. Use PieSeries instead.")); |
|
98 | 99 | |
|
99 | 100 | // QtCommercial.Chart 1.1 |
|
100 | qmlRegisterType<DeclarativeChart>(uri, 1, 1, "ChartView"); | |
|
101 | qmlRegisterType<DeclarativeChart, 1>(uri, 1, 1, "ChartView"); | |
|
101 | 102 | qmlRegisterType<DeclarativeXYPoint>(uri, 1, 1, "XYPoint"); |
|
102 | 103 | qmlRegisterType<DeclarativeScatterSeries, 1>(uri, 1, 1, "ScatterSeries"); |
|
103 | 104 | qmlRegisterType<DeclarativeLineSeries, 1>(uri, 1, 1, "LineSeries"); |
@@ -145,6 +146,8 public: | |||
|
145 | 146 | QLatin1String("Trying to create uncreatable: BarsetBase.")); |
|
146 | 147 | qmlRegisterUncreatableType<QPieSeries>(uri, 1, 1, "QPieSeries", |
|
147 | 148 | QLatin1String("Trying to create uncreatable: QPieSeries. Use PieSeries instead.")); |
|
149 | qmlRegisterUncreatableType<DeclarativeMargins>(uri, 1, 1, "Margins", | |
|
150 | QLatin1String("Trying to create uncreatable: Margins.")); | |
|
148 | 151 | } |
|
149 | 152 | }; |
|
150 | 153 |
@@ -64,7 +64,10 ChartView { | |||
|
64 | 64 | legend.onColorChanged: console.log("legend.onColorChanged: " + color); |
|
65 | 65 | legend.onBorderColorChanged: console.log("legend.onBorderColorChanged: " + color); |
|
66 | 66 | legend.onLabelColorChanged: console.log("legend.onLabelColorChanged: " + color); |
|
67 | ||
|
67 | minimumMargins.onTopChanged: console.log("chart.minimumMargins.onTopChanged: " + top); | |
|
68 | minimumMargins.onBottomChanged: console.log("chart.minimumMargins.onBottomChanged: " + bottom); | |
|
69 | minimumMargins.onLeftChanged: console.log("chart.minimumMargins.onLeftChanged: " + left); | |
|
70 | minimumMargins.onRightChanged: console.log("chart.minimumMargins.onRightChanged: " + right); | |
|
68 | 71 | |
|
69 | 72 | ValueAxis{ |
|
70 | 73 | onColorChanged: console.log("axisX.onColorChanged: " + color); |
@@ -84,6 +84,42 Row { | |||
|
84 | 84 | text: "title color" |
|
85 | 85 | onClicked: chart.titleColor = main.nextColor(); |
|
86 | 86 | } |
|
87 | Button { | |
|
88 | text: "zoom -" | |
|
89 | onClicked: chart.zoom(0.5); | |
|
90 | } | |
|
91 | Button { | |
|
92 | text: "top min margin +" | |
|
93 | onClicked: chart.minimumMargins.top += 5; | |
|
94 | } | |
|
95 | Button { | |
|
96 | text: "top min margin -" | |
|
97 | onClicked: chart.minimumMargins.top -= 5; | |
|
98 | } | |
|
99 | Button { | |
|
100 | text: "bottom min margin +" | |
|
101 | onClicked: chart.minimumMargins.bottom += 5; | |
|
102 | } | |
|
103 | Button { | |
|
104 | text: "bottom min margin -" | |
|
105 | onClicked: chart.minimumMargins.bottom -= 5; | |
|
106 | } | |
|
107 | Button { | |
|
108 | text: "left min margin +" | |
|
109 | onClicked: chart.minimumMargins.left += 5; | |
|
110 | } | |
|
111 | Button { | |
|
112 | text: "left min margin -" | |
|
113 | onClicked: chart.minimumMargins.left -= 5; | |
|
114 | } | |
|
115 | Button { | |
|
116 | text: "right min margin +" | |
|
117 | onClicked: chart.minimumMargins.right += 5; | |
|
118 | } | |
|
119 | Button { | |
|
120 | text: "right min margin -" | |
|
121 | onClicked: chart.minimumMargins.right -= 5; | |
|
122 | } | |
|
87 | 123 | } |
|
88 | 124 | |
|
89 | 125 | FontEditor { |
General Comments 0
You need to be logged in to leave comments.
Login now