##// END OF EJS Templates
Remove header.GPL now that it exists in QtBase...
Remove header.GPL now that it exists in QtBase Change-Id: I2cb53cb638b00bef34a313b0678066ef91c6d7a2 Reviewed-by: Tomi Korpipää <tomi.korpipaa@theqtcompany.com> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>

File last commit:

r2854:46147b040d06
r2856:f5f060e330b7
Show More
piechartitem.cpp
242 lines | 8.6 KiB | text/x-c | CppLexer
Miikka Heikkinen
Updated license...
r2854 /****************************************************************************
Jani Honkonen
Add license headers
r794 **
Miikka Heikkinen
Updated license...
r2854 ** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
Jani Honkonen
Add license headers
r794 **
Miikka Heikkinen
Updated license...
r2854 ** This file is part of the Qt Charts module of the Qt Toolkit.
Jani Honkonen
Add license headers
r794 **
Miikka Heikkinen
Updated license...
r2854 ** $QT_BEGIN_LICENSE:GPL$
Titta Heikkala
Updated license headers...
r2845 ** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
Miikka Heikkinen
Updated license...
r2854 ** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
Jani Honkonen
Add license headers
r794 **
Titta Heikkala
Updated license headers...
r2845 ** $QT_END_LICENSE$
**
Miikka Heikkinen
Updated license...
r2854 ****************************************************************************/
Jani Honkonen
Add license headers
r794
Titta Heikkala
Fix include syntax...
r2714 #include <private/piechartitem_p.h>
#include <private/piesliceitem_p.h>
#include <QtCharts/QPieSlice>
#include <private/qpieslice_p.h>
#include <QtCharts/QPieSeries>
#include <private/qpieseries_p.h>
#include <private/chartpresenter_p.h>
#include <private/chartdataset_p.h>
#include <private/pieanimation_p.h>
#include <QtGui/QPainter>
#include <QtCore/QTimer>
Jani Honkonen
Pie chart refactoring
r142
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Jani Honkonen
Pie chart refactoring
r142
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.
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739
setFlag(QGraphicsItem::ItemIsSelectable);
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)));
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 connect(sliceItem, SIGNAL(pressed(Qt::MouseButtons)), slice, SIGNAL(pressed()));
connect(sliceItem, SIGNAL(released(Qt::MouseButtons)), slice, SIGNAL(released()));
connect(sliceItem, SIGNAL(doubleClicked(Qt::MouseButtons)), slice, SIGNAL(doubleClicked()));
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
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE