##// END OF EJS Templates
Tuned and documented custom chart example
Tuned and documented custom chart example

File last commit:

r865:3d4b7b537fe2
r942:b4a64675baff
Show More
barchartitem.cpp
215 lines | 6.3 KiB | text/x-c | CppLexer
Jani Honkonen
Add license headers
r794 /****************************************************************************
**
** Copyright (C) 2012 Digia Plc
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
** This file is part of the Qt Commercial Charts Add-on.
**
** $QT_BEGIN_LICENSE$
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com
** $QT_END_LICENSE$
**
****************************************************************************/
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 #include "barchartitem_p.h"
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 #include "bar_p.h"
sauimone
renamed barchart floating values with labels to be consistent with piechart
r820 #include "barlabel_p.h"
sauimone
minor fix
r240 #include "qbarset.h"
sauimone
Naming convention change for barcharts. QBarChartSeries is now QBarSeries etc.
r338 #include "qbarseries.h"
sauimone
Labels for barchart to axis
r487 #include "qchart.h"
#include "qchartaxis.h"
#include "qchartaxiscategories.h"
sauimone
barhcart zvalue added
r594 #include "chartpresenter_p.h"
sauimone
Animation framework for barchart.
r671 #include "chartanimator_p.h"
Michal Klocek
Refactors barchart axis hadnling...
r679 #include "chartdataset_p.h"
sauimone
moved tooltip to presenter
r288 #include <QToolTip>
sauimone
fixed clipping in barcharts
r839 #include <QPainter>
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Refactors chartitem...
r677 BarChartItem::BarChartItem(QBarSeries *series, ChartPresenter *presenter) :
ChartItem(presenter),
sauimone
minor code review fixes, part n
r763 m_layoutSet(false),
m_series(series)
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 {
sauimone
barchart mouse event fix
r852 setFlag(ItemClipsChildrenToShape);
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737 connect(series, SIGNAL(showToolTip(QPoint,QString)), this, SLOT(showToolTip(QPoint,QString)));
sauimone
barchart animation mechanics working. still some todo
r681 connect(series, SIGNAL(updatedBars()), this, SLOT(handleLayoutChanged()));
sauimone
percent barchart layout fix. signal fix
r850 connect(series, SIGNAL(restructuredBars()), this, SLOT(handleModelChanged()));
sauimone
barhcart zvalue added
r594 setZValue(ChartPresenter::BarSeriesZValue);
sauimone
added labels to series, intergrated with test app. minor hack to test app
r167 dataChanged();
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 }
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 BarChartItem::~BarChartItem()
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 {
sauimone
moved tooltip to presenter
r288 disconnect(this,SLOT(showToolTip(QPoint,QString)));
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 }
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 void BarChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 {
sauimone
barchart mouse event fix
r852 Q_UNUSED(painter);
Q_UNUSED(option);
Q_UNUSED(widget);
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 }
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 QRectF BarChartItem::boundingRect() const
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 {
sauimone
fixed clipping in barcharts
r839 return m_rect.translated(-m_rect.topLeft());
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 }
sauimone
bug fix in bar charts. Crashed, if layout was set before data. Also integrated to test app.
r165
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 void BarChartItem::dataChanged()
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 {
sauimone
removed barchartseriesbase. functionality is now in model
r172 // TODO: performance optimizations. Do we really need to delete and create items every time data is changed or can we reuse them?
sauimone
barchart mouse event fix
r852 foreach(QGraphicsItem *item, childItems()) {
delete item;
}
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126
sauimone
minor code review fixes, part n
r763 m_bars.clear();
sauimone
renamed barchart floating values with labels to be consistent with piechart
r820 m_labels.clear();
sauimone
minor code review fixes, part n
r763 m_layout.clear();
sauimone
Bug fix for bar presenters. It appears that order of childItems may change. Relying on order caused crash
r256
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 // Create new graphic items for bars
sauimone
minor code review fixes, part n
r763 for (int c = 0; c < m_series->categoryCount(); c++) {
QString category = m_series->categoryName(c);
for (int s = 0; s < m_series->barsetCount(); s++) {
QBarSet *set = m_series->barsetAt(s);
sauimone
barchart mouse event fix
r852 Bar *bar = new Bar(category,this);
sauimone
minor code review fixes, part n
r763 m_bars.append(bar);
sauimone
combined clicked and rightclicked signals in barchart
r812 connect(bar, SIGNAL(clicked(QString,Qt::MouseButtons)), set, SIGNAL(clicked(QString,Qt::MouseButtons)));
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737 connect(bar, SIGNAL(hoverEntered(QPoint)), set, SLOT(barHoverEnterEvent(QPoint)));
connect(bar, SIGNAL(hoverLeaved()), set, SLOT(barHoverLeaveEvent()));
sauimone
minor code review fixes, part n
r763 m_layout.append(QRectF(0, 0, 0, 0));
sauimone
signals and slots for bars and sets
r239 }
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 }
sauimone
cleanup on barseries. removed old commented out separator code
r654
sauimone
renamed barchart floating values with labels to be consistent with piechart
r820 // Create labels
sauimone
minor code review fixes, part n
r763 for (int category = 0; category < m_series->categoryCount(); category++) {
for (int s = 0; s < m_series->barsetCount(); s++) {
QBarSet *set = m_series->barsetAt(s);
sauimone
barchart mouse event fix
r852 BarLabel *value = new BarLabel(*set, this);
sauimone
renamed barchart floating values with labels to be consistent with piechart
r820 m_labels.append(value);
connect(set,SIGNAL(labelsVisibleChanged(bool)),value,SLOT(labelsVisibleChanged(bool)));
sauimone
Floating values to bar charts
r263 }
}
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 }
sauimone
split legend layout to vertical and horizontal functions
r810
sauimone
barchart animation mechanics working. still some todo
r681 QVector<QRectF> BarChartItem::calculateLayout()
sauimone
Animation framework for barchart.
r671 {
sauimone
barchart animation mechanics working. still some todo
r681 QVector<QRectF> layout;
sauimone
percent barchart layout fix. signal fix
r850 // Use temporary qreals for accurancy
sauimone
minor code review fixes, part n
r763 qreal categoryCount = m_series->categoryCount();
qreal setCount = m_series->barsetCount();
sauimone
barchart animation mechanics working. still some todo
r681
sauimone
percent barchart layout fix. signal fix
r850 // Domain:
sauimone
build error fix after merge
r682 qreal width = geometry().width();
qreal height = geometry().height();
sauimone
percent barchart layout fix. signal fix
r850 qreal range = m_domainMaxY - m_domainMinY;
qreal scale = (height / range);
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737 qreal categoryWidth = width / categoryCount;
sauimone
build error fix after merge
r682 qreal barWidth = categoryWidth / (setCount+1);
sauimone
barchart animation mechanics working. still some todo
r681
int itemIndex(0);
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737 for (int category = 0; category < categoryCount; category++) {
qreal xPos = categoryWidth * category + barWidth / 2;
sauimone
percent barchart layout fix. signal fix
r850 qreal yPos = height + scale * m_domainMinY;
sauimone
barchart animation mechanics working. still some todo
r681 for (int set = 0; set < setCount; set++) {
sauimone
Barchart value layout fix
r817 QBarSet* barSet = m_series->barsetAt(set);
qreal barHeight = barSet->valueAt(category) * scale;
sauimone
minor code review fixes, part n
r763 Bar* bar = m_bars.at(itemIndex);
sauimone
barchart animation mechanics working. still some todo
r681
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737 QRectF rect(xPos, yPos - barHeight, barWidth, barHeight);
sauimone
barchart animation mechanics working. still some todo
r681 layout.append(rect);
sauimone
Barchart value layout fix
r817 bar->setPen(barSet->pen());
bar->setBrush(barSet->brush());
sauimone
barchart animation mechanics working. still some todo
r681
sauimone
renamed barchart floating values with labels to be consistent with piechart
r820 BarLabel* label = m_labels.at(itemIndex);
sauimone
barchart animation mechanics working. still some todo
r681
sauimone
Barchart value layout fix
r817 if (!qFuzzyIsNull(barSet->valueAt(category))) {
sauimone
renamed barchart floating values with labels to be consistent with piechart
r820 label->setText(QString::number(barSet->valueAt(category)));
sauimone
barchart animation mechanics working. still some todo
r681 } else {
sauimone
renamed barchart floating values with labels to be consistent with piechart
r820 label->setText(QString(""));
sauimone
barchart animation mechanics working. still some todo
r681 }
sauimone
renamed barchart floating values with labels to be consistent with piechart
r820 label->setPos(xPos + (rect.width()/2 - label->boundingRect().width()/2)
,yPos - barHeight/2 - label->boundingRect().height()/2);
sauimone
fixed clipping in barcharts
r839 label->setFont(barSet->labelFont());
sauimone
simple text item for barvalue
r811
sauimone
barchart animation mechanics working. still some todo
r681 itemIndex++;
sauimone
build error fix after merge
r682 xPos += barWidth;
sauimone
barchart animation mechanics working. still some todo
r681 }
}
sauimone
Animation framework for barchart.
r671 return layout;
}
sauimone
barchart animation mechanics working. still some todo
r681 void BarChartItem::applyLayout(const QVector<QRectF> &layout)
sauimone
Animation framework for barchart.
r671 {
Michal Klocek
Refactors barchart axis hadnling...
r679 if (animator())
sauimone
minor code review fixes, part n
r763 animator()->updateLayout(this, m_layout, layout);
sauimone
Animation framework for barchart.
r671 else
setLayout(layout);
}
sauimone
barchart animation mechanics working. still some todo
r681 void BarChartItem::setLayout(const QVector<QRectF> &layout)
sauimone
Animation framework for barchart.
r671 {
sauimone
minor code review fixes, part n
r763 m_layout = layout;
sauimone
barchart animation mechanics working. still some todo
r681
sauimone
minor code review fixes, part n
r763 for (int i=0; i < m_bars.count(); i++)
m_bars.at(i)->setRect(layout.at(i));
sauimone
barchart animation mechanics working. still some todo
r681
sauimone
Animation framework for barchart.
r671 update();
}
Michal Klocek
Refactored for MVP...
r139 //handlers
sauimone
barchart item handleModelChanged slot fix
r865 void BarChartItem::handleModelChanged()
Michal Klocek
Refactored for MVP...
r139 {
sauimone
model delegate for bar series. updated examples
r161 dataChanged();
Michal Klocek
Refactored for MVP...
r139 }
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 void BarChartItem::handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY)
Michal Klocek
Refactored for MVP...
r139 {
sauimone
minor code review fixes, part n
r763 m_domainMinX = minX;
m_domainMaxX = maxX;
m_domainMinY = minY;
m_domainMaxY = maxY;
sauimone
barchart animation mechanics working. still some todo
r681 handleLayoutChanged();
Michal Klocek
Refactored for MVP...
r139 }
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737 void BarChartItem::handleGeometryChanged(const QRectF &rect)
Michal Klocek
Refactored for MVP...
r139 {
sauimone
percent barchart layout fix. signal fix
r850 prepareGeometryChange();
sauimone
fixed clipping in barcharts
r839 m_clipRect = rect.translated(-rect.topLeft());
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737 m_rect = rect;
sauimone
build error fix after merge
r682 handleLayoutChanged();
sauimone
minor code review fixes, part n
r763 m_layoutSet = true;
Michal Klocek
Refactored for MVP...
r139 setPos(rect.topLeft());
}
sauimone
Animation framework for barchart.
r671 void BarChartItem::handleLayoutChanged()
{
sauimone
percent barchart layout fix. signal fix
r850 if ((m_rect.width() <= 0) || (m_rect.height() <= 0)) {
// rect size zero.
return;
}
sauimone
barchart animation mechanics working. still some todo
r681 QVector<QRectF> layout = calculateLayout();
sauimone
Animation framework for barchart.
r671 applyLayout(layout);
update();
}
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 void BarChartItem::showToolTip(QPoint pos, QString tip)
sauimone
moved tooltip to presenter
r288 {
sauimone
enablers for tooltip and floating values, bug fixing, updated examples. tidying up the code
r296 // TODO: cool tooltip instead of default
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737 QToolTip::showText(pos, tip);
sauimone
moved tooltip to presenter
r288 }
sauimone
barcharts: added legend to model. added signals for hover events (for tooltip). updated examples
r280
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 #include "moc_barchartitem_p.cpp"
Michal Klocek
Refactored for MVP...
r139
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 QTCOMMERCIALCHART_END_NAMESPACE