##// END OF EJS Templates
Adds loosenumber algorithm...
Michal Klocek -
r678:e39e59ad9161
parent child
Show More
@@ -4,6 +4,7
4 #include "chartanimator_p.h"
4 #include "chartanimator_p.h"
5 #include <QPainter>
5 #include <QPainter>
6 #include <QDebug>
6 #include <QDebug>
7 #include <cmath>
7
8
8 static int label_padding = 5;
9 static int label_padding = 5;
9
10
@@ -78,16 +79,18 void Axis::updateLayout(QVector<qreal>& layout)
78 QStringList Axis::createLabels(int ticks, qreal min, qreal max) const
79 QStringList Axis::createLabels(int ticks, qreal min, qreal max) const
79 {
80 {
80 Q_ASSERT(max>=min);
81 Q_ASSERT(max>=min);
81 Q_ASSERT(ticks>0);
82 Q_ASSERT(ticks>1);
82
83
83 QStringList labels;
84 QStringList labels;
84
85
86 int n = qMax(int(-floor(log10((max-min)/(ticks-1)))),0);
87
85 QChartAxisCategories* categories = m_chartAxis->categories();
88 QChartAxisCategories* categories = m_chartAxis->categories();
86
89
87 for(int i=0; i< ticks; i++) {
90 for(int i=0; i< ticks; i++) {
88 qreal value = min + (i * (max - min)/ (ticks-1));
91 qreal value = min + (i * (max - min)/ (ticks-1));
89 if(categories->count()==0) {
92 if(categories->count()==0) {
90 labels << QString::number(value);
93 labels << QString::number(value,'f',n);
91 }
94 }
92 else {
95 else {
93
96
@@ -149,7 +149,8 m_shadesVisible(false),
149 m_shadesOpacity(1.0),
149 m_shadesOpacity(1.0),
150 m_min(0),
150 m_min(0),
151 m_max(0),
151 m_max(0),
152 m_ticksCount(5)
152 m_ticksCount(5),
153 m_selection(NativeLabelsSelection)
153 {
154 {
154
155
155 }
156 }
@@ -343,6 +344,7 void QChartAxis::setRange(qreal min, qreal max)
343
344
344 if(changed) {
345 if(changed) {
345 emit rangeChanged(m_min,m_max);
346 emit rangeChanged(m_min,m_max);
347 emit this->changed(m_min, m_max, m_ticksCount, m_selection);
346 }
348 }
347 }
349 }
348
350
@@ -354,6 +356,7 void QChartAxis::setTicksCount(int count)
354 if(m_ticksCount!=count) {
356 if(m_ticksCount!=count) {
355 m_ticksCount=count;
357 m_ticksCount=count;
356 emit ticksCountChanged(count);
358 emit ticksCountChanged(count);
359 emit changed(m_min, m_max, m_ticksCount, m_selection);
357 }
360 }
358 }
361 }
359
362
@@ -381,14 +384,18 void QChartAxis::hide()
381 emit updated();
384 emit updated();
382 }
385 }
383
386
384 void QChartAxis::handleAxisRangeChanged(qreal min, qreal max)
387 void QChartAxis::handleAxisRangeChanged(qreal min, qreal max,int count)
385 {
388 {
386 setRange(min,max);
389 setRange(min,max);
390 setTicksCount(count);
387 }
391 }
388
392
389 void QChartAxis::handleAxisTicksChanged(int count)
393 void QChartAxis::setLabelsSelectionMode(LabelsSelection mode)
390 {
394 {
391 setTicksCount(count);
395 if(m_selection!=mode){
396 m_selection=mode;
397 emit changed(m_min, m_max, m_ticksCount, m_selection);
398 }
392 }
399 }
393
400
394 #include "moc_qchartaxis.cpp"
401 #include "moc_qchartaxis.cpp"
@@ -1,17 +1,19
1 #ifndef QCHARTAXIS_H_
1 #ifndef QCHARTAXIS_H_
2 #define QCHARTAXIS_H_
2 #define QCHARTAXIS_H_
3
3
4 #include <qchartaxiscategories.h>
4 #include "qchartglobal.h"
5 #include "qchartaxiscategories.h"
5 #include <QPen>
6 #include <QPen>
6 #include <QFont>
7 #include <QFont>
7
8
8
9 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9 QTCOMMERCIALCHART_BEGIN_NAMESPACE
10
10
11 class QTCOMMERCIALCHART_EXPORT QChartAxis : public QObject
11 class QTCOMMERCIALCHART_EXPORT QChartAxis : public QObject
12 {
12 {
13 Q_OBJECT
13 Q_OBJECT
14 public:
14 public:
15 enum LabelsSelection{ NativeLabelsSelection, LooseLabelsSelection};
16
15 QChartAxis(QObject* parent =0);
17 QChartAxis(QObject* parent =0);
16 ~QChartAxis();
18 ~QChartAxis();
17
19
@@ -60,6 +62,9 public:
60 void setTicksCount(int count);
62 void setTicksCount(int count);
61 int ticksCount() const { return m_ticksCount;}
63 int ticksCount() const { return m_ticksCount;}
62
64
65 void setLabelsSelectionMode(LabelsSelection mode);
66 LabelsSelection labelsSelectionMode() const { return m_selection;}
67
63 QChartAxisCategories* categories() { return &m_category; }
68 QChartAxisCategories* categories() { return &m_category; }
64
69
65 void show();
70 void show();
@@ -73,10 +78,10 signals:
73
78
74 //interal signal
79 //interal signal
75 void updated();
80 void updated();
81 void changed(qreal min, qreal max, int tickCount,QChartAxis::LabelsSelection mode);
76 //internal slot
82 //internal slot
77 public slots:
83 public slots:
78 void handleAxisRangeChanged(qreal min, qreal max);
84 void handleAxisRangeChanged(qreal min, qreal max,int count);
79 void handleAxisTicksChanged(int count);
80
85
81 private:
86 private:
82 bool m_axisVisible;
87 bool m_axisVisible;
@@ -102,6 +107,8 private:
102
107
103 int m_ticksCount;
108 int m_ticksCount;
104 QChartAxisCategories m_category;
109 QChartAxisCategories m_category;
110
111 LabelsSelection m_selection;
105 };
112 };
106
113
107 QTCOMMERCIALCHART_END_NAMESPACE
114 QTCOMMERCIALCHART_END_NAMESPACE
@@ -47,12 +47,10 void ChartDataSet::addSeries(QSeries* series, QChartAxis *axisY)
47
47
48 if(!domain) {
48 if(!domain) {
49 domain = new Domain();
49 domain = new Domain();
50 QObject::connect(axisY,SIGNAL(rangeChanged(qreal,qreal)),domain,SLOT(handleAxisRangeYChanged(qreal,qreal)));
50 QObject::connect(axisY,SIGNAL(changed(qreal,qreal,int,QChartAxis::LabelsSelection)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,QChartAxis::LabelsSelection)));
51 QObject::connect(axisX(),SIGNAL(rangeChanged(qreal,qreal)),domain,SLOT(handleAxisRangeXChanged(qreal,qreal)));
51 QObject::connect(axisX(),SIGNAL(changed(qreal,qreal,int,QChartAxis::LabelsSelection)),domain,SLOT(handleAxisXChanged(qreal,qreal,int,QChartAxis::LabelsSelection)));
52 QObject::connect(axisY,SIGNAL(ticksCountChanged(int)),domain,SLOT(handleAxisYTicksCountChanged(int)));
52 QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),axisY,SLOT(handleAxisRangeChanged(qreal,qreal,int)));
53 QObject::connect(axisX(),SIGNAL(ticksCountChanged(int)),domain,SLOT(handleAxisXTicksCountChanged(int)));
53 QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),axisX(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
54 QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),axisY,SLOT(handleAxisRangeChanged(qreal,qreal)));
55 QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),axisX(),SLOT(handleAxisRangeChanged(qreal,qreal)));
56 //initialize
54 //initialize
57 m_axisDomainMap.insert(axisY,domain);
55 m_axisDomainMap.insert(axisY,domain);
58 emit axisAdded(axisY,domain);
56 emit axisAdded(axisY,domain);
@@ -31,7 +31,6 ChartPresenter::ChartPresenter(QChart* chart,ChartDataSet* dataset):QObject(char
31 m_animator(0),
31 m_animator(0),
32 m_dataset(dataset),
32 m_dataset(dataset),
33 m_chartTheme(0),
33 m_chartTheme(0),
34 m_zoomIndex(0),
35 m_rect(QRectF(QPoint(0,0),m_chart->size())),
34 m_rect(QRectF(QPoint(0,0),m_chart->size())),
36 m_options(QChart::NoAnimation),
35 m_options(QChart::NoAnimation),
37 m_themeForce(false)
36 m_themeForce(false)
@@ -66,6 +65,7 void ChartPresenter::handleGeometryChanged()
66 rect.adjust(m_chart->padding(),m_chart->padding(), -m_chart->padding(), -m_chart->padding());
65 rect.adjust(m_chart->padding(),m_chart->padding(), -m_chart->padding(), -m_chart->padding());
67
66
68 //rewrite zoom stack
67 //rewrite zoom stack
68 /*
69 for(int i=0;i<m_zoomStack.count();i++){
69 for(int i=0;i<m_zoomStack.count();i++){
70 QRectF r = m_zoomStack[i];
70 QRectF r = m_zoomStack[i];
71 qreal w = rect.width()/m_rect.width();
71 qreal w = rect.width()/m_rect.width();
@@ -80,7 +80,7 void ChartPresenter::handleGeometryChanged()
80 r.setBottomRight(br);
80 r.setBottomRight(br);
81 m_zoomStack[i]=r;
81 m_zoomStack[i]=r;
82 }
82 }
83
83 */
84 m_rect = rect;
84 m_rect = rect;
85 Q_ASSERT(m_rect.isValid());
85 Q_ASSERT(m_rect.isValid());
86 emit geometryChanged(m_rect);
86 emit geometryChanged(m_rect);
@@ -251,7 +251,6 void ChartPresenter::handleSeriesAdded(QSeries* series,Domain* domain)
251 item->handleDomainChanged(domain->minX(),domain->maxX(),domain->minY(),domain->maxY());
251 item->handleDomainChanged(domain->minX(),domain->maxX(),domain->minY(),domain->maxY());
252 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
252 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
253 m_chartItems.insert(series,item);
253 m_chartItems.insert(series,item);
254 zoomReset();
255 }
254 }
256
255
257 void ChartPresenter::handleSeriesRemoved(QSeries* series)
256 void ChartPresenter::handleSeriesRemoved(QSeries* series)
@@ -336,8 +335,6 void ChartPresenter::zoomIn(const QRectF& rect)
336 m_animator->setState(ChartAnimator::ZoomInState,point);
335 m_animator->setState(ChartAnimator::ZoomInState,point);
337 }
336 }
338 m_dataset->zoomInDomain(r,geometry().size());
337 m_dataset->zoomInDomain(r,geometry().size());
339 m_zoomStack<<r;
340 m_zoomIndex++;
341 if(m_animator) {
338 if(m_animator) {
342 m_animator->setState(ChartAnimator::ShowState);
339 m_animator->setState(ChartAnimator::ShowState);
343 }
340 }
@@ -345,25 +342,22 void ChartPresenter::zoomIn(const QRectF& rect)
345
342
346 void ChartPresenter::zoomOut()
343 void ChartPresenter::zoomOut()
347 {
344 {
348 if(m_zoomIndex==0) return;
349 if(m_animator)
345 if(m_animator)
350 {
346 {
351 m_animator->setState(ChartAnimator::ZoomOutState);
347 m_animator->setState(ChartAnimator::ZoomOutState);
352 }
348 }
353 m_dataset->zoomOutDomain(m_zoomStack[m_zoomIndex-1],geometry().size());
349
354 m_zoomIndex--;
350 QSizeF size = geometry().size();
355 m_zoomStack.resize(m_zoomIndex);
351 QRectF rect = geometry();
352 rect.translate(-m_chart->padding(), -m_chart->padding());
353 m_dataset->zoomOutDomain(rect.adjusted(size.width()/4,size.height()/4,-size.width()/4,-size.height()/4),size);
354 //m_dataset->zoomOutDomain(m_zoomStack[m_zoomIndex-1],geometry().size());
355
356 if(m_animator){
356 if(m_animator){
357 m_animator->setState(ChartAnimator::ShowState);
357 m_animator->setState(ChartAnimator::ShowState);
358 }
358 }
359 }
359 }
360
360
361 void ChartPresenter::zoomReset()
362 {
363 m_zoomIndex=0;
364 m_zoomStack.resize(m_zoomIndex);
365 }
366
367 void ChartPresenter::scroll(int dx,int dy)
361 void ChartPresenter::scroll(int dx,int dy)
368 {
362 {
369 if(m_animator){
363 if(m_animator){
@@ -55,7 +55,6 public:
55 void zoomIn();
55 void zoomIn();
56 void zoomIn(const QRectF& rect);
56 void zoomIn(const QRectF& rect);
57 void zoomOut();
57 void zoomOut();
58 void zoomReset();
59 void scroll(int dx,int dy);
58 void scroll(int dx,int dy);
60
59
61 private:
60 private:
@@ -77,10 +76,8 private:
77 ChartAnimator* m_animator;
76 ChartAnimator* m_animator;
78 ChartDataSet* m_dataset;
77 ChartDataSet* m_dataset;
79 ChartTheme *m_chartTheme;
78 ChartTheme *m_chartTheme;
80 int m_zoomIndex;
81 QMap<QSeries*,Chart*> m_chartItems;
79 QMap<QSeries*,Chart*> m_chartItems;
82 QMap<QChartAxis*,Axis*> m_axisItems;
80 QMap<QChartAxis*,Axis*> m_axisItems;
83 QVector<QRectF> m_zoomStack;
84 QRectF m_rect;
81 QRectF m_rect;
85 QChart::AnimationOptions m_options;
82 QChart::AnimationOptions m_options;
86 bool m_themeForce;
83 bool m_themeForce;
@@ -1,4 +1,5
1 #include "domain_p.h"
1 #include "domain_p.h"
2 #include <cmath>
2
3
3 QTCOMMERCIALCHART_BEGIN_NAMESPACE
4 QTCOMMERCIALCHART_BEGIN_NAMESPACE
4
5
@@ -8,7 +9,8 m_maxX(0),
8 m_minY(0),
9 m_minY(0),
9 m_maxY(0),
10 m_maxY(0),
10 m_tickXCount(5),
11 m_tickXCount(5),
11 m_tickYCount(5)
12 m_tickYCount(5),
13 m_selection(QChartAxis::NativeLabelsSelection)
12 {
14 {
13 }
15 }
14
16
@@ -18,55 +20,83 Domain::~Domain()
18
20
19 void Domain::setRange(qreal minX, qreal maxX, qreal minY, qreal maxY)
21 void Domain::setRange(qreal minX, qreal maxX, qreal minY, qreal maxY)
20 {
22 {
21 bool changed = false;
23 setRange(minX, maxX, minY, maxY,m_tickXCount,m_tickYCount);
24 }
22
25
23 if(m_minX!=minX || m_maxX!=maxX)
26 void Domain::setRange(qreal minX, qreal maxX, qreal minY, qreal maxY,int tickXCount,int tickYCount)
24 {
27 {
25 m_minX=minX;
28 bool domainChanged = false;
26 m_maxX=maxX;
29 bool tickXChanged = false;
27 changed=true;
30 bool tickYChanged = false;
28 emit rangeXChanged(minX,maxX, m_tickXCount);
29 }
30
31
31 if(m_minY!=minY || m_maxY!=maxY){
32 if(m_tickXCount!=tickXCount) {
32 m_minY=minY;
33 m_tickXCount=tickXCount;
33 m_maxY=maxY;
34 tickXChanged=true;
34 changed=true;
35 }
35 emit rangeYChanged(minY,maxY, m_tickYCount);
36 }
37
36
38 if(changed){
37 if(m_tickXCount!=tickYCount) {
39 emit domainChanged(m_minX, m_maxX, m_minY, m_maxY);
38 m_tickXCount=tickYCount;
40 }
39 tickYChanged=true;
40 }
41
42 if(m_minX!=minX || m_maxX!=maxX) {
43 niceNumbers(minX, maxX, m_tickXCount);
44 m_minX=minX;
45 m_maxX=maxX;
46 domainChanged=true;
47 tickXChanged=false;
48 emit rangeXChanged(minX,maxX, m_tickXCount);
49 }
50
51 if(m_minY!=minY || m_maxY!=maxY) {
52 niceNumbers(minY, maxY, m_tickYCount);
53 m_minY=minY;
54 m_maxY=maxY;
55 domainChanged=true;
56 tickYChanged=false;
57 emit rangeYChanged(minY,maxY, m_tickYCount);
58 }
59
60 if(domainChanged) {
61 emit this->domainChanged(m_minX, m_maxX, m_minY, m_maxY);
62 }
63
64 if(tickXChanged) {
65 emit rangeXChanged(minX,maxX, m_tickXCount);
66 }
67
68 if(tickYChanged) {
69 emit rangeYChanged(minY,maxY, m_tickYCount);
70 }
41 }
71 }
72
42 void Domain::setRangeX(qreal min, qreal max)
73 void Domain::setRangeX(qreal min, qreal max)
43 {
74 {
44 setRange(min,max,m_minY, m_maxY);
75 setRange(min,max,m_minY, m_maxY);
45 }
76 }
46 void Domain::setRangeY(qreal min, qreal max)
77 void Domain::setRangeY(qreal min, qreal max)
47 {
78 {
48 setRange(m_minX, m_maxX, min, max);
79 setRange(m_minX, m_maxX, min, max);
49 }
80 }
50
81
51 void Domain::setMinX(qreal min)
82 void Domain::setMinX(qreal min)
52 {
83 {
53 setRange(min, m_maxX, m_minY, m_maxY);
84 setRange(min, m_maxX, m_minY, m_maxY);
54 }
85 }
55
86
56 void Domain::setMaxX(qreal max)
87 void Domain::setMaxX(qreal max)
57 {
88 {
58 setRange(m_minX, max, m_minY, m_maxY);
89 setRange(m_minX, max, m_minY, m_maxY);
59 }
90 }
60
91
61 void Domain::setMinY(qreal min)
92 void Domain::setMinY(qreal min)
62 {
93 {
63 setRange(m_minX, m_maxX, min, m_maxY);
94 setRange(m_minX, m_maxX, min, m_maxY);
64 }
95 }
65
96
66 void Domain::setMaxY(qreal max)
97 void Domain::setMaxY(qreal max)
67 {
98 {
68 setRange(m_minX, m_maxX, m_minY, max);
99 setRange(m_minX, m_maxX, m_minY, max);
69
70 }
100 }
71
101
72 qreal Domain::spanX() const
102 qreal Domain::spanX() const
@@ -96,6 +126,9 void Domain::zoomIn(const QRectF& rect, const QSizeF& size)
96 m_minY = m_maxY - dy * rect.bottom();
126 m_minY = m_maxY - dy * rect.bottom();
97 m_maxY = m_maxY - dy * rect.top();
127 m_maxY = m_maxY - dy * rect.top();
98
128
129 niceNumbers(m_minX, m_maxX, m_tickXCount);
130 niceNumbers(m_minY, m_maxY, m_tickYCount);
131
99 emit domainChanged(m_minX, m_maxX, m_minY, m_maxY);
132 emit domainChanged(m_minX, m_maxX, m_minY, m_maxY);
100 emit rangeXChanged(m_minX, m_maxX, m_tickXCount);
133 emit rangeXChanged(m_minX, m_maxX, m_tickXCount);
101 emit rangeYChanged(m_minY, m_maxY, m_tickYCount);
134 emit rangeYChanged(m_minY, m_maxY, m_tickYCount);
@@ -111,6 +144,9 void Domain::zoomOut(const QRectF& rect, const QSizeF& size)
111 m_maxY = m_minY + dy * rect.bottom();
144 m_maxY = m_minY + dy * rect.bottom();
112 m_minY = m_maxY - dy * size.height();
145 m_minY = m_maxY - dy * size.height();
113
146
147 niceNumbers(m_minX, m_maxX, m_tickXCount);
148 niceNumbers(m_minY, m_maxY, m_tickYCount);
149
114 emit domainChanged(m_minX, m_maxX, m_minY, m_maxY);
150 emit domainChanged(m_minX, m_maxX, m_minY, m_maxY);
115 emit rangeXChanged(m_minX, m_maxX, m_tickXCount);
151 emit rangeXChanged(m_minX, m_maxX, m_tickXCount);
116 emit rangeYChanged(m_minY, m_maxY, m_tickYCount);
152 emit rangeYChanged(m_minY, m_maxY, m_tickYCount);
@@ -121,44 +157,71 void Domain::move(int dx,int dy,const QSizeF& size)
121 qreal x = spanX() / size.width();
157 qreal x = spanX() / size.width();
122 qreal y = spanY() / size.height();
158 qreal y = spanY() / size.height();
123
159
124 if(dx!=0){
160 if(dx!=0) {
125 m_minX = m_minX + x * dx;
161 m_minX = m_minX + x * dx;
126 m_maxX = m_maxX + x * dx;
162 m_maxX = m_maxX + x * dx;
127 emit rangeXChanged(m_minX, m_maxX, m_tickXCount);
163 emit rangeXChanged(m_minX, m_maxX, m_tickXCount);
128 }
164 }
129 if(dy!=0){
165 if(dy!=0) {
130 m_minY = m_minY + y * dy;
166 m_minY = m_minY + y * dy;
131 m_maxY = m_maxY + y * dy;
167 m_maxY = m_maxY + y * dy;
132 emit rangeYChanged(m_minY, m_maxY, m_tickYCount);
168 emit rangeYChanged(m_minY, m_maxY, m_tickYCount);
133 }
169 }
134
170
135 emit domainChanged(m_minX, m_maxX, m_minY, m_maxY);
171 emit domainChanged(m_minX, m_maxX, m_minY, m_maxY);
136 }
172 }
137
173
138 void Domain::handleAxisRangeXChanged(qreal min,qreal max)
174 void Domain::handleAxisXChanged(qreal min,qreal max,int tickXCount,QChartAxis::LabelsSelection mode)
175 {
176 m_selection=mode;
177 setRange(min,max,m_minY, m_maxY,tickXCount,m_tickYCount);
178 }
179
180 void Domain::handleAxisYChanged(qreal min,qreal max,int tickYCount,QChartAxis::LabelsSelection mode)
139 {
181 {
140 setRange(min,max,m_minY, m_maxY);
182 m_selection=mode;
183 setRange(m_minX, m_maxX, min, max,m_tickXCount,tickYCount);
141 }
184 }
142
185
143 void Domain::handleAxisRangeYChanged(qreal min,qreal max)
186 //algorithm defined by Paul S.Heckbert GraphicalGems I
187
188 void Domain::niceNumbers(qreal &min, qreal &max, int &ticksCount)
144 {
189 {
145 setRange(m_minX, m_maxX, min, max);
190 if(m_selection!=QChartAxis::NativeLabelsSelection)
191 looseNiceNumbers(min,max,ticksCount);
146 }
192 }
147
193
148 void Domain::handleAxisXTicksCountChanged(int tickCount)
194 void Domain::looseNiceNumbers(qreal &min, qreal &max, int &ticksCount)
149 {
195 {
150 if(m_tickXCount!=tickCount){
196 qreal range = niceNumber(max-min,true); //range with ceiling
151 m_tickXCount=tickCount;
197 qreal step = niceNumber(range/(ticksCount-1),false);
152 emit rangeXChanged(m_minX,m_maxX, m_tickXCount);
198 min = floor(min/step);
153 }
199 max = ceil(max/step);
200 ticksCount = int(max-min) +1;
201 min*=step;
202 max*=step;
154 }
203 }
155
204
156 void Domain::handleAxisYTicksCountChanged(int tickCount)
205 //nice numbers can be expressed as form of 1*10^n, 2* 10^n or 5*10^n
206
207 qreal Domain::niceNumber(qreal x,bool ceiling)
157 {
208 {
158 if(m_tickYCount!=tickCount){
209 qreal z = pow(10,floor(log10(x))); //find corresponding number of the form of 10^n than is smaller than x
159 m_tickYCount=tickCount;
210 qreal q = x/z;//q<10 && q>=1;
160 emit rangeYChanged(m_minY,m_maxY, m_tickYCount);
211
212 if(ceiling) {
213 if(q <= 1.0) q=1;
214 else if(q <= 2.0) q=2;
215 else if(q <= 5.0) q=5;
216 else q=10;
217 }
218 else {
219 if(q < 1.5) q=1;
220 else if(q < 3.0) q=2;
221 else if(q < 7.0) q=5;
222 else q=10;
161 }
223 }
224 return q*z;
162 }
225 }
163
226
164 bool operator== (const Domain &domain1, const Domain &domain2)
227 bool operator== (const Domain &domain1, const Domain &domain2)
@@ -1,6 +1,7
1 #ifndef DOMAIN_H_
1 #ifndef DOMAIN_H_
2 #define DOMAIN_H_
2 #define DOMAIN_H_
3 #include "qchartglobal.h"
3 #include "qchartglobal.h"
4 #include "qchartaxis.h"
4 #include <QRectF>
5 #include <QRectF>
5 #include <QSizeF>
6 #include <QSizeF>
6
7
@@ -13,6 +14,7 public:
13 virtual ~Domain();
14 virtual ~Domain();
14
15
15 void setRange(qreal minX, qreal maxX, qreal minY, qreal maxY);
16 void setRange(qreal minX, qreal maxX, qreal minY, qreal maxY);
17 void setRange(qreal minX, qreal maxX, qreal minY, qreal maxY, int tickXCount, int tickYCount);
16 void setRangeX(qreal min, qreal max);
18 void setRangeX(qreal min, qreal max);
17 void setRangeY(qreal min, qreal max);
19 void setRangeY(qreal min, qreal max);
18 void setMinX(qreal min);
20 void setMinX(qreal min);
@@ -45,12 +47,14 signals:
45 void rangeXChanged(qreal min, qreal max, int tickXCount);
47 void rangeXChanged(qreal min, qreal max, int tickXCount);
46 void rangeYChanged(qreal min, qreal max, int tickYCount);
48 void rangeYChanged(qreal min, qreal max, int tickYCount);
47
49
48
49 public slots:
50 public slots:
50 void handleAxisRangeXChanged(qreal min,qreal max);
51 void handleAxisXChanged(qreal min,qreal max,int tickXCount,QChartAxis::LabelsSelection mode);
51 void handleAxisRangeYChanged(qreal min,qreal max);
52 void handleAxisYChanged(qreal min,qreal max,int tickYCount,QChartAxis::LabelsSelection mode);
52 void handleAxisXTicksCountChanged(int tickCount);
53
53 void handleAxisYTicksCountChanged(int tickCount);
54 private:
55 void niceNumbers(qreal &min, qreal &max, int &ticksCount);
56 void looseNiceNumbers(qreal &min, qreal &max, int &ticksCount);
57 qreal niceNumber(qreal x,bool celing);
54
58
55 private:
59 private:
56 qreal m_minX;
60 qreal m_minX;
@@ -59,6 +63,7 private:
59 qreal m_maxY;
63 qreal m_maxY;
60 int m_tickXCount;
64 int m_tickXCount;
61 int m_tickYCount;
65 int m_tickYCount;
66 QChartAxis::LabelsSelection m_selection;
62 };
67 };
63
68
64 QTCOMMERCIALCHART_END_NAMESPACE
69 QTCOMMERCIALCHART_END_NAMESPACE
@@ -245,14 +245,6 void QChart::zoomOut()
245 }
245 }
246
246
247 /*!
247 /*!
248 Resets to the default view.
249 */
250 void QChart::zoomReset()
251 {
252 m_presenter->zoomReset();
253 }
254
255 /*!
256 Returns the pointer to the x axis object of the chart
248 Returns the pointer to the x axis object of the chart
257 */
249 */
258 QChartAxis* QChart::axisX() const
250 QChartAxis* QChart::axisX() const
@@ -81,7 +81,6 public:
81 void zoomIn();
81 void zoomIn();
82 void zoomIn(const QRectF& rect);
82 void zoomIn(const QRectF& rect);
83 void zoomOut();
83 void zoomOut();
84 void zoomReset();
85 void scrollLeft();
84 void scrollLeft();
86 void scrollRight();
85 void scrollRight();
87 void scrollUp();
86 void scrollUp();
@@ -289,8 +289,10 void QChartView::mouseReleaseEvent(QMouseEvent *event)
289 event->accept();
289 event->accept();
290 }
290 }
291
291
292 if(event->button()==Qt::RightButton)
292 if(event->button()==Qt::RightButton){
293 m_chart->zoomReset();
293 m_chart->zoomOut();
294 event->accept();
295 }
294 }
296 }
295 else {
297 else {
296 QGraphicsView::mouseReleaseEvent(event);
298 QGraphicsView::mouseReleaseEvent(event);
General Comments 0
You need to be logged in to leave comments. Login now