##// END OF EJS Templates
animations to stacked and percent barchart
sauimone -
r694:08035ff71c15
parent child
Show More
@@ -88,103 +88,8 void BarChartItem::dataChanged()
88 }
88 }
89 }
89 }
90 }
90 }
91 /*
92 void BarChartItem::layoutChanged()
93 {
94 qDebug() << "Deprecated BarChartItem::layoutChanged called. aborting";
95 return;
96 // Scale bars to new layout
97 // Layout for bars:
98 if (mSeries->barsetCount() <= 0) {
99 qDebug() << "No sets in model!";
100 return;
101 }
102
103 if (childItems().count() == 0) {
104 qDebug() << "WARNING: BarChartitem::layoutChanged called before graphics items are created!";
105 return;
106 }
107
108
109 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
110 qreal categoryCount = mSeries->categoryCount();
111 qreal setCount = mSeries->barsetCount();
112 qreal max = mSeries->max();
113
114 // Domain:
115 if (mDomainMaxY > max) {
116 max = mDomainMaxY;
117 }
118
119 qreal width = geometry().width();
120 qreal height = geometry().height();
121 qreal scale = (height/max);
122 qreal categoryWidth = width/categoryCount;
123 qreal barWidth = categoryWidth / (setCount+1);
124
125 BarLayout layout;
126
127 int itemIndex(0);
128 for (int category=0; category < categoryCount; category++) {
129 qreal xPos = categoryWidth * category + barWidth/2;
130 qreal yPos = height;
131 for (int set = 0; set < setCount; set++) {
132 qreal barHeight = mSeries->valueAt(set,category) * scale;
133 Bar* bar = mBars.at(itemIndex);
134
135 QRectF rect(xPos,yPos-barHeight,mBarWidth,barHeight);
136 layout.insert(bar,rect);
137 // TODO: width settable per bar?
138 bar->setRect(xPos, yPos-barHeight,barWidth, barHeight);
139 bar->setPen(mSeries->barsetAt(set)->pen());
140 bar->setBrush(mSeries->barsetAt(set)->brush());
141
142 // bar->resize(mBarWidth, barHeight);
143 // layout.insert(bar,QSizeF(mBarWidth,barHeight));
144 bar->setPen(mSeries->barsetAt(set)->pen());
145 bar->setBrush(mSeries->barsetAt(set)->brush());
146 // bar->setPos(xPos, yPos-barHeight);
147 itemIndex++;
148 xPos += barWidth;
149 }
150 }
151
152 // Position floating values
153 itemIndex = 0;
154 for (int category=0; category < mSeries->categoryCount(); category++) {
155 qreal xPos = categoryWidth * category + categoryWidth/2 + barWidth;
156 qreal yPos = height;
157 for (int set=0; set < mSeries->barsetCount(); set++) {
158 qreal barHeight = mSeries->valueAt(set,category) * scale;
159 BarValue* value = mFloatingValues.at(itemIndex);
160
161 QBarSet* barSet = mSeries->barsetAt(set);
162 value->resize(100,50); // TODO: proper layout for this.
163 value->setPos(xPos, yPos-barHeight/2);
164 value->setPen(barSet->floatingValuePen());
165
166 if (mSeries->valueAt(set,category) != 0) {
167 value->setValueString(QString::number(mSeries->valueAt(set,category)));
168 } else {
169 value->setValueString(QString(""));
170 }
171
172 itemIndex++;
173 xPos += barWidth;
174 }
175 }
176 // update();
177 }
178 */
179 QVector<QRectF> BarChartItem::calculateLayout()
91 QVector<QRectF> BarChartItem::calculateLayout()
180 {
92 {
181 // layoutChanged();
182 /*
183 BarLayout layout;
184 foreach(Bar* bar, mBars) {
185 layout.insert(bar,bar->boundingRect());
186 }
187 */
188 QVector<QRectF> layout;
93 QVector<QRectF> layout;
189
94
190 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
95 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
@@ -214,14 +119,9 QVector<QRectF> BarChartItem::calculateLayout()
214 Bar* bar = mBars.at(itemIndex);
119 Bar* bar = mBars.at(itemIndex);
215
120
216 QRectF rect(xPos,yPos-barHeight,barWidth,barHeight);
121 QRectF rect(xPos,yPos-barHeight,barWidth,barHeight);
217 //layout.insert(bar,rect);
218 layout.append(rect);
122 layout.append(rect);
219 // TODO: width settable per bar?
220 // bar->resize(mBarWidth, barHeight);
221 // layout.insert(bar,QSizeF(mBarWidth,barHeight));
222 bar->setPen(mSeries->barsetAt(set)->pen());
123 bar->setPen(mSeries->barsetAt(set)->pen());
223 bar->setBrush(mSeries->barsetAt(set)->brush());
124 bar->setBrush(mSeries->barsetAt(set)->brush());
224 // bar->setPos(xPos, yPos-barHeight);
225 itemIndex++;
125 itemIndex++;
226 xPos += barWidth;
126 xPos += barWidth;
227 }
127 }
@@ -268,8 +168,6 void BarChartItem::setLayout(const QVector<QRectF> &layout)
268 mLayout = layout;
168 mLayout = layout;
269
169
270 for (int i=0; i<mBars.count(); i++) {
170 for (int i=0; i<mBars.count(); i++) {
271 //mBars.at(i)->setSize(layout.at(i).size());
272 //mBars.at(i)->setPos(layout.at(i).topLeft());
273 mBars.at(i)->setRect(layout.at(i));
171 mBars.at(i)->setRect(layout.at(i));
274 }
172 }
275
173
@@ -34,10 +34,9 public:
34 // TODO: Consider the domain for layoutChanged. May be use case, may not be. If it is, then the derived classes need to implement it
34 // TODO: Consider the domain for layoutChanged. May be use case, may not be. If it is, then the derived classes need to implement it
35 virtual void dataChanged(); // data of series has changed -> need to recalculate bar sizes
35 virtual void dataChanged(); // data of series has changed -> need to recalculate bar sizes
36 private slots:
36 private slots:
37 //virtual void layoutChanged(); // layout has changed -> need to recalculate bar sizes
38
37
39 public:
38 public:
40 QVector<QRectF> calculateLayout();
39 virtual QVector<QRectF> calculateLayout();
41 void applyLayout(const QVector<QRectF> &layout);
40 void applyLayout(const QVector<QRectF> &layout);
42 void setLayout(const QVector<QRectF> &layout);
41 void setLayout(const QVector<QRectF> &layout);
43 void updateLayout(const QVector<QRectF> &layout);
42 void updateLayout(const QVector<QRectF> &layout);
@@ -11,20 +11,9 PercentBarChartItem::PercentBarChartItem(QBarSeries *series, ChartPresenter* pre
11 {
11 {
12 }
12 }
13
13
14 void PercentBarChartItem::layoutChanged()
14 QVector<QRectF> PercentBarChartItem::calculateLayout()
15 {
15 {
16 // Scale bars to new layout
16 QVector<QRectF> layout;
17 // Layout for bars:
18 if (mSeries->barsetCount() <= 0) {
19 qDebug() << "No sets in model!";
20 // Nothing to do.
21 return;
22 }
23
24 if (childItems().count() == 0) {
25 qDebug() << "WARNING: PercentBarChartItem::layoutChanged called before graphics items are created!";
26 return;
27 }
28
17
29 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
18 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
30 qreal width = geometry().width();
19 qreal width = geometry().width();
@@ -43,13 +32,10 void PercentBarChartItem::layoutChanged()
43 for (int set=0; set < mSeries->barsetCount(); set++) {
32 for (int set=0; set < mSeries->barsetCount(); set++) {
44 qreal barHeight = mSeries->valueAt(set, category) * scale;
33 qreal barHeight = mSeries->valueAt(set, category) * scale;
45 Bar* bar = mBars.at(itemIndex);
34 Bar* bar = mBars.at(itemIndex);
46
47 // TODO: width settable per bar?
48
49 bar->setPen(mSeries->barsetAt(set)->pen());
35 bar->setPen(mSeries->barsetAt(set)->pen());
50 bar->setRect(xPos, yPos-barHeight,barWidth, barHeight);
51 bar->setBrush(mSeries->barsetAt(set)->brush());
36 bar->setBrush(mSeries->barsetAt(set)->brush());
52
37 QRectF rect(xPos, yPos-barHeight,barWidth, barHeight);
38 layout.append(rect);
53 itemIndex++;
39 itemIndex++;
54 yPos -= barHeight;
40 yPos -= barHeight;
55 }
41 }
@@ -87,6 +73,7 void PercentBarChartItem::layoutChanged()
87 }
73 }
88 xPos += xStep;
74 xPos += xStep;
89 }
75 }
76 return layout;
90 }
77 }
91
78
92 #include "moc_percentbarchartitem_p.cpp"
79 #include "moc_percentbarchartitem_p.cpp"
@@ -15,8 +15,7 public:
15 PercentBarChartItem(QBarSeries *series, ChartPresenter *presenter);
15 PercentBarChartItem(QBarSeries *series, ChartPresenter *presenter);
16
16
17 private:
17 private:
18
18 virtual QVector<QRectF> calculateLayout();
19 void layoutChanged(); // layout has changed -> need to recalculate bar sizes
20
19
21 private:
20 private:
22
21
@@ -16,27 +16,9 StackedBarChartItem::~StackedBarChartItem()
16 }
16 }
17
17
18
18
19 void StackedBarChartItem::layoutChanged()
19 QVector<QRectF> StackedBarChartItem::calculateLayout()
20 {
20 {
21 // Scale bars to new layout
21 QVector<QRectF> layout;
22 // Layout for bars:
23 if (mSeries->barsetCount() <= 0) {
24 qDebug() << "No sets in model!";
25 // Nothing to do.
26 return;
27 }
28
29 if (mSeries->categoryCount() == 0) {
30 qDebug() << "No categories in model!";
31 // Nothing to do
32 return;
33 }
34
35 if (childItems().count() == 0) {
36 qDebug() << "WARNING: StackedBarChartItem::layoutChanged called before graphics items are created!";
37 return;
38 }
39
40 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
22 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
41
23
42 qreal maxSum = mSeries->maxCategorySum();
24 qreal maxSum = mSeries->maxCategorySum();
@@ -53,7 +35,6 void StackedBarChartItem::layoutChanged()
53 qreal xStep = width/categotyCount;
35 qreal xStep = width/categotyCount;
54 qreal xPos = xStep/2 - barWidth/2;
36 qreal xPos = xStep/2 - barWidth/2;
55
37
56
57 int itemIndex(0);
38 int itemIndex(0);
58 for (int category = 0; category < categotyCount; category++) {
39 for (int category = 0; category < categotyCount; category++) {
59 qreal yPos = height;
40 qreal yPos = height;
@@ -62,7 +43,8 void StackedBarChartItem::layoutChanged()
62 Bar* bar = mBars.at(itemIndex);
43 Bar* bar = mBars.at(itemIndex);
63 bar->setPen(mSeries->barsetAt(set)->pen());
44 bar->setPen(mSeries->barsetAt(set)->pen());
64 bar->setBrush(mSeries->barsetAt(set)->brush());
45 bar->setBrush(mSeries->barsetAt(set)->brush());
65 bar->setRect(xPos, yPos-barHeight,barWidth, barHeight);
46 QRectF rect(xPos,yPos-barHeight,barWidth,barHeight);
47 layout.append(rect);
66 itemIndex++;
48 itemIndex++;
67 yPos -= barHeight;
49 yPos -= barHeight;
68 }
50 }
@@ -94,6 +76,7 void StackedBarChartItem::layoutChanged()
94 }
76 }
95 xPos += xStep;
77 xPos += xStep;
96 }
78 }
79 return layout;
97 }
80 }
98
81
99 #include "moc_stackedbarchartitem_p.cpp"
82 #include "moc_stackedbarchartitem_p.cpp"
@@ -16,7 +16,7 public:
16
16
17 private:
17 private:
18 // From BarChartItem
18 // From BarChartItem
19 void layoutChanged(); // layout has changed -> need to recalculate bar sizes
19 virtual QVector<QRectF> calculateLayout();
20
20
21 private:
21 private:
22
22
General Comments 0
You need to be logged in to leave comments. Login now