##// END OF EJS Templates
floating value layout fix for barchart
sauimone -
r474:93c2b5b16561
parent child
Show More
@@ -1,110 +1,110
1 #include "percentbarpresenter_p.h"
1 #include "percentbarpresenter_p.h"
2 #include "bar_p.h"
2 #include "bar_p.h"
3 #include "barlabel_p.h"
3 #include "barlabel_p.h"
4 #include "barvalue_p.h"
4 #include "barvalue_p.h"
5 #include "separator_p.h"
5 #include "separator_p.h"
6 #include "qbarset.h"
6 #include "qbarset.h"
7 #include <QDebug>
7 #include <QDebug>
8
8
9 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9 QTCOMMERCIALCHART_BEGIN_NAMESPACE
10
10
11
11
12 PercentBarPresenter::PercentBarPresenter(QBarSeries *series, QGraphicsItem *parent) :
12 PercentBarPresenter::PercentBarPresenter(QBarSeries *series, QGraphicsItem *parent) :
13 BarPresenterBase(series, parent)
13 BarPresenterBase(series, parent)
14 {
14 {
15 }
15 }
16
16
17 void PercentBarPresenter::layoutChanged()
17 void PercentBarPresenter::layoutChanged()
18 {
18 {
19 // Scale bars to new layout
19 // Scale bars to new layout
20 // Layout for bars:
20 // Layout for bars:
21 if (mSeries->barsetCount() <= 0) {
21 if (mSeries->barsetCount() <= 0) {
22 qDebug() << "No sets in model!";
22 qDebug() << "No sets in model!";
23 // Nothing to do.
23 // Nothing to do.
24 return;
24 return;
25 }
25 }
26
26
27 if (childItems().count() == 0) {
27 if (childItems().count() == 0) {
28 qDebug() << "WARNING: PercentBarPresenter::layoutChanged called before graphics items are created!";
28 qDebug() << "WARNING: PercentBarPresenter::layoutChanged called before graphics items are created!";
29 return;
29 return;
30 }
30 }
31
31
32 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
32 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
33 qreal tW = mWidth;
33 qreal tW = mWidth;
34 qreal tC = mSeries->categoryCount() + 1;
34 qreal tC = mSeries->categoryCount() + 1;
35 qreal cC = mSeries->categoryCount() * 2 + 1;
35 qreal cC = mSeries->categoryCount() * 2 + 1;
36 mBarWidth = tW / cC;
36 mBarWidth = tW / cC;
37 qreal xStep = (tW/tC);
37 qreal xStep = (tW/tC);
38 qreal xPos = ((tW/tC) - mBarWidth / 2);
38 qreal xPos = ((tW/tC) - mBarWidth / 2);
39 qreal h = mHeight;
39 qreal h = mHeight;
40
40
41 int itemIndex(0);
41 int itemIndex(0);
42 int labelIndex(0);
42 int labelIndex(0);
43 for (int category = 0; category < mSeries->categoryCount(); category++) {
43 for (int category = 0; category < mSeries->categoryCount(); category++) {
44 qreal colSum = mSeries->categorySum(category);
44 qreal colSum = mSeries->categorySum(category);
45 qreal scale = (h / colSum);
45 qreal scale = (h / colSum);
46 qreal yPos = h;
46 qreal yPos = h;
47 for (int set=0; set < mSeries->barsetCount(); set++) {
47 for (int set=0; set < mSeries->barsetCount(); set++) {
48 qreal barHeight = mSeries->valueAt(set, category) * scale;
48 qreal barHeight = mSeries->valueAt(set, category) * scale;
49 Bar* bar = mBars.at(itemIndex);
49 Bar* bar = mBars.at(itemIndex);
50
50
51 // TODO: width settable per bar?
51 // TODO: width settable per bar?
52 bar->resize(mBarWidth, barHeight);
52 bar->resize(mBarWidth, barHeight);
53 bar->setBrush(mSeries->barsetAt(set)->brush());
53 bar->setBrush(mSeries->barsetAt(set)->brush());
54 bar->setPos(xPos, yPos-barHeight);
54 bar->setPos(xPos, yPos-barHeight);
55 itemIndex++;
55 itemIndex++;
56 yPos -= barHeight;
56 yPos -= barHeight;
57 }
57 }
58
58
59 // TODO: Layout for labels, remove magic number
59 // TODO: Layout for labels, remove magic number
60 BarLabel* label = mLabels.at(labelIndex);
60 BarLabel* label = mLabels.at(labelIndex);
61 label->setPos(xPos, mHeight + 20);
61 label->setPos(xPos, mHeight + 20);
62 labelIndex++;
62 labelIndex++;
63 xPos += xStep;
63 xPos += xStep;
64 }
64 }
65
65
66 // Position separators
66 // Position separators
67 xPos = xStep + xStep/2;
67 xPos = xStep + xStep/2;
68 for (int s=0; s < mSeries->categoryCount() - 1; s++) {
68 for (int s=0; s < mSeries->categoryCount() - 1; s++) {
69 Separator* sep = mSeparators.at(s);
69 Separator* sep = mSeparators.at(s);
70 sep->setPos(xPos,0);
70 sep->setPos(xPos,0);
71 sep->setSize(QSizeF(1,mHeight));
71 sep->setSize(QSizeF(1,mHeight));
72 xPos += xStep;
72 xPos += xStep;
73 }
73 }
74
74
75 // Position floating values
75 // Position floating values
76 itemIndex = 0;
76 itemIndex = 0;
77 xPos = ((tW/tC) - mBarWidth / 2);
77 xPos = (tW/tC);
78 for (int category=0; category < mSeries->categoryCount(); category++) {
78 for (int category=0; category < mSeries->categoryCount(); category++) {
79 qreal yPos = h;
79 qreal yPos = h;
80 qreal colSum = mSeries->categorySum(category);
80 qreal colSum = mSeries->categorySum(category);
81 qreal scale = (h / colSum);
81 qreal scale = (h / colSum);
82 for (int set=0; set < mSeries->barsetCount(); set++) {
82 for (int set=0; set < mSeries->barsetCount(); set++) {
83 qreal barHeight = mSeries->valueAt(set,category) * scale;
83 qreal barHeight = mSeries->valueAt(set,category) * scale;
84 BarValue* value = mFloatingValues.at(itemIndex);
84 BarValue* value = mFloatingValues.at(itemIndex);
85
85
86 // TODO: remove hard coding, apply layout
86 // TODO: remove hard coding, apply layout
87 value->resize(100,50);
87 value->resize(100,50);
88 value->setPos(xPos, yPos-barHeight/2);
88 value->setPos(xPos, yPos-barHeight/2);
89 value->setPen(QPen(QColor(255,255,255,255)));
89 value->setPen(QPen(QColor(255,255,255,255)));
90
90
91 if (mSeries->valueAt(set,category) != 0) {
91 if (mSeries->valueAt(set,category) != 0) {
92 int p = mSeries->percentageAt(set,category) * 100;
92 int p = mSeries->percentageAt(set,category) * 100;
93 QString vString(QString::number(p));
93 QString vString(QString::number(p));
94 vString.truncate(3);
94 vString.truncate(3);
95 vString.append("%");
95 vString.append("%");
96 value->setValueString(vString);
96 value->setValueString(vString);
97 } else {
97 } else {
98 value->setValueString(QString(""));
98 value->setValueString(QString(""));
99 }
99 }
100
100
101 itemIndex++;
101 itemIndex++;
102 yPos -= barHeight;
102 yPos -= barHeight;
103 }
103 }
104 xPos += xStep;
104 xPos += xStep;
105 }
105 }
106 }
106 }
107
107
108 #include "moc_percentbarpresenter_p.cpp"
108 #include "moc_percentbarpresenter_p.cpp"
109
109
110 QTCOMMERCIALCHART_END_NAMESPACE
110 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,113 +1,113
1 #include "stackedbarpresenter_p.h"
1 #include "stackedbarpresenter_p.h"
2 #include "bar_p.h"
2 #include "bar_p.h"
3 #include "barlabel_p.h"
3 #include "barlabel_p.h"
4 #include "barvalue_p.h"
4 #include "barvalue_p.h"
5 #include "separator_p.h"
5 #include "separator_p.h"
6 #include "qbarset.h"
6 #include "qbarset.h"
7 #include <QDebug>
7 #include <QDebug>
8
8
9 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9 QTCOMMERCIALCHART_BEGIN_NAMESPACE
10
10
11 StackedBarPresenter::StackedBarPresenter(QBarSeries *series, QGraphicsItem *parent) :
11 StackedBarPresenter::StackedBarPresenter(QBarSeries *series, QGraphicsItem *parent) :
12 BarPresenterBase(series,parent)
12 BarPresenterBase(series,parent)
13 {
13 {
14 }
14 }
15
15
16 StackedBarPresenter::~StackedBarPresenter()
16 StackedBarPresenter::~StackedBarPresenter()
17 {
17 {
18 }
18 }
19
19
20
20
21 void StackedBarPresenter::layoutChanged()
21 void StackedBarPresenter::layoutChanged()
22 {
22 {
23 // Scale bars to new layout
23 // Scale bars to new layout
24 // Layout for bars:
24 // Layout for bars:
25 if (mSeries->barsetCount() <= 0) {
25 if (mSeries->barsetCount() <= 0) {
26 qDebug() << "No sets in model!";
26 qDebug() << "No sets in model!";
27 // Nothing to do.
27 // Nothing to do.
28 return;
28 return;
29 }
29 }
30
30
31 if (mSeries->categoryCount() == 0) {
31 if (mSeries->categoryCount() == 0) {
32 qDebug() << "No categories in model!";
32 qDebug() << "No categories in model!";
33 // Nothing to do
33 // Nothing to do
34 return;
34 return;
35 }
35 }
36
36
37 if (childItems().count() == 0) {
37 if (childItems().count() == 0) {
38 qDebug() << "WARNING: StackedBarPresenter::layoutChanged called before graphics items are created!";
38 qDebug() << "WARNING: StackedBarPresenter::layoutChanged called before graphics items are created!";
39 return;
39 return;
40 }
40 }
41
41
42 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
42 // Use temporary qreals for accurancy (we might get some compiler warnings... :)
43 qreal maxSum = mSeries->maxCategorySum();
43 qreal maxSum = mSeries->maxCategorySum();
44 qreal h = mHeight;
44 qreal h = mHeight;
45 qreal scale = (h / maxSum);
45 qreal scale = (h / maxSum);
46 qreal tW = mWidth;
46 qreal tW = mWidth;
47 qreal tC = mSeries->categoryCount() + 1;
47 qreal tC = mSeries->categoryCount() + 1;
48 qreal cC = mSeries->categoryCount() * 2 + 1;
48 qreal cC = mSeries->categoryCount() * 2 + 1;
49 mBarWidth = tW / cC;
49 mBarWidth = tW / cC;
50 qreal xStep = (tW/tC);
50 qreal xStep = (tW/tC);
51 qreal xPos = ((tW/tC) - mBarWidth / 2);
51 qreal xPos = ((tW/tC) - mBarWidth / 2);
52
52
53 int itemIndex(0);
53 int itemIndex(0);
54 int labelIndex(0);
54 int labelIndex(0);
55 for (int category = 0; category < mSeries->categoryCount(); category++) {
55 for (int category = 0; category < mSeries->categoryCount(); category++) {
56 qreal yPos = h;
56 qreal yPos = h;
57 for (int set=0; set < mSeries->barsetCount(); set++) {
57 for (int set=0; set < mSeries->barsetCount(); set++) {
58 qreal barHeight = mSeries->valueAt(set, category) * scale;
58 qreal barHeight = mSeries->valueAt(set, category) * scale;
59 Bar* bar = mBars.at(itemIndex);
59 Bar* bar = mBars.at(itemIndex);
60
60
61 bar->resize(mBarWidth, barHeight);
61 bar->resize(mBarWidth, barHeight);
62 bar->setBrush(mSeries->barsetAt(set)->brush());
62 bar->setBrush(mSeries->barsetAt(set)->brush());
63 bar->setPos(xPos, yPos-barHeight);
63 bar->setPos(xPos, yPos-barHeight);
64 itemIndex++;
64 itemIndex++;
65 yPos -= barHeight;
65 yPos -= barHeight;
66 }
66 }
67
67
68 // TODO: Layout for labels, remove magic number
68 // TODO: Layout for labels, remove magic number
69 BarLabel* label = mLabels.at(labelIndex);
69 BarLabel* label = mLabels.at(labelIndex);
70 label->setPos(xPos, mHeight + 20);
70 label->setPos(xPos, mHeight + 20);
71 labelIndex++;
71 labelIndex++;
72 xPos += xStep;
72 xPos += xStep;
73 }
73 }
74
74
75 // Position separators
75 // Position separators
76 xPos = xStep + xStep/2;
76 xPos = xStep + xStep/2;
77 for (int s=0; s < mSeries->categoryCount() - 1; s++) {
77 for (int s=0; s < mSeries->categoryCount() - 1; s++) {
78 Separator* sep = mSeparators.at(s);
78 Separator* sep = mSeparators.at(s);
79 sep->setPos(xPos,0);
79 sep->setPos(xPos,0);
80 sep->setSize(QSizeF(1,mHeight));
80 sep->setSize(QSizeF(1,mHeight));
81 xPos += xStep;
81 xPos += xStep;
82 }
82 }
83
83
84 // Position floating values
84 // Position floating values
85 itemIndex = 0;
85 itemIndex = 0;
86 xPos = ((tW/tC) - mBarWidth / 2);
86 xPos = (tW/tC);
87 for (int category=0; category < mSeries->categoryCount(); category++) {
87 for (int category=0; category < mSeries->categoryCount(); category++) {
88 qreal yPos = h;
88 qreal yPos = h;
89 for (int set=0; set < mSeries->barsetCount(); set++) {
89 for (int set=0; set < mSeries->barsetCount(); set++) {
90 qreal barHeight = mSeries->valueAt(set,category) * scale;
90 qreal barHeight = mSeries->valueAt(set,category) * scale;
91 BarValue* value = mFloatingValues.at(itemIndex);
91 BarValue* value = mFloatingValues.at(itemIndex);
92
92
93 // TODO: remove hard coding, apply layout
93 // TODO: remove hard coding, apply layout
94 value->resize(100,50);
94 value->resize(100,50);
95 value->setPos(xPos, yPos-barHeight/2);
95 value->setPos(xPos, yPos-barHeight/2);
96 value->setPen(QPen(QColor(255,255,255,255)));
96 value->setPen(QPen(QColor(255,255,255,255)));
97
97
98 if (mSeries->valueAt(set,category) != 0) {
98 if (mSeries->valueAt(set,category) != 0) {
99 value->setValueString(QString::number(mSeries->valueAt(set,category)));
99 value->setValueString(QString::number(mSeries->valueAt(set,category)));
100 } else {
100 } else {
101 value->setValueString(QString(""));
101 value->setValueString(QString(""));
102 }
102 }
103
103
104 itemIndex++;
104 itemIndex++;
105 yPos -= barHeight;
105 yPos -= barHeight;
106 }
106 }
107 xPos += xStep;
107 xPos += xStep;
108 }
108 }
109 }
109 }
110
110
111 #include "moc_stackedbarpresenter_p.cpp"
111 #include "moc_stackedbarpresenter_p.cpp"
112
112
113 QTCOMMERCIALCHART_END_NAMESPACE
113 QTCOMMERCIALCHART_END_NAMESPACE
General Comments 0
You need to be logged in to leave comments. Login now