qchart.cpp
501 lines
| 13.1 KiB
| text/x-c
|
CppLexer
/ src / qchart.cpp
Michal Klocek
|
r746 | /**************************************************************************** | ||
** | ||||
** 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$ | ||||
** | ||||
****************************************************************************/ | ||||
Michal Klocek
|
r12 | #include "qchart.h" | ||
Michal Klocek
|
r740 | #include "qchart_p.h" | ||
Tero Ahola
|
r42 | #include <QGraphicsScene> | ||
Michal Klocek
|
r115 | #include <QGraphicsSceneResizeEvent> | ||
Michal Klocek
|
r12 | |||
Marek Rosa
|
r277 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||
/*! | ||||
Michal Klocek
|
r740 | \enum QChart::ChartTheme | ||
Marek Rosa
|
r277 | |||
Michal Klocek
|
r740 | This enum describes the theme used by the chart. | ||
Marek Rosa
|
r277 | |||
Michal Klocek
|
r740 | \value ChartThemeDefault Follows the GUI style of the Operating System | ||
\value ChartThemeLight | ||||
\value ChartThemeBlueCerulean | ||||
\value ChartThemeDark | ||||
\value ChartThemeBrownSand | ||||
\value ChartThemeBlueNcs | ||||
Tero Ahola
|
r757 | \value ChartThemeHighContrast | ||
\value ChartThemeBlueIcy | ||||
Michal Klocek
|
r740 | \value ChartThemeCount Not really a theme; the total count of themes. | ||
*/ | ||||
Marek Rosa
|
r277 | |||
Tero Ahola
|
r302 | /*! | ||
Michal Klocek
|
r740 | \enum QChart::AnimationOption | ||
Tero Ahola
|
r302 | |||
Michal Klocek
|
r740 | For enabling/disabling animations. Defaults to NoAnimation. | ||
Tero Ahola
|
r302 | |||
Michal Klocek
|
r740 | \value NoAnimation | ||
\value GridAxisAnimations | ||||
\value SeriesAnimations | ||||
\value AllAnimations | ||||
*/ | ||||
Tero Ahola
|
r302 | |||
Tero Ahola
|
r264 | /*! | ||
Michal Klocek
|
r740 | \class QChart | ||
\brief QtCommercial chart API. | ||||
Tero Ahola
|
r264 | |||
Michal Klocek
|
r740 | QChart is a QGraphicsWidget that you can show in a QGraphicsScene. It manages the graphical | ||
representation of different types of QChartSeries and other chart related objects like | ||||
QChartAxis and QChartLegend. If you simply want to show a chart in a layout, you can use the | ||||
convenience class QChartView instead of QChart. | ||||
\sa QChartView | ||||
*/ | ||||
Tero Ahola
|
r264 | |||
/*! | ||||
Michal Klocek
|
r740 | Constructs a chart object which is a child of a\a parent. Parameter \a wFlags is passed to the QGraphicsWidget constructor. | ||
*/ | ||||
Michal Klocek
|
r115 | QChart::QChart(QGraphicsItem *parent, Qt::WindowFlags wFlags) : QGraphicsWidget(parent,wFlags), | ||
Michal Klocek
|
r740 | d_ptr(new QChartPrivate(this)) | ||
Michal Klocek
|
r12 | { | ||
Michal Klocek
|
r782 | //setMinimumSize(200,200); | ||
Michal Klocek
|
r740 | d_ptr->m_legend = new QLegend(this); | ||
d_ptr->m_dataset = new ChartDataSet(this); | ||||
d_ptr->m_presenter = new ChartPresenter(this,d_ptr->m_dataset); | ||||
sauimone
|
r803 | setMinimumSize(d_ptr->m_padding.left() * 3, d_ptr->m_padding.top() * 3); | ||
Michal Klocek
|
r740 | connect(d_ptr->m_dataset,SIGNAL(seriesAdded(QSeries*,Domain*)),d_ptr->m_legend,SLOT(handleSeriesAdded(QSeries*,Domain*))); | ||
connect(d_ptr->m_dataset,SIGNAL(seriesRemoved(QSeries*)),d_ptr->m_legend,SLOT(handleSeriesRemoved(QSeries*))); | ||||
Michal Klocek
|
r12 | } | ||
Tero Ahola
|
r264 | /*! | ||
Michal Klocek
|
r740 | Destroys the object and it's children, like QChartSeries and QChartAxis object added to it. | ||
*/ | ||||
Tero Ahola
|
r264 | QChart::~QChart() | ||
{ | ||||
Michal Klocek
|
r686 | //delete first presenter , since this is a root of all the graphical items | ||
Michal Klocek
|
r740 | delete d_ptr->m_presenter; | ||
d_ptr->m_presenter=0; | ||||
Tero Ahola
|
r264 | } | ||
Michal Klocek
|
r12 | |||
Tero Ahola
|
r264 | /*! | ||
Michal Klocek
|
r740 | Adds the \a series and optional \a axisY onto the chart and takes the ownership of the objects. | ||
If auto scaling is enabled, re-scales the axes the series is bound to (both the x axis and | ||||
the y axis). | ||||
*/ | ||||
Michal Klocek
|
r360 | void QChart::addSeries(QSeries* series, QChartAxis* axisY) | ||
Michal Klocek
|
r223 | { | ||
Michal Klocek
|
r740 | d_ptr->m_dataset->addSeries(series, axisY); | ||
Michal Klocek
|
r223 | } | ||
Tero Ahola
|
r42 | |||
Marek Rosa
|
r274 | /*! | ||
Michal Klocek
|
r740 | Removes the \a series specified in a perameter from the QChartView. | ||
It releses its ownership of the specified QChartSeries object. | ||||
It does not delete the pointed QChartSeries data object | ||||
\sa addSeries(), removeAllSeries() | ||||
*/ | ||||
Michal Klocek
|
r360 | void QChart::removeSeries(QSeries* series) | ||
Michal Klocek
|
r223 | { | ||
Michal Klocek
|
r740 | d_ptr->m_dataset->removeSeries(series); | ||
Tero Ahola
|
r42 | } | ||
Tero Ahola
|
r48 | |||
Marek Rosa
|
r274 | /*! | ||
Michal Klocek
|
r740 | Removes all the QChartSeries that have been added to the QChartView | ||
It also deletes the pointed QChartSeries data objects | ||||
\sa addSeries(), removeSeries() | ||||
*/ | ||||
Michal Klocek
|
r258 | void QChart::removeAllSeries() | ||
{ | ||||
Michal Klocek
|
r740 | d_ptr->m_dataset->removeAllSeries(); | ||
Michal Klocek
|
r258 | } | ||
Marek Rosa
|
r287 | /*! | ||
Michal Klocek
|
r740 | Sets the \a brush that is used for painting the background of the chart area. | ||
*/ | ||||
Michal Klocek
|
r645 | void QChart::setBackgroundBrush(const QBrush& brush) | ||
Michal Klocek
|
r122 | { | ||
Michal Klocek
|
r740 | d_ptr->createChartBackgroundItem(); | ||
d_ptr->m_backgroundItem->setBrush(brush); | ||||
d_ptr->m_backgroundItem->update(); | ||||
Michal Klocek
|
r122 | } | ||
Michal Klocek
|
r645 | QBrush QChart::backgroundBrush() const | ||
{ | ||||
Michal Klocek
|
r742 | if (!d_ptr->m_backgroundItem) return QBrush(); | ||
Michal Klocek
|
r740 | return (d_ptr->m_backgroundItem)->brush(); | ||
Michal Klocek
|
r645 | } | ||
Marek Rosa
|
r287 | /*! | ||
Michal Klocek
|
r740 | Sets the \a pen that is used for painting the background of the chart area. | ||
*/ | ||||
Michal Klocek
|
r645 | void QChart::setBackgroundPen(const QPen& pen) | ||
Michal Klocek
|
r122 | { | ||
Michal Klocek
|
r740 | d_ptr->createChartBackgroundItem(); | ||
d_ptr->m_backgroundItem->setPen(pen); | ||||
d_ptr->m_backgroundItem->update(); | ||||
Michal Klocek
|
r122 | } | ||
Michal Klocek
|
r645 | QPen QChart::backgroundPen() const | ||
{ | ||||
Michal Klocek
|
r742 | if (!d_ptr->m_backgroundItem) return QPen(); | ||
Michal Klocek
|
r740 | return d_ptr->m_backgroundItem->pen(); | ||
Michal Klocek
|
r645 | } | ||
Marek Rosa
|
r274 | /*! | ||
Michal Klocek
|
r740 | Sets the chart \a title. The description text that is drawn above the chart. | ||
*/ | ||||
Michal Klocek
|
r645 | void QChart::setTitle(const QString& title) | ||
Michal Klocek
|
r69 | { | ||
Michal Klocek
|
r740 | d_ptr->createChartTitleItem(); | ||
d_ptr->m_titleItem->setText(title); | ||||
d_ptr->updateLayout(); | ||||
Michal Klocek
|
r476 | } | ||
/*! | ||||
Michal Klocek
|
r740 | Returns the chart title. The description text that is drawn above the chart. | ||
*/ | ||||
Michal Klocek
|
r645 | QString QChart::title() const | ||
Michal Klocek
|
r476 | { | ||
Michal Klocek
|
r742 | if (d_ptr->m_titleItem) | ||
Michal Klocek
|
r740 | return d_ptr->m_titleItem->text(); | ||
Michal Klocek
|
r476 | else | ||
return QString(); | ||||
Michal Klocek
|
r192 | } | ||
Marek Rosa
|
r274 | /*! | ||
Michal Klocek
|
r740 | Sets the \a font that is used for rendering the description text that is rendered above the chart. | ||
*/ | ||||
Michal Klocek
|
r645 | void QChart::setTitleFont(const QFont& font) | ||
Michal Klocek
|
r192 | { | ||
Michal Klocek
|
r740 | d_ptr->createChartTitleItem(); | ||
d_ptr->m_titleItem->setFont(font); | ||||
d_ptr->updateLayout(); | ||||
Michal Klocek
|
r69 | } | ||
Tero Ahola
|
r495 | /*! | ||
Michal Klocek
|
r740 | Sets the \a brush used for rendering the title text. | ||
*/ | ||||
Michal Klocek
|
r645 | void QChart::setTitleBrush(const QBrush &brush) | ||
Tero Ahola
|
r495 | { | ||
Michal Klocek
|
r740 | d_ptr->createChartTitleItem(); | ||
d_ptr->m_titleItem->setBrush(brush); | ||||
d_ptr->updateLayout(); | ||||
Tero Ahola
|
r495 | } | ||
/*! | ||||
Michal Klocek
|
r740 | Returns the brush used for rendering the title text. | ||
*/ | ||||
Michal Klocek
|
r645 | QBrush QChart::titleBrush() const | ||
Tero Ahola
|
r495 | { | ||
Michal Klocek
|
r742 | if (!d_ptr->m_titleItem) return QBrush(); | ||
Michal Klocek
|
r740 | return d_ptr->m_titleItem->brush(); | ||
Michal Klocek
|
r223 | } | ||
Marek Rosa
|
r277 | /*! | ||
Michal Klocek
|
r740 | Sets the \a theme used by the chart for rendering the graphical representation of the data | ||
\sa ChartTheme, chartTheme() | ||||
*/ | ||||
void QChart::setTheme(QChart::ChartTheme theme) | ||||
Tero Ahola
|
r64 | { | ||
Michal Klocek
|
r740 | d_ptr->m_presenter->setTheme(theme); | ||
Tero Ahola
|
r64 | } | ||
Marek Rosa
|
r277 | /*! | ||
Michal Klocek
|
r740 | Returns the theme enum used by the chart. | ||
\sa ChartTheme, setChartTheme() | ||||
*/ | ||||
QChart::ChartTheme QChart::theme() const | ||||
Tero Ahola
|
r120 | { | ||
Michal Klocek
|
r740 | return d_ptr->m_presenter->theme(); | ||
Tero Ahola
|
r120 | } | ||
Marek Rosa
|
r285 | /*! | ||
Michal Klocek
|
r740 | Zooms in the view by a factor of 2 | ||
*/ | ||||
Michal Klocek
|
r223 | void QChart::zoomIn() | ||
Michal Klocek
|
r67 | { | ||
Michal Klocek
|
r740 | d_ptr->m_presenter->zoomIn(); | ||
Michal Klocek
|
r67 | } | ||
Marek Rosa
|
r285 | /*! | ||
Michal Klocek
|
r740 | Zooms in the view to a maximum level at which \a rect is still fully visible. | ||
*/ | ||||
Michal Klocek
|
r223 | void QChart::zoomIn(const QRectF& rect) | ||
Michal Klocek
|
r67 | { | ||
Michal Klocek
|
r742 | if (!rect.isValid()) return; | ||
Michal Klocek
|
r740 | d_ptr->m_presenter->zoomIn(rect); | ||
Michal Klocek
|
r67 | } | ||
Marek Rosa
|
r285 | /*! | ||
Michal Klocek
|
r740 | Restores the view zoom level to the previous one. | ||
*/ | ||||
Michal Klocek
|
r67 | void QChart::zoomOut() | ||
{ | ||||
Michal Klocek
|
r740 | d_ptr->m_presenter->zoomOut(); | ||
Michal Klocek
|
r67 | } | ||
Marek Rosa
|
r277 | /*! | ||
Michal Klocek
|
r740 | Returns the pointer to the x axis object of the chart | ||
*/ | ||||
Michal Klocek
|
r223 | QChartAxis* QChart::axisX() const | ||
Michal Klocek
|
r176 | { | ||
Michal Klocek
|
r740 | return d_ptr->m_dataset->axisX(); | ||
Michal Klocek
|
r176 | } | ||
Marek Rosa
|
r277 | /*! | ||
Michal Klocek
|
r740 | Returns the pointer to the y axis object of the chart | ||
*/ | ||||
Michal Klocek
|
r223 | QChartAxis* QChart::axisY() const | ||
Michal Klocek
|
r176 | { | ||
Michal Klocek
|
r740 | return d_ptr->m_dataset->axisY(); | ||
Michal Klocek
|
r85 | } | ||
sauimone
|
r524 | /*! | ||
Michal Klocek
|
r740 | Returns the legend object of the chart. Ownership stays in chart. | ||
*/ | ||||
sauimone
|
r783 | QLegend* QChart::legend() const | ||
sauimone
|
r524 | { | ||
sauimone
|
r783 | return d_ptr->m_legend; | ||
sauimone
|
r524 | } | ||
Michal Klocek
|
r804 | QRect QChart::padding() const | ||
sauimone
|
r803 | { | ||
return d_ptr->m_padding; | ||||
} | ||||
Marek Rosa
|
r287 | /*! | ||
Michal Klocek
|
r740 | Resizes and updates the chart area using the \a event data | ||
*/ | ||||
Michal Klocek
|
r115 | void QChart::resizeEvent(QGraphicsSceneResizeEvent *event) | ||
{ | ||||
Michal Klocek
|
r740 | d_ptr->m_rect = QRectF(QPoint(0,0),event->newSize()); | ||
d_ptr->updateLayout(); | ||||
Michal Klocek
|
r117 | QGraphicsWidget::resizeEvent(event); | ||
Michal Klocek
|
r115 | update(); | ||
} | ||||
Michal Klocek
|
r298 | /*! | ||
Michal Klocek
|
r740 | Sets animation \a options for the chart | ||
*/ | ||||
Michal Klocek
|
r298 | void QChart::setAnimationOptions(AnimationOptions options) | ||
{ | ||||
Michal Klocek
|
r740 | d_ptr->m_presenter->setAnimationOptions(options); | ||
Michal Klocek
|
r298 | } | ||
/*! | ||||
Michal Klocek
|
r740 | Returns animation options for the chart | ||
*/ | ||||
Michal Klocek
|
r298 | QChart::AnimationOptions QChart::animationOptions() const | ||
{ | ||||
Michal Klocek
|
r740 | return d_ptr->m_presenter->animationOptions(); | ||
Michal Klocek
|
r298 | } | ||
Michal Klocek
|
r600 | void QChart::scrollLeft() | ||
{ | ||||
Michal Klocek
|
r740 | d_ptr->m_presenter->scroll(-d_ptr->m_presenter->geometry().width()/(axisX()->ticksCount()-1),0); | ||
Michal Klocek
|
r600 | } | ||
void QChart::scrollRight() | ||||
{ | ||||
Michal Klocek
|
r740 | d_ptr->m_presenter->scroll(d_ptr->m_presenter->geometry().width()/(axisX()->ticksCount()-1),0); | ||
Michal Klocek
|
r600 | } | ||
Michal Klocek
|
r740 | |||
Michal Klocek
|
r600 | void QChart::scrollUp() | ||
{ | ||||
Michal Klocek
|
r740 | d_ptr->m_presenter->scroll(0,d_ptr->m_presenter->geometry().width()/(axisY()->ticksCount()-1)); | ||
Michal Klocek
|
r600 | } | ||
Michal Klocek
|
r740 | |||
Michal Klocek
|
r600 | void QChart::scrollDown() | ||
{ | ||||
Michal Klocek
|
r740 | d_ptr->m_presenter->scroll(0,-d_ptr->m_presenter->geometry().width()/(axisY()->ticksCount()-1)); | ||
Michal Klocek
|
r531 | } | ||
Michal Klocek
|
r740 | void QChart::setBackgroundVisible(bool visible) | ||
{ | ||||
d_ptr->createChartBackgroundItem(); | ||||
d_ptr->m_backgroundItem->setVisible(visible); | ||||
} | ||||
sauimone
|
r716 | |||
Michal Klocek
|
r740 | bool QChart::isBackgroundVisible() const | ||
{ | ||||
Michal Klocek
|
r742 | if (!d_ptr->m_backgroundItem) return false; | ||
Michal Klocek
|
r740 | return d_ptr->m_backgroundItem->isVisible(); | ||
sauimone
|
r716 | } | ||
Michal Klocek
|
r740 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
Michal Klocek
|
r639 | |||
Michal Klocek
|
r740 | QChartPrivate::QChartPrivate(QChart *parent): | ||
q_ptr(parent), | ||||
m_backgroundItem(0), | ||||
m_titleItem(0), | ||||
m_legend(0), | ||||
m_dataset(0), | ||||
sauimone
|
r803 | m_presenter(0), | ||
Michal Klocek
|
r804 | m_padding(QRect(50,50,0,0)) | ||
Michal Klocek
|
r639 | { | ||
Michal Klocek
|
r740 | |||
Michal Klocek
|
r639 | } | ||
Michal Klocek
|
r740 | QChartPrivate::~QChartPrivate() | ||
Michal Klocek
|
r639 | { | ||
Michal Klocek
|
r740 | |||
Michal Klocek
|
r639 | } | ||
Michal Klocek
|
r740 | void QChartPrivate::createChartBackgroundItem() | ||
Michal Klocek
|
r639 | { | ||
Michal Klocek
|
r742 | if (!m_backgroundItem) { | ||
Michal Klocek
|
r740 | m_backgroundItem = new ChartBackground(q_ptr); | ||
m_backgroundItem->setPen(Qt::NoPen); | ||||
m_backgroundItem->setZValue(ChartPresenter::BackgroundZValue); | ||||
Michal Klocek
|
r639 | } | ||
} | ||||
Michal Klocek
|
r740 | void QChartPrivate::createChartTitleItem() | ||
Michal Klocek
|
r639 | { | ||
Michal Klocek
|
r742 | if (!m_titleItem) { | ||
Michal Klocek
|
r740 | m_titleItem = new QGraphicsSimpleTextItem(q_ptr); | ||
m_titleItem->setZValue(ChartPresenter::BackgroundZValue); | ||||
} | ||||
Michal Klocek
|
r639 | } | ||
Michal Klocek
|
r740 | void QChartPrivate::updateLegendLayout() | ||
Michal Klocek
|
r645 | { | ||
sauimone
|
r803 | //int legendPadding = m_chart->legend()->padding(); | ||
int legendPadding = 30; | ||||
QRectF rect = m_rect; | ||||
if ((m_legend->attachedToChart()) && (m_legend->isVisible())) { | ||||
// Reserve some space for legend | ||||
switch (m_legend->alignment()) { | ||||
case QLegend::AlignmentTop: { | ||||
rect.adjust(m_padding.left(), | ||||
m_padding.top() + legendPadding, | ||||
-m_padding.right(), | ||||
-m_padding.bottom()); | ||||
break; | ||||
} | ||||
case QLegend::AlignmentBottom: { | ||||
rect.adjust(m_padding.left(), | ||||
m_padding.top(), | ||||
-m_padding.right(), | ||||
-m_padding.bottom() - legendPadding); | ||||
break; | ||||
} | ||||
case QLegend::AlignmentLeft: { | ||||
rect.adjust(m_padding.left() + legendPadding, | ||||
m_padding.top(), | ||||
-m_padding.right(), | ||||
-m_padding.bottom()); | ||||
break; | ||||
} | ||||
case QLegend::AlignmentRight: { | ||||
rect.adjust(m_padding.left(), | ||||
m_padding.top(), | ||||
-m_padding.right() - legendPadding, | ||||
-m_padding.bottom()); | ||||
break; | ||||
} | ||||
default: { | ||||
rect.adjust(m_padding.left(), | ||||
m_padding.top(), | ||||
-m_padding.right(), | ||||
-m_padding.bottom()); | ||||
break; | ||||
} | ||||
} | ||||
} else { | ||||
rect.adjust(m_padding.left(), | ||||
m_padding.top(), | ||||
-m_padding.right(), | ||||
-m_padding.bottom()); | ||||
} | ||||
QRectF plotRect = m_rect.adjusted(m_padding.left() | ||||
,m_padding.top() | ||||
,-m_padding.right() | ||||
,-m_padding.bottom()); | ||||
Michal Klocek
|
r740 | QRectF legendRect; | ||
sauimone
|
r803 | int padding = 0; // TODO: fix this | ||
sauimone
|
r766 | switch (m_legend->alignment()) | ||
Michal Klocek
|
r740 | { | ||
sauimone
|
r799 | case QLegend::AlignmentTop: { | ||
sauimone
|
r800 | legendRect = m_rect.adjusted(0,padding,0,-padding - plotRect.height()); | ||
Michal Klocek
|
r740 | break; | ||
} | ||||
sauimone
|
r799 | case QLegend::AlignmentBottom: { | ||
legendRect = m_rect.adjusted(padding,padding + plotRect.height(),-padding,0); | ||||
Michal Klocek
|
r740 | break; | ||
} | ||||
sauimone
|
r799 | case QLegend::AlignmentLeft: { | ||
legendRect = m_rect.adjusted(0,padding,-padding - plotRect.width(),-padding); | ||||
Michal Klocek
|
r740 | break; | ||
} | ||||
sauimone
|
r799 | case QLegend::AlignmentRight: { | ||
legendRect = m_rect.adjusted(padding + plotRect.width(),padding,0,-padding); | ||||
Michal Klocek
|
r740 | break; | ||
} | ||||
default: { | ||||
legendRect = plotRect; | ||||
break; | ||||
} | ||||
} | ||||
m_legend->setMaximumSize(legendRect.size()); | ||||
sauimone
|
r783 | |||
qreal width = legendRect.width() - m_legend->size().width(); | ||||
qreal height = legendRect.height() - m_legend->size().height(); | ||||
QPointF pos = legendRect.topLeft(); | ||||
if (width > 0) { | ||||
pos.setX(pos.x() + width/2); | ||||
} | ||||
if (height > 0) { | ||||
pos.setY(pos.y() + height/2); | ||||
} | ||||
sauimone
|
r799 | |||
sauimone
|
r783 | m_legend->setPos(pos); | ||
Michal Klocek
|
r645 | } | ||
Michal Klocek
|
r740 | void QChartPrivate::updateLayout() | ||
Michal Klocek
|
r645 | { | ||
Michal Klocek
|
r742 | if (!m_rect.isValid()) return; | ||
sauimone
|
r803 | int padding = m_padding.top(); | ||
Michal Klocek
|
r742 | int backgroundPadding = m_presenter->backgroundPadding(); | ||
Michal Klocek
|
r740 | |||
// recalculate title position | ||||
if (m_titleItem) { | ||||
QPointF center = m_rect.center() -m_titleItem->boundingRect().center(); | ||||
Michal Klocek
|
r742 | m_titleItem->setPos(center.x(),m_rect.top()/2 + padding/2); | ||
Michal Klocek
|
r740 | } | ||
//recalculate background gradient | ||||
if (m_backgroundItem) { | ||||
Michal Klocek
|
r742 | m_backgroundItem->setRect(m_rect.adjusted(backgroundPadding,backgroundPadding, -backgroundPadding, -backgroundPadding)); | ||
Michal Klocek
|
r740 | } | ||
Michal Klocek
|
r645 | |||
Michal Klocek
|
r740 | // recalculate legend position | ||
if (m_legend) { | ||||
sauimone
|
r799 | if ((m_legend->attachedToChart()) && (m_legend->parentObject() == q_ptr)) { | ||
Michal Klocek
|
r740 | updateLegendLayout(); | ||
} | ||||
} | ||||
} | ||||
Michal Klocek
|
r645 | |||
Tero Ahola
|
r64 | #include "moc_qchart.cpp" | ||
Tero Ahola
|
r48 | |||
Tero Ahola
|
r30 | QTCOMMERCIALCHART_END_NAMESPACE | ||