##// END OF EJS Templates
Added HTML support for various text items...
Added HTML support for various text items - HTML tags can now be used in chart titles, legends, and labels - '\n' does no longer cause line break in multi-line text items. HTML tag <br/> can be used for line break now. - Setting pen for axis titles and labels is deprecated - When setting brush for titles and labels, only the color is relevant - Logic for identifying label format specifiers was improved, so adding additional information to labels via label format string is now more viable. Task-number: QTRD-1912 Change-Id: I8fa56df56fd656e2a3e427eff4abf3481435eec7 Reviewed-by: Mika Salmela <mika.salmela@digia.com>

File last commit:

r2432:53927f716a3d
r2539:74f3dbde7a75
Show More
piechartitem.cpp
228 lines | 7.7 KiB | text/x-c | CppLexer
Jani Honkonen
Add license headers
r794 /****************************************************************************
**
Miikka Heikkinen
Fixed the copyright year 2012 -> 2013
r2432 ** Copyright (C) 2013 Digia Plc
Jani Honkonen
Add license headers
r794 ** 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$
**
****************************************************************************/
Jani Honkonen
Rename piepresenter -> piechartitem
r568 #include "piechartitem_p.h"
Jani Honkonen
rename PieSlice -> PieSliceItem
r673 #include "piesliceitem_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
pie: added everything as a property in QPieSlice...
r1274 #include "qpieslice_p.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"
Jani Honkonen
API review changes for pie
r1009 #include "qpieseries_p.h"
Tero Ahola
Z order for pie
r490 #include "chartpresenter_p.h"
Jani Honkonen
Fix add/remove animation for pie and apply colors from theme when adding/removing
r659 #include "chartdataset_p.h"
Michal Klocek
Refactor animator...
r1735 #include "pieanimation_p.h"
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
Michal Klocek
Refactors internals...
r2273 PieChartItem::PieChartItem(QPieSeries *series, QGraphicsItem* item)
: ChartItem(series->d_func(),item),
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 m_series(series),
m_animation(0)
Jani Honkonen
Pie chart refactoring
r142 {
Q_ASSERT(series);
Jani Honkonen
API review changes for pie
r1009
Tero Ahola
Removed a few signals from QPieSeries API
r1482 QPieSeriesPrivate *p = QPieSeriesPrivate::fromSeries(series);
Jani Honkonen
pie: implement hiding the series
r1456 connect(series, SIGNAL(visibleChanged()), this, SLOT(handleSeriesVisibleChanged()));
Tero Ahola
Added opacity property to QAbstractSeries
r2067 connect(series, SIGNAL(opacityChanged()), this, SLOT(handleOpacityChanged()));
Jani Honkonen
pie: make slice added/removed signals public (again)
r1213 connect(series, SIGNAL(added(QList<QPieSlice*>)), this, SLOT(handleSlicesAdded(QList<QPieSlice*>)));
connect(series, SIGNAL(removed(QList<QPieSlice*>)), this, SLOT(handleSlicesRemoved(QList<QPieSlice*>)));
Tero Ahola
Removed a few signals from QPieSeries API
r1482 connect(p, SIGNAL(horizontalPositionChanged()), this, SLOT(updateLayout()));
connect(p, SIGNAL(verticalPositionChanged()), this, SLOT(updateLayout()));
connect(p, SIGNAL(pieSizeChanged()), this, SLOT(updateLayout()));
connect(p, SIGNAL(calculatedDataChanged()), this, SLOT(updateLayout()));
Jani Honkonen
Refactoring pie series and animations.
r621
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: fix bug with qmlchart demo...
r1238
// Note: will not create slice items until we have a proper rectangle to draw on.
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
Miikka Heikkinen
Fix crash when signals connected to deleted PieChartItem are emitted...
r2423 if (m_series) {
m_series->disconnect(this);
QPieSeriesPrivate::fromSeries(m_series)->disconnect(this);
}
foreach (QPieSlice *slice, m_sliceItems.keys()) {
slice->disconnect(this);
QPieSlicePrivate::fromSlice(slice)->disconnect(this);
}
Jani Honkonen
Pie chart refactoring
r142 }
Jani Honkonen
more coding style fixes for src-folder...
r2104 void PieChartItem::setAnimation(PieAnimation *animation)
Michal Klocek
Refactor animator...
r1735 {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 m_animation = animation;
Michal Klocek
Refactor animator...
r1735 }
Jani Honkonen
more coding style fixes for src-folder...
r2104 ChartAnimation *PieChartItem::animation() const
Michal Klocek
Refactor animator...
r1735 {
return m_animation;
}
Jani Honkonen
pie: get rid of "Slot not implemented" warning...
r1815 void PieChartItem::handleDomainUpdated()
{
Michal Klocek
Refactors internals...
r2273 QRectF rect(QPointF(0,0),domain()->size());
if(m_rect!=rect){
prepareGeometryChange();
m_rect = rect;
updateLayout();
if (m_sliceItems.isEmpty())
handleSlicesAdded(m_series->slices());
}
Jani Honkonen
Remove scaledomain ect. warnings from pie. Not going to be implemented (for now at least).
r1191 }
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 void PieChartItem::updateLayout()
Jani Honkonen
Refactoring pie series and animations.
r621 {
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 // find pie center coordinates
m_pieCenter.setX(m_rect.left() + (m_rect.width() * m_series->horizontalPosition()));
m_pieCenter.setY(m_rect.top() + (m_rect.height() * m_series->verticalPosition()));
Jani Honkonen
Nicer animation for adding a pie initially.
r634
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 // find maximum radius for pie
m_pieRadius = m_rect.height() / 2;
if (m_rect.width() < m_rect.height())
m_pieRadius = m_rect.width() / 2;
Marek Rosa
Donut support simplified. Examples updated
r1838 m_holeSize = m_pieRadius;
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 // apply size factor
m_pieRadius *= m_series->pieSize();
Marek Rosa
Donut support simplified. Examples updated
r1838 m_holeSize *= m_series->holeSize();
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074
// set layouts for existing slice items
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 foreach (QPieSlice *slice, m_series->slices()) {
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 PieSliceItem *sliceItem = m_sliceItems.value(slice);
if (sliceItem) {
PieSliceData sliceData = updateSliceGeometry(slice);
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (m_animation)
Michal Klocek
Refactor animator...
r1735 presenter()->startAnimation(m_animation->updateValue(sliceItem, sliceData));
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 else
sliceItem->setLayout(sliceData);
}
}
update();
}
Jani Honkonen
more coding style fixes for src-folder...
r2104 void PieChartItem::handleSlicesAdded(QList<QPieSlice *> slices)
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 {
Jani Honkonen
pie: fix bug with qmlchart demo...
r1238 // delay creating slice items until there is a proper rectangle
if (!m_rect.isValid() && m_sliceItems.isEmpty())
return;
Michal Klocek
Refactors internals...
r2273 themeManager()->updateSeries(m_series);
Jani Honkonen
Fix add/remove animation for pie and apply colors from theme when adding/removing
r659
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 bool startupAnimation = m_sliceItems.isEmpty();
Jani Honkonen
Refactoring pie series and animations.
r621
Jani Honkonen
more coding style fixes for src-folder...
r2104 foreach(QPieSlice * slice, slices) {
PieSliceItem *sliceItem = new PieSliceItem(this);
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 m_sliceItems.insert(slice, sliceItem);
Jani Honkonen
pie: remove changed() signal and replace it with more refined signals...
r1224
Tero Ahola
Removed unnecessary signals from QPieSlice
r1494 // Note: no need to connect to slice valueChanged() etc.
Jani Honkonen
pie: added everything as a property in QPieSlice...
r1274 // This is handled through calculatedDataChanged signal.
Jani Honkonen
pie: remove changed() signal and replace it with more refined signals...
r1224 connect(slice, SIGNAL(labelChanged()), this, SLOT(handleSliceChanged()));
Jani Honkonen
pie: added everything as a property in QPieSlice...
r1274 connect(slice, SIGNAL(labelVisibleChanged()), this, SLOT(handleSliceChanged()));
connect(slice, SIGNAL(penChanged()), this, SLOT(handleSliceChanged()));
connect(slice, SIGNAL(brushChanged()), this, SLOT(handleSliceChanged()));
Tero Ahola
Use labelBrush instead of labelPen for text labels
r1307 connect(slice, SIGNAL(labelBrushChanged()), this, SLOT(handleSliceChanged()));
Jani Honkonen
pie: added everything as a property in QPieSlice...
r1274 connect(slice, SIGNAL(labelFontChanged()), this, SLOT(handleSliceChanged()));
Tero Ahola
Removed unnecessary signals from QPieSlice
r1494
QPieSlicePrivate *p = QPieSlicePrivate::fromSlice(slice);
connect(p, SIGNAL(labelPositionChanged()), this, SLOT(handleSliceChanged()));
connect(p, SIGNAL(explodedChanged()), this, SLOT(handleSliceChanged()));
connect(p, SIGNAL(labelArmLengthFactorChanged()), this, SLOT(handleSliceChanged()));
connect(p, SIGNAL(explodeDistanceFactorChanged()), this, SLOT(handleSliceChanged()));
Jani Honkonen
pie: added everything as a property in QPieSlice...
r1274
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 connect(sliceItem, SIGNAL(clicked(Qt::MouseButtons)), slice, SIGNAL(clicked()));
connect(sliceItem, SIGNAL(hovered(bool)), slice, SIGNAL(hovered(bool)));
Jani Honkonen
Refactoring pie series and animations.
r621
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 PieSliceData sliceData = updateSliceGeometry(slice);
Michal Klocek
Refactor animator...
r1735 if (m_animation)
presenter()->startAnimation(m_animation->addSlice(sliceItem, sliceData, startupAnimation));
Jani Honkonen
Refactoring pie series and animations.
r621 else
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 sliceItem->setLayout(sliceData);
Jani Honkonen
Refactoring pie series and animations.
r621 }
}
Jani Honkonen
more coding style fixes for src-folder...
r2104 void PieChartItem::handleSlicesRemoved(QList<QPieSlice *> slices)
Jani Honkonen
Refactoring pie series and animations.
r621 {
Michal Klocek
Refactors internals...
r2273 themeManager()->updateSeries(m_series);
Jani Honkonen
Fix add/remove animation for pie and apply colors from theme when adding/removing
r659
Jani Honkonen
Refactor piechart to avoid using invalid QPieSlice pointers....
r1053 foreach (QPieSlice *slice, slices) {
Jani Honkonen
tst_qpieseries: added XXXanimated tests...
r1301
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 PieSliceItem *sliceItem = m_sliceItems.value(slice);
Jani Honkonen
tst_qpieseries: added XXXanimated tests...
r1301
// this can happen if you call append() & remove() in a row so that PieSliceItem is not even created
if (!sliceItem)
continue;
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 m_sliceItems.remove(slice);
Jani Honkonen
bugfix: pie does not disconnect signals when a slice is taken (not deleted)
r2084 slice->disconnect(this);
QPieSlicePrivate::fromSlice(slice)->disconnect(this);
Jani Honkonen
Refactor piechart to avoid using invalid QPieSlice pointers....
r1053
Michal Klocek
Refactor animator...
r1735 if (m_animation)
presenter()->startAnimation(m_animation->removeSlice(sliceItem)); // animator deletes the PieSliceItem
Jani Honkonen
Refactoring pie series and animations.
r621 else
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 delete sliceItem;
Jani Honkonen
Refactoring pie series and animations.
r621 }
}
Jani Honkonen
Rename piepresenter -> piechartitem
r568 void PieChartItem::handleSliceChanged()
Jani Honkonen
Refactoring the pie for animations (no actual animations yet)
r566 {
Jani Honkonen
more coding style fixes for src-folder...
r2104 QPieSlice *slice = qobject_cast<QPieSlice *>(sender());
Tero Ahola
Removed unnecessary signals from QPieSlice
r1494 if (!slice) {
Jani Honkonen
more coding style fixes for src-folder...
r2104 QPieSlicePrivate *slicep = qobject_cast<QPieSlicePrivate *>(sender());
Tero Ahola
Removed unnecessary signals from QPieSlice
r1494 slice = slicep->q_ptr;
}
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 Q_ASSERT(m_sliceItems.contains(slice));
Jani Honkonen
Added a pie chart customization example and refactoring the pie interface.
r437
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 PieSliceItem *sliceItem = m_sliceItems.value(slice);
PieSliceData sliceData = updateSliceGeometry(slice);
Michal Klocek
Refactor animator...
r1735 if (m_animation)
presenter()->startAnimation(m_animation->updateValue(sliceItem, sliceData));
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 else
sliceItem->setLayout(sliceData);
Jani Honkonen
Added a pie chart customization example and refactoring the pie interface.
r437
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 update();
Jani Honkonen
Refactoring pie series and animations.
r621 }
Jani Honkonen
Added a pie chart customization example and refactoring the pie interface.
r437
Jani Honkonen
pie: implement hiding the series
r1456 void PieChartItem::handleSeriesVisibleChanged()
{
setVisible(m_series->isVisible());
}
Tero Ahola
Added opacity property to QAbstractSeries
r2067 void PieChartItem::handleOpacityChanged()
{
setOpacity(m_series->opacity());
}
Jani Honkonen
Refactor graphical side of pie to simplify the implementation.
r1074 PieSliceData PieChartItem::updateSliceGeometry(QPieSlice *slice)
Jani Honkonen
Refactoring pie series and animations.
r621 {
Jani Honkonen
pie: added everything as a property in QPieSlice...
r1274 PieSliceData &sliceData = QPieSlicePrivate::fromSlice(slice)->m_data;
Jani Honkonen
rename PieSlice -> PieSliceItem
r673 sliceData.m_center = PieSliceItem::sliceCenter(m_pieCenter, m_pieRadius, slice);
Jani Honkonen
Rename PieSliceLayout -> PieSliceData. A "layout" is a bad name for this.
r668 sliceData.m_radius = m_pieRadius;
Marek Rosa
Donut support simplified. Examples updated
r1838 sliceData.m_holeRadius = m_holeSize;
Jani Honkonen
Rename PieSliceLayout -> PieSliceData. A "layout" is a bad name for this.
r668 return sliceData;
Jani Honkonen
Refactoring pie series and animations.
r621 }
Jani Honkonen
Rename piepresenter -> piechartitem
r568 #include "moc_piechartitem_p.cpp"
Jani Honkonen
Pie chart refactoring
r142
QTCOMMERCIALCHART_END_NAMESPACE