##// END OF EJS Templates
Use light outline color instead of dark for bar, area and scatter
Use light outline color instead of dark for bar, area and scatter

File last commit:

r634:5a177f3a506b
r653:f4e416c6727f
Show More
piechartitem.cpp
190 lines | 5.2 KiB | text/x-c | CppLexer
Jani Honkonen
Rename piepresenter -> piechartitem
r568 #include "piechartitem_p.h"
Jani Honkonen
Add _p to pie internal headers
r353 #include "pieslice_p.h"
Jani Honkonen
Refactor pie (again). QPieSlice's now emit signals and no id's anymore. Just pointers in the interface.
r203 #include "qpieslice.h"
Jani Honkonen
Make pie fit better inside its given rectangle. Label texts still go outside. Needs a bit more work...
r289 #include "qpieseries.h"
Tero Ahola
Z order for pie
r490 #include "chartpresenter_p.h"
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 #include "chartanimator_p.h"
Jani Honkonen
Pie chart refactoring
r142 #include <QDebug>
Jani Honkonen
Added a pie chart customization example and refactoring the pie interface.
r437 #include <QPainter>
Jani Honkonen
Refactoring pie series and animations.
r621 #include <QTimer>
Jani Honkonen
Pie chart refactoring
r142
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Jani Honkonen
Rename piepresenter -> piechartitem
r568 PieChartItem::PieChartItem(QGraphicsItem *parent, QPieSeries *series)
Jani Honkonen
Refactoring piechart API (and internals)
r174 :ChartItem(parent),
m_series(series)
Jani Honkonen
Pie chart refactoring
r142 {
Q_ASSERT(series);
Jani Honkonen
Refactoring pie series and animations.
r621 connect(series, SIGNAL(added(QList<QPieSlice*>)), this, SLOT(handleSlicesAdded(QList<QPieSlice*>)));
connect(series, SIGNAL(removed(QList<QPieSlice*>)), this, SLOT(handleSlicesRemoved(QList<QPieSlice*>)));
connect(series, SIGNAL(piePositionChanged()), this, SLOT(handlePieLayoutChanged()));
connect(series, SIGNAL(pieSizeChanged()), this, SLOT(handlePieLayoutChanged()));
QTimer::singleShot(0, this, SLOT(initialize()));
Tero Ahola
Z order for pie
r490
// Note: the following does not affect as long as the item does not have anything to paint
setZValue(ChartPresenter::PieSeriesZValue);
Jani Honkonen
Pie chart refactoring
r142 }
Jani Honkonen
Rename piepresenter -> piechartitem
r568 PieChartItem::~PieChartItem()
Jani Honkonen
Pie chart refactoring
r142 {
Jani Honkonen
Refactoring piechart API (and internals)
r174 // slices deleted automatically through QGraphicsItem
Jani Honkonen
Pie chart refactoring
r142 }
Jani Honkonen
Rename piepresenter -> piechartitem
r568 void PieChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
Jani Honkonen
Pie chart refactoring
r142 {
Tero Ahola
Squashed bunch of warnings
r611 Q_UNUSED(painter)
Jani Honkonen
Refactoring piechart API (and internals)
r174 // TODO: paint shadows for all components
// - get paths from items & merge & offset and draw with shadow color?
Jani Honkonen
Added a pie chart customization example and refactoring the pie interface.
r437 //painter->setBrush(QBrush(Qt::red));
//painter->drawRect(m_debugRect);
Jani Honkonen
Refactoring piechart API (and internals)
r174 }
Jani Honkonen
Refactoring pie series and animations.
r621 void PieChartItem::initialize()
{
handleSlicesAdded(m_series->m_slices);
}
void PieChartItem::handleSlicesAdded(QList<QPieSlice*> slices)
{
Jani Honkonen
Nicer animation for adding a pie initially.
r634 bool isEmpty = m_slices.isEmpty();
Jani Honkonen
Refactoring pie series and animations.
r621 foreach (QPieSlice *s, slices) {
PieSlice* slice = new PieSlice(this);
m_slices.insert(s, slice);
connect(s, SIGNAL(changed()), this, SLOT(handleSliceChanged()));
connect(slice, SIGNAL(clicked()), s, SIGNAL(clicked()));
connect(slice, SIGNAL(hoverEnter()), s, SIGNAL(hoverEnter()));
connect(slice, SIGNAL(hoverLeave()), s, SIGNAL(hoverLeave()));
PieSliceLayout layout = calculateSliceLayout(s);
if (m_animator)
Jani Honkonen
Nicer animation for adding a pie initially.
r634 m_animator->addAnimation(this, s, layout, isEmpty);
Jani Honkonen
Refactoring pie series and animations.
r621 else
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 setLayout(s, layout);
Jani Honkonen
Refactoring pie series and animations.
r621 }
}
void PieChartItem::handleSlicesRemoved(QList<QPieSlice*> slices)
{
foreach (QPieSlice *s, slices) {
if (m_animator)
m_animator->removeAnimation(this, s);
else
destroySlice(s);
}
}
void PieChartItem::handlePieLayoutChanged()
Jani Honkonen
Refactoring piechart API (and internals)
r174 {
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 PieLayout layout = calculateLayout();
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 applyLayout(layout);
Jani Honkonen
Refactoring the pie for animations (no actual animations yet)
r566 update();
}
Jani Honkonen
Pie chart refactoring
r142
Jani Honkonen
Rename piepresenter -> piechartitem
r568 void PieChartItem::handleSliceChanged()
Jani Honkonen
Refactoring the pie for animations (no actual animations yet)
r566 {
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 QPieSlice* slice = qobject_cast<QPieSlice *>(sender());
Q_ASSERT(m_slices.contains(slice));
Jani Honkonen
Refactoring pie series and animations.
r621 PieSliceLayout layout = calculateSliceLayout(slice);
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 updateLayout(slice, layout);
Jani Honkonen
Refactoring the pie for animations (no actual animations yet)
r566 update();
Jani Honkonen
Refactor pie (again). QPieSlice's now emit signals and no id's anymore. Just pointers in the interface.
r203 }
Jani Honkonen
Refactoring piechart API (and internals)
r174
Jani Honkonen
Rename piepresenter -> piechartitem
r568 void PieChartItem::handleDomainChanged(qreal, qreal, qreal, qreal)
Jani Honkonen
Refactor pie (again). QPieSlice's now emit signals and no id's anymore. Just pointers in the interface.
r203 {
// TODO
}
Jani Honkonen
Rename piepresenter -> piechartitem
r568 void PieChartItem::handleGeometryChanged(const QRectF& rect)
Jani Honkonen
Refactor pie (again). QPieSlice's now emit signals and no id's anymore. Just pointers in the interface.
r203 {
Jani Honkonen
Make pie fit better inside its given rectangle. Label texts still go outside. Needs a bit more work...
r289 prepareGeometryChange();
Jani Honkonen
Refactoring the pie for animations (no actual animations yet)
r566 m_rect = rect;
Jani Honkonen
Refactoring pie series and animations.
r621 handlePieLayoutChanged();
Jani Honkonen
Pie chart refactoring
r142 }
Jani Honkonen
Refactoring pie series and animations.
r621 void PieChartItem::calculatePieLayout()
Jani Honkonen
Refactoring the pie for animations (no actual animations yet)
r566 {
Jani Honkonen
Introducing vertical and horizontal factors to control the position of the pie.
r454 // find pie center coordinates
Jani Honkonen
Refactoring pie series and animations.
r621 m_pieCenter.setX(m_rect.left() + (m_rect.width() * m_series->pieHorizontalPosition()));
m_pieCenter.setY(m_rect.top() + (m_rect.height() * m_series->pieVerticalPosition()));
Jani Honkonen
Added a pie chart customization example and refactoring the pie interface.
r437
Jani Honkonen
Introducing vertical and horizontal factors to control the position of the pie.
r454 // find maximum radius for pie
Jani Honkonen
Refactoring pie series and animations.
r621 m_pieRadius = m_rect.height() / 2;
Jani Honkonen
Introducing vertical and horizontal factors to control the position of the pie.
r454 if (m_rect.width() < m_rect.height())
Jani Honkonen
Refactoring pie series and animations.
r621 m_pieRadius = m_rect.width() / 2;
Jani Honkonen
Added a pie chart customization example and refactoring the pie interface.
r437
Jani Honkonen
Introducing vertical and horizontal factors to control the position of the pie.
r454 // apply size factor
Jani Honkonen
Refactoring pie series and animations.
r621 m_pieRadius *= m_series->pieSize();
}
Jani Honkonen
Added a pie chart customization example and refactoring the pie interface.
r437
Jani Honkonen
Refactoring pie series and animations.
r621 PieSliceLayout PieChartItem::calculateSliceLayout(QPieSlice *slice)
{
PieSliceLayout sliceLayout;
sliceLayout.m_center = PieSlice::sliceCenter(m_pieCenter, m_pieRadius, slice);
sliceLayout.m_radius = m_pieRadius;
sliceLayout.m_startAngle = slice->startAngle();
sliceLayout.m_angleSpan = slice->m_angleSpan;
return sliceLayout;
}
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 PieLayout PieChartItem::calculateLayout()
Jani Honkonen
Refactoring pie series and animations.
r621 {
calculatePieLayout();
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 PieLayout layout;
Jani Honkonen
Refactoring the pie for animations (no actual animations yet)
r566 foreach (QPieSlice* s, m_series->slices()) {
Jani Honkonen
Refactoring pie series and animations.
r621 if (m_slices.contains(s)) // calculate layout only for those slices that are already visible
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 layout.insert(s, calculateSliceLayout(s));
Jani Honkonen
Refactoring piechart API (and internals)
r174 }
Jani Honkonen
Refactoring the pie for animations (no actual animations yet)
r566 return layout;
Jani Honkonen
Pie chart refactoring
r142 }
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 void PieChartItem::applyLayout(const PieLayout &layout)
Jani Honkonen
Pie chart refactoring
r142 {
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 if (m_animator)
Jani Honkonen
Refactoring pie series and animations.
r621 m_animator->updateLayout(this, layout);
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 else
setLayout(layout);
Jani Honkonen
Refactoring piechart API (and internals)
r174 }
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 void PieChartItem::updateLayout(QPieSlice *slice, const PieSliceLayout &layout)
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 {
if (m_animator)
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 m_animator->updateLayout(this, slice, layout);
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 else
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 setLayout(slice, layout);
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 }
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 void PieChartItem::setLayout(const PieLayout &layout)
Jani Honkonen
Make pie fit better inside its given rectangle. Label texts still go outside. Needs a bit more work...
r289 {
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 foreach (QPieSlice *slice, layout.keys()) {
PieSlice *s = m_slices.value(slice);
Q_ASSERT(s);
s->setLayout(layout.value(slice));
s->updateData(slice);
s->updateGeometry();
s->update();
Jani Honkonen
Make pie fit better inside its given rectangle. Label texts still go outside. Needs a bit more work...
r289 }
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 }
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 void PieChartItem::setLayout(QPieSlice *slice, const PieSliceLayout &layout)
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 {
// find slice
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 PieSlice *s = m_slices.value(slice);
Q_ASSERT(s);
s->setLayout(layout);
if (m_series->m_slices.contains(slice)) // Slice has been deleted if not found. Animations ongoing...
s->updateData(slice);
s->updateGeometry();
s->update();
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 }
void PieChartItem::destroySlice(QPieSlice *slice)
{
delete m_slices.take(slice);
Jani Honkonen
Pie chart refactoring
r142 }
Jani Honkonen
Rename piepresenter -> piechartitem
r568 #include "moc_piechartitem_p.cpp"
Jani Honkonen
Pie chart refactoring
r142
QTCOMMERCIALCHART_END_NAMESPACE