##// END OF EJS Templates
QXYModelMapper removed from the docs
QXYModelMapper removed from the docs

File last commit:

r1501:ab5387953f46
r1507:4d1b1b063da8
Show More
qlegend.cpp
760 lines | 21.5 KiB | text/x-c | CppLexer
Jani Honkonen
Add license headers
r794 /****************************************************************************
Michal Klocek
Adds qlegend pimpl...
r950 **
** 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$
**
****************************************************************************/
Jani Honkonen
Add license headers
r794
sauimone
framework for legend
r524 #include "qlegend.h"
Michal Klocek
Adds qlegend pimpl...
r950 #include "qlegend_p.h"
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 #include "qabstractseries.h"
#include "qabstractseries_p.h"
Michal Klocek
Adds qlegend pimpl...
r950 #include "qchart_p.h"
sauimone
Separated legend marker to private header. Added signals for left and right mouse click
r547 #include "legendmarker_p.h"
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 #include "qxyseries.h"
#include "qlineseries.h"
#include "qareaseries.h"
#include "qscatterseries.h"
#include "qsplineseries.h"
#include "qbarseries.h"
#include "qstackedbarseries.h"
#include "qpercentbarseries.h"
#include "qbarset.h"
#include "qpieseries.h"
Jani Honkonen
API review changes for pie
r1009 #include "qpieseries_p.h"
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 #include "qpieslice.h"
sauimone
Adaptive layout to legend. Tries to fit all items inside given maximum size
r626 #include "chartpresenter_p.h"
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 #include <QPainter>
#include <QPen>
Michal Klocek
Refactor qledgend handling...
r855 #include <QTimer>
sauimone
framework for legend
r524
sauimone
Separated legend marker to private header. Added signals for left and right mouse click
r547 #include <QGraphicsSceneEvent>
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529
sauimone
Separated legend marker to private header. Added signals for left and right mouse click
r547 QTCOMMERCIALCHART_BEGIN_NAMESPACE
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529
sauimone
legend documentation fix. detaching and attaching the legend
r728 /*!
Tero Ahola
Documentation fixes....
r995 \class QLegend
sauimone
legend doc changes
r1501 \brief Legend object
Tero Ahola
Documentation fixes....
r995 \mainclass
sauimone
legend documentation fix. detaching and attaching the legend
r728
Tero Ahola
Documentation fixes....
r995 QLegend is a graphical object, whics displays legend of the chart. Legend state is updated by QChart, when
series have been changed. By default, legend is drawn by QChart, but user can set a new parent to legend and
handle the drawing manually.
User isn't supposed to create or delete legend objects, but can reference it via QChart class.
sauimone
legend documentation fix. detaching and attaching the legend
r728
Tero Ahola
Documentation fixes....
r995 \image examples_percentbarchart_legend.png
sauimone
legend documentation fix. detaching and attaching the legend
r728
Tero Ahola
Documentation fixes....
r995 \sa QChart
*/
Tero Ahola
Adding legend properties
r1452 /*!
\qmlclass Legend QLegend
\brief Legend is part of QtCommercial Chart QML API.
Legend is a graphical object, whics displays legend of the chart. Legend state is updated by ChartView, when
Tero Ahola
Documentation of QML ChartView, Axis and Legend
r1475 series have been changed. Legend is used via ChartView class. For example:
Tero Ahola
Adding legend properties
r1452 \code
ChartView {
legend.visible: true
legend.alignment: Qt.AlignBottom
// Add a few series...
}
\endcode
\image examples_percentbarchart_legend.png
*/
/*!
\property QLegend::alignment
\brief The alignment of the legend.
Legend paints on the defined position in the chart. The following alignments are supported:
Qt::AlignTop, Qt::AlignBottom, Qt::AlignLeft, Qt::AlignRight. If you set more than one flag the result is undefined.
*/
/*!
\qmlproperty Qt.Alignment Legend::alignment
\brief The alignment of the legend.
Legend paints on the defined position in the chart. The following alignments are supported:
Qt.AlignTop, Qt.AlignBottom, Qt.AlignLeft, Qt.AlignRight. If you set more than one flag the result is undefined.
*/
/*!
\property QLegend::backgroundVisible
Whether the legend background is visible or not.
*/
/*!
\qmlproperty bool Legend::backgroundVisible
Whether the legend background is visible or not.
*/
/*!
\property QLegend::color
Tero Ahola
Fixed setting the legend (background) color
r1472 The color of the legend, i.e. the background (brush) color. Note that if you change the color
of the legend, the style of the legend brush is set to Qt::SolidPattern.
Tero Ahola
Adding legend properties
r1452 */
/*!
\qmlproperty color Legend::color
Tero Ahola
Fixed setting the legend (background) color
r1472 The color of the legend, i.e. the background (brush) color.
Tero Ahola
Adding legend properties
r1452 */
/*!
\property QLegend::borderColor
The border color of the legend, i.e. the line color.
*/
/*!
\qmlproperty color Legend::borderColor
The border color of the legend, i.e. the line color.
*/
sauimone
legend documentation fix. detaching and attaching the legend
r728
Tero Ahola
Adding legend properties
r1452 /*!
\fn void QLegend::backgroundVisibleChanged(bool)
The visibility of the legend background changed to \a visible.
*/
/*!
\fn void QLegend::colorChanged(QColor)
The color of the legend background changed to \a color.
*/
/*!
\fn void QLegend::borderColorChanged(QColor)
The border color of the legend background changed to \a color.
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 */
sauimone
layout fix to legend. Documented legend functions.
r724
/*!
Michal Klocek
Adds qlegend pimpl...
r950 \fn qreal QLegend::minWidth() const
Returns minimum width of the legend
*/
sauimone
layout fix to legend. Documented legend functions.
r724
/*!
Michal Klocek
Adds qlegend pimpl...
r950 \fn qreal QLegend::minHeight() const
Returns minimum height of the legend
*/
sauimone
layout fix to legend. Documented legend functions.
r724
/*!
Michal Klocek
Adds qlegend pimpl...
r950 Constructs the legend object and sets the parent to \a parent
*/
Michal Klocek
Refactor qledgend handling...
r855
Michal Klocek
Fixes previous commit
r791 QLegend::QLegend(QChart *chart):QGraphicsWidget(chart),
sauimone
legend example to documentation. minor legend fixes
r1300 d_ptr(new QLegendPrivate(chart->d_ptr->m_presenter,chart,this))
sauimone
minor code review fixes
r762 {
sauimone
Adaptive layout to legend. Tries to fit all items inside given maximum size
r626 setZValue(ChartPresenter::LegendZValue);
Michal Klocek
Refactor qledgend handling...
r855 setFlags(QGraphicsItem::ItemClipsChildrenToShape);
Michal Klocek
Fixes normalize signal socekt issue
r1033 QObject::connect(chart->d_ptr->m_dataset,SIGNAL(seriesAdded(QAbstractSeries*,Domain*)),d_ptr.data(),SLOT(handleSeriesAdded(QAbstractSeries*,Domain*)));
QObject::connect(chart->d_ptr->m_dataset,SIGNAL(seriesRemoved(QAbstractSeries*)),d_ptr.data(),SLOT(handleSeriesRemoved(QAbstractSeries*)));
sauimone
legend detach example. Bug fixes to legend.
r1263 QObject::connect(chart->d_ptr->m_dataset,SIGNAL(seriesUpdated(QAbstractSeries*)),d_ptr.data(),SLOT(handleSeriesUpdated(QAbstractSeries*)));
Michal Klocek
Adds qlegend pimpl...
r950 }
Tero Ahola
No errors anymore when generating docs, wohoo! For now.
r1002 /*!
Destroys the legend object. Legend is always owned by a QChart, so an application should never call this.
*/
Michal Klocek
Adds qlegend pimpl...
r950 QLegend::~QLegend()
{
sauimone
framework for legend
r524 }
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
sauimone
legend doc changes
r1501 \internal
Michal Klocek
Adds qlegend pimpl...
r950 */
sauimone
framework for legend
r524 void QLegend::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Michal Klocek
Adds qlegend pimpl...
r950 Q_UNUSED(option)
Q_UNUSED(widget)
if(!d_ptr->m_backgroundVisible) return;
Tero Ahola
Squashed bunch of warnings
r611
sauimone
layout fix to legend. Documented legend functions.
r724 painter->setOpacity(opacity());
Michal Klocek
Adds qlegend pimpl...
r950 painter->setPen(d_ptr->m_pen);
painter->setBrush(d_ptr->m_brush);
sauimone
added roundness to legend background
r1453 painter->drawRoundRect(rect(),d_ptr->roundness(rect().width()),d_ptr->roundness(rect().height()));
sauimone
framework for legend
r524 }
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
sauimone
legend doc changes
r1501 \internal
Michal Klocek
Adds qlegend pimpl...
r950 */
sauimone
framework for legend
r524 QRectF QLegend::boundingRect() const
{
Michal Klocek
Adds qlegend pimpl...
r950 return d_ptr->m_rect;
sauimone
framework for legend
r524 }
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
Michal Klocek
Adds qlegend pimpl...
r950 Sets the \a brush of legend. Brush affects the background of legend.
*/
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737 void QLegend::setBrush(const QBrush &brush)
sauimone
background to legend, theme applies
r540 {
Michal Klocek
Adds qlegend pimpl...
r950 if (d_ptr->m_brush != brush) {
d_ptr->m_brush = brush;
Michal Klocek
Adds force option to chartTheme...
r645 update();
}
}
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
Michal Klocek
Adds qlegend pimpl...
r950 Returns the brush used by legend.
*/
Michal Klocek
Adds force option to chartTheme...
r645 QBrush QLegend::brush() const
{
Michal Klocek
Adds qlegend pimpl...
r950 return d_ptr->m_brush;
Michal Klocek
Adds force option to chartTheme...
r645 }
Tero Ahola
Adding legend properties
r1452 void QLegend::setColor(QColor color)
{
QBrush b = d_ptr->m_brush;
Tero Ahola
Fixed setting the legend (background) color
r1472 if (b.style() != Qt::SolidPattern || b.color() != color) {
b.setStyle(Qt::SolidPattern);
Tero Ahola
Adding legend properties
r1452 b.setColor(color);
setBrush(b);
emit colorChanged(color);
}
}
QColor QLegend::color()
{
return d_ptr->m_brush.color();
}
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
Michal Klocek
Adds qlegend pimpl...
r950 Sets the \a pen of legend. Pen affects the legend borders.
*/
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737 void QLegend::setPen(const QPen &pen)
Michal Klocek
Adds force option to chartTheme...
r645 {
Michal Klocek
Adds qlegend pimpl...
r950 if (d_ptr->m_pen != pen) {
d_ptr->m_pen = pen;
Michal Klocek
Adds force option to chartTheme...
r645 update();
}
sauimone
background to legend, theme applies
r540 }
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
Michal Klocek
Adds qlegend pimpl...
r950 Returns the pen used by legend
*/
sauimone
layout fix to legend. Documented legend functions.
r724
Michal Klocek
Adds force option to chartTheme...
r645 QPen QLegend::pen() const
sauimone
background to legend, theme applies
r540 {
Michal Klocek
Adds qlegend pimpl...
r950 return d_ptr->m_pen;
sauimone
background to legend, theme applies
r540 }
Tero Ahola
Adding legend properties
r1452 void QLegend::setBorderColor(QColor color)
{
QPen p = d_ptr->m_pen;
if (p.color() != color) {
p.setColor(color);
setPen(p);
emit borderColorChanged(color);
}
}
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357
Tero Ahola
Adding legend properties
r1452 QColor QLegend::borderColor()
{
return d_ptr->m_pen.color();
}
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357
void QLegend::setAlignment(Qt::Alignment alignment)
sauimone
legend layouting change
r616 {
sauimone
legend detach logic fix
r1281 if(d_ptr->m_alignment!=alignment) {
Michal Klocek
Adds qlegend pimpl...
r950 d_ptr->m_alignment = alignment;
d_ptr->updateLayout();
Michal Klocek
Refactor qledgend handling...
r855 }
sauimone
Scrolling logic to legend
r716 }
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 Qt::Alignment QLegend::alignment() const
sauimone
Scrolling logic to legend
r716 {
Michal Klocek
Adds qlegend pimpl...
r950 return d_ptr->m_alignment;
sauimone
legend layouting change
r616 }
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
Michal Klocek
Adds qlegend pimpl...
r950 Detaches the legend from chart. Chart won't change layout of the legend.
*/
void QLegend::detachFromChart()
sauimone
framework for legend
r524 {
Michal Klocek
Adds qlegend pimpl...
r950 d_ptr->m_attachedToChart = false;
sauimone
handleThemeChanged slot to legend.
r586 }
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
Michal Klocek
Adds qlegend pimpl...
r950 Attaches the legend to chart. Chart may change layout of the legend.
*/
void QLegend::attachToChart()
sauimone
handleThemeChanged slot to legend.
r586 {
sauimone
legend example to documentation. minor legend fixes
r1300 d_ptr->attachToChart();
sauimone
handleThemeChanged slot to legend.
r586 }
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
Michal Klocek
Adds qlegend pimpl...
r950 Returns true, if legend is attached to chart.
*/
bool QLegend::isAttachedToChart()
sauimone
Added handling for pieslice add/remove to legend
r637 {
Michal Klocek
Adds qlegend pimpl...
r950 return d_ptr->m_attachedToChart;
sauimone
Added handling for pieslice add/remove to legend
r637 }
sauimone
legend layout with padding
r799 /*!
Michal Klocek
Adds qlegend pimpl...
r950 Sets the visibility of legend background to \a visible
*/
void QLegend::setBackgroundVisible(bool visible)
sauimone
legend layout with padding
r799 {
Tero Ahola
Adding legend properties
r1452 if(d_ptr->m_backgroundVisible != visible) {
d_ptr->m_backgroundVisible = visible;
Michal Klocek
Adds qlegend pimpl...
r950 update();
Tero Ahola
Adding legend properties
r1452 emit backgroundVisibleChanged(visible);
Michal Klocek
Adds qlegend pimpl...
r950 }
sauimone
legend layout with padding
r799 }
/*!
Michal Klocek
Adds qlegend pimpl...
r950 Returns the visibility of legend background
*/
bool QLegend::isBackgroundVisible() const
sauimone
legend layout with padding
r799 {
Michal Klocek
Adds qlegend pimpl...
r950 return d_ptr->m_backgroundVisible;
sauimone
legend layout with padding
r799 }
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
Michal Klocek
Adds qlegend pimpl...
r950 \internal \a event see QGraphicsWidget for details
*/
void QLegend::resizeEvent(QGraphicsSceneResizeEvent *event)
sauimone
handleThemeChanged slot to legend.
r586 {
Michal Klocek
Adds qlegend pimpl...
r950 const QRectF& rect = QRectF(QPoint(0,0),event->newSize());
QGraphicsWidget::resizeEvent(event);
if(d_ptr->m_rect != rect) {
d_ptr->m_rect = rect;
d_ptr->updateLayout();
}
sauimone
Legend can handle removing of series
r576 }
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
Michal Klocek
Adds qlegend pimpl...
r950 \internal \a event see QGraphicsWidget for details
*/
void QLegend::hideEvent(QHideEvent *event)
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 {
Michal Klocek
Adds qlegend pimpl...
r950 QGraphicsWidget::hideEvent(event);
setEnabled(false);
d_ptr->updateLayout();
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 }
sauimone
layout fix to legend. Documented legend functions.
r724 /*!
Michal Klocek
Adds qlegend pimpl...
r950 \internal \a event see QGraphicsWidget for details
*/
void QLegend::showEvent(QShowEvent *event)
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 {
Michal Klocek
Adds qlegend pimpl...
r950 QGraphicsWidget::showEvent(event);
setEnabled(true);
d_ptr->updateLayout();
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 }
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529
Michal Klocek
Adds qlegend pimpl...
r950 qreal QLegend::minWidth() const
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 {
Michal Klocek
Adds qlegend pimpl...
r950 return d_ptr->m_minWidth;
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 }
Michal Klocek
Adds qlegend pimpl...
r950 qreal QLegend::minHeight() const
sauimone
handleThemeChanged slot to legend.
r586 {
Michal Klocek
Adds qlegend pimpl...
r950 return d_ptr->m_minHeight;
}
Michal Klocek
Refactor qledgend handling...
r855
Michal Klocek
Adds qlegend pimpl...
r950 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sauimone
legend example to documentation. minor legend fixes
r1300 QLegendPrivate::QLegendPrivate(ChartPresenter* presenter, QChart *chart, QLegend *q):
q_ptr(q),
m_presenter(presenter),
m_chart(chart),
m_markers(new QGraphicsItemGroup(q)),
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 m_alignment(Qt::AlignTop),
Tero Ahola
Fixed decoration of QLegend
r1455 m_brush(QBrush()),
m_pen(QPen()),
sauimone
legend example to documentation. minor legend fixes
r1300 m_offsetX(0),
m_offsetY(0),
m_minWidth(0),
m_minHeight(0),
m_width(0),
m_height(0),
sauimone
added roundness to legend background
r1453 m_diameter(5),
sauimone
legend example to documentation. minor legend fixes
r1300 m_attachedToChart(true),
m_backgroundVisible(false)
Michal Klocek
Adds qlegend pimpl...
r950 {
Michal Klocek
Refactor qledgend handling...
r855
sauimone
handleThemeChanged slot to legend.
r586 }
Michal Klocek
Adds qlegend pimpl...
r950 QLegendPrivate::~QLegendPrivate()
{
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529
Michal Klocek
Adds qlegend pimpl...
r950 }
void QLegendPrivate::setOffset(qreal x, qreal y)
Michal Klocek
Refactor qledgend handling...
r855 {
sauimone
better legend detach layout. updated legend example
r1444 bool scrollHorizontal = true;
Michal Klocek
Refactor qledgend handling...
r855 switch(m_alignment) {
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 case Qt::AlignTop:
case Qt::AlignBottom: {
sauimone
better legend detach layout. updated legend example
r1444 scrollHorizontal = true;
Michal Klocek
Refactor qledgend handling...
r855 break;
sauimone
legend layouting change
r616 }
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 case Qt::AlignLeft:
case Qt::AlignRight: {
sauimone
better legend detach layout. updated legend example
r1444 scrollHorizontal = false;
break;
}
}
sauimone
Scrolling logic to legend
r716
sauimone
fixed legend scrolling in detached mode. updated example
r1446 // If detached, the scrolling direction is vertical instead of horizontal and vice versa.
sauimone
better legend detach layout. updated legend example
r1444 if (!m_attachedToChart) {
scrollHorizontal = !scrollHorizontal;
}
sauimone
Scrolling logic to legend
r716
sauimone
fixed legend scrolling in detached mode. updated example
r1446 // Limit offset between m_minOffset and m_maxOffset
sauimone
better legend detach layout. updated legend example
r1444 if (scrollHorizontal) {
if(m_width<=m_rect.width()) return;
if (x != m_offsetX) {
sauimone
fixed legend scrolling in detached mode. updated example
r1446 m_offsetX = qBound(m_minOffsetX, x, m_maxOffsetX);
sauimone
better legend detach layout. updated legend example
r1444 m_markers->setPos(-m_offsetX,m_rect.top());
}
} else {
if(m_height<=m_rect.height()) return;
if (y != m_offsetY) {
sauimone
fixed legend scrolling in detached mode. updated example
r1446 m_offsetY = qBound(m_minOffsetY, y, m_maxOffsetY);
sauimone
better legend detach layout. updated legend example
r1444 m_markers->setPos(m_rect.left(),-m_offsetY);
sauimone
Scrolling logic to legend
r716 }
sauimone
split legend layout to vertical and horizontal functions
r810 }
Michal Klocek
Refactor qledgend handling...
r855 }
sauimone
Scrolling logic to legend
r716
sauimone
moved legend offset to private side
r1458 QPointF QLegendPrivate::offset() const
{
return QPointF(m_offsetX,m_offsetY);
}
sauimone
Scrolling logic to legend
r716
Michal Klocek
Adds qlegend pimpl...
r950 void QLegendPrivate::updateLayout()
sauimone
Scrolling logic to legend
r716 {
sauimone
better legend detach layout. updated legend example
r1444 if (!m_attachedToChart) {
updateDetachedLayout();
return;
}
Michal Klocek
Adds qlegend pimpl...
r950 m_offsetX=0;
Michal Klocek
Refactor qledgend handling...
r855 QList<QGraphicsItem *> items = m_markers->childItems();
if(items.isEmpty()) return;
m_minWidth=0;
m_minHeight=0;
switch(m_alignment) {
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 case Qt::AlignTop:
case Qt::AlignBottom: {
Michal Klocek
Refactor qledgend handling...
r855 QPointF point = m_rect.topLeft();
m_width = 0;
foreach (QGraphicsItem *item, items) {
sauimone
fix: series visible now affects legend items also
r1459 if (item->isVisible()) {
item->setPos(point.x(),m_rect.height()/2 -item->boundingRect().height()/2);
const QRectF& rect = item->boundingRect();
qreal w = rect.width();
m_minWidth=qMax(m_minWidth,w);
m_minHeight=qMax(m_minHeight,rect.height());
m_width+=w;
point.setX(point.x() + w);
}
Michal Klocek
Refactor qledgend handling...
r855 }
Michal Klocek
Adds qlegend pimpl...
r950 if(m_width<m_rect.width()) {
Michal Klocek
Refactor qledgend handling...
r855 m_markers->setPos(m_rect.width()/2-m_width/2,m_rect.top());
Michal Klocek
Adds qlegend pimpl...
r950 }
else {
Michal Klocek
Refactor qledgend handling...
r855 m_markers->setPos(m_rect.topLeft());
}
m_height=m_minHeight;
}
break;
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 case Qt::AlignLeft:
case Qt::AlignRight: {
Michal Klocek
Refactor qledgend handling...
r855 QPointF point = m_rect.topLeft();
m_height = 0;
foreach (QGraphicsItem *item, items) {
sauimone
fix: series visible now affects legend items also
r1459 if (item->isVisible()) {
item->setPos(point);
const QRectF& rect = item->boundingRect();
qreal h = rect.height();
m_minWidth=qMax(m_minWidth,rect.width());
m_minHeight=qMax(m_minHeight,h);
m_height+=h;
point.setY(point.y() + h);
}
Michal Klocek
Refactor qledgend handling...
r855 }
Michal Klocek
Adds qlegend pimpl...
r950 if(m_height<m_rect.height()) {
Michal Klocek
Refactor qledgend handling...
r855 m_markers->setPos(m_rect.left(),m_rect.height()/2-m_height/2);
Michal Klocek
Adds qlegend pimpl...
r950 }
else {
Michal Klocek
Refactor qledgend handling...
r855 m_markers->setPos(m_rect.topLeft());
}
m_width=m_minWidth;
}
break;
}
sauimone
Scrolling logic to legend
r716
sauimone
fixed legend scrolling in detached mode. updated example
r1446 m_minOffsetX = 0;
m_minOffsetY = 0;
m_maxOffsetX = m_width - m_rect.width();
m_maxOffsetY = m_height - m_rect.height();
sauimone
better legend detach layout. updated legend example
r1444 m_presenter->updateLayout();
}
void QLegendPrivate::updateDetachedLayout()
{
sauimone
fixed legend scrolling in detached mode. updated example
r1446 // Detached layout is different.
// In detached mode legend may have multiple rows and columns, so layout calculations
// differ a log from attached mode.
// Also the scrolling logic is bit different.
sauimone
better legend detach layout. updated legend example
r1444 m_offsetX=0;
sauimone
fixed legend scrolling in detached mode. updated example
r1446 m_offsetY=0;
sauimone
better legend detach layout. updated legend example
r1444 QList<QGraphicsItem *> items = m_markers->childItems();
if(items.isEmpty()) return;
m_minWidth = 0;
m_minHeight = 0;
switch (m_alignment) {
case Qt::AlignTop: {
QPointF point = m_rect.topLeft();
m_width = 0;
m_height = 0;
for (int i=0; i<items.count(); i++) {
QGraphicsItem *item = items.at(i);
sauimone
fix: series visible now affects legend items also
r1459 if (item->isVisible()) {
const QRectF& rect = item->boundingRect();
qreal w = rect.width();
qreal h = rect.height();
m_minWidth = qMax(m_minWidth,w);
m_minHeight = qMax(m_minHeight,rect.height());
m_height = qMax(m_height,h);
item->setPos(point.x(),point.y());
point.setX(point.x() + w);
if (point.x() + w > m_rect.topLeft().x() + m_rect.width()) {
// Next item would go off rect.
point.setX(m_rect.topLeft().x());
point.setY(point.y() + h);
if (i+1 < items.count()) {
m_height += h;
}
sauimone
better legend detach layout. updated legend example
r1444 }
}
}
m_markers->setPos(m_rect.topLeft());
m_width = m_minWidth;
sauimone
fixed legend scrolling in detached mode. updated example
r1446
m_minOffsetX = 0;
m_minOffsetY = 0;
m_maxOffsetX = m_width - m_rect.width();
m_maxOffsetY = m_height - m_rect.height();
sauimone
better legend detach layout. updated legend example
r1444 }
break;
case Qt::AlignBottom: {
QPointF point = m_rect.bottomLeft();
m_width = 0;
m_height = 0;
for (int i=0; i<items.count(); i++) {
QGraphicsItem *item = items.at(i);
sauimone
fix: series visible now affects legend items also
r1459 if (item->isVisible()) {
const QRectF& rect = item->boundingRect();
qreal w = rect.width();
qreal h = rect.height();
m_minWidth = qMax(m_minWidth,w);
m_minHeight = qMax(m_minHeight,rect.height());
m_height = qMax(m_height,h);
item->setPos(point.x(),point.y() - h);
point.setX(point.x() + w);
if (point.x() + w > m_rect.bottomLeft().x() + m_rect.width()) {
// Next item would go off rect.
point.setX(m_rect.bottomLeft().x());
point.setY(point.y() - h);
if (i+1 < items.count()) {
m_height += h;
}
sauimone
better legend detach layout. updated legend example
r1444 }
}
}
m_markers->setPos(m_rect.topLeft());
m_width = m_minWidth;
sauimone
fixed legend scrolling in detached mode. updated example
r1446
m_minOffsetX = 0;
m_minOffsetY = qMin(m_rect.topLeft().y(), m_rect.topLeft().y() - m_height + m_rect.height());
m_maxOffsetX = m_width - m_rect.width();
m_maxOffsetY = 0;
sauimone
better legend detach layout. updated legend example
r1444 }
break;
case Qt::AlignLeft: {
QPointF point = m_rect.topLeft();
m_width = 0;
m_height = 0;
qreal maxWidth = 0;
for (int i=0; i<items.count(); i++) {
QGraphicsItem *item = items.at(i);
sauimone
fix: series visible now affects legend items also
r1459 if (item->isVisible()) {
const QRectF& rect = item->boundingRect();
qreal w = rect.width();
qreal h = rect.height();
m_minWidth = qMax(m_minWidth,rect.width());
m_minHeight = qMax(m_minHeight,h);
maxWidth = qMax(maxWidth,w);
item->setPos(point.x(),point.y());
point.setY(point.y() + h);
if (point.y() + h > m_rect.topLeft().y() + m_rect.height()) {
// Next item would go off rect.
point.setX(point.x() + maxWidth);
point.setY(m_rect.topLeft().y());
if (i+1 < items.count()) {
m_width += maxWidth;
maxWidth = 0;
}
sauimone
better legend detach layout. updated legend example
r1444 }
}
}
sauimone
fixed legend scrolling in detached mode. updated example
r1446 m_width += maxWidth;
sauimone
better legend detach layout. updated legend example
r1444 m_markers->setPos(m_rect.topLeft());
m_height = m_minHeight;
sauimone
fixed legend scrolling in detached mode. updated example
r1446
m_minOffsetX = 0;
m_minOffsetY = 0;
m_maxOffsetX = m_width - m_rect.width();
m_maxOffsetY = m_height - m_rect.height();
sauimone
better legend detach layout. updated legend example
r1444 }
break;
case Qt::AlignRight: {
QPointF point = m_rect.topRight();
m_width = 0;
m_height = 0;
qreal maxWidth = 0;
for (int i=0; i<items.count(); i++) {
QGraphicsItem *item = items.at(i);
sauimone
fix: series visible now affects legend items also
r1459 if (item->isVisible()) {
const QRectF& rect = item->boundingRect();
qreal w = rect.width();
qreal h = rect.height();
m_minWidth = qMax(m_minWidth,rect.width());
m_minHeight = qMax(m_minHeight,h);
maxWidth = qMax(maxWidth,w);
item->setPos(point.x() - w,point.y());
point.setY(point.y() + h);
if (point.y() + h > m_rect.topLeft().y() + m_rect.height()) {
// Next item would go off rect.
point.setX(point.x() - maxWidth);
point.setY(m_rect.topLeft().y());
if (i+1 < items.count()) {
m_width += maxWidth;
maxWidth = 0;
}
sauimone
better legend detach layout. updated legend example
r1444 }
}
}
sauimone
fixed legend scrolling in detached mode. updated example
r1446 m_width += maxWidth;
sauimone
better legend detach layout. updated legend example
r1444 m_markers->setPos(m_rect.topLeft());
m_height = m_minHeight;
sauimone
fixed legend scrolling in detached mode. updated example
r1446
m_minOffsetX = qMin(m_rect.topLeft().x(), m_rect.topLeft().x() - m_width + m_rect.width());
m_minOffsetY = 0;
m_maxOffsetX = 0;
m_maxOffsetY = m_height - m_rect.height();
sauimone
better legend detach layout. updated legend example
r1444 }
break;
default:
break;
sauimone
legend detach logic fix
r1281 }
sauimone
Scrolling logic to legend
r716 }
sauimone
legend example to documentation. minor legend fixes
r1300 void QLegendPrivate::attachToChart()
{
m_attachedToChart = true;
q_ptr->setParent(m_chart);
}
sauimone
added roundness to legend background
r1453 int QLegendPrivate::roundness(qreal size)
{
return 100*m_diameter/int(size);
}
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 void QLegendPrivate::handleSeriesAdded(QAbstractSeries *series, Domain *domain)
Michal Klocek
Refactor qledgend handling...
r855 {
Michal Klocek
Adds qlegend pimpl...
r950 Q_UNUSED(domain)
sauimone
Scrolling logic to legend
r716
Michal Klocek
Adds qlegend pimpl...
r950 QList<LegendMarker*> markers = series->d_ptr->createLegendMarker(q_ptr);
Tero Ahola
Fixed a bug with legend not updating series labels
r1328 foreach(LegendMarker* marker, markers)
Michal Klocek
Adds qlegend pimpl...
r950 m_markers->addToGroup(marker);
sauimone
Scrolling logic to legend
r716
sauimone
fix: series visible now affects legend items also
r1459 QObject::connect(series, SIGNAL(visibleChanged()), this, SLOT(handleSeriesVisibleChanged()));
Tero Ahola
Fixed a bug with legend not updating series labels
r1328 if(series->type() == QAbstractSeries::SeriesTypePie) {
Michal Klocek
Adds trivial legend handling for slices when removed or added
r956 QPieSeries *pieSeries = static_cast<QPieSeries *>(series);
Jani Honkonen
pie: make slice added/removed signals public (again)
r1213 QObject::connect(pieSeries, SIGNAL(added(QList<QPieSlice*>)), this, SLOT(handleUpdatePieSeries()));
QObject::connect(pieSeries, SIGNAL(removed(QList<QPieSlice*>)), this, SLOT(handleUpdatePieSeries()));
Michal Klocek
Adds trivial legend handling for slices when removed or added
r956 }
Michal Klocek
Refactor qledgend handling...
r855 updateLayout();
sauimone
Scrolling logic to legend
r716 }
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 void QLegendPrivate::handleSeriesRemoved(QAbstractSeries *series)
sauimone
Scrolling logic to legend
r716 {
Michal Klocek
Adds qlegend pimpl...
r950 QList<QGraphicsItem *> items = m_markers->childItems();
Michal Klocek
Adds trivial legend handling for slices when removed or added
r956 foreach (QGraphicsItem *markers, items) {
LegendMarker *marker = static_cast<LegendMarker*>(markers);
if (marker->series() == series) {
delete marker;
}
}
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 if(series->type() == QAbstractSeries::SeriesTypePie)
Michal Klocek
Adds trivial legend handling for slices when removed or added
r956 {
QPieSeries *pieSeries = static_cast<QPieSeries *>(series);
Jani Honkonen
pie: make slice added/removed signals public (again)
r1213 QObject::disconnect(pieSeries, SIGNAL(added(QList<QPieSlice*>)), this, SLOT(handleUpdatePieSeries()));
QObject::disconnect(pieSeries, SIGNAL(removed(QList<QPieSlice*>)), this, SLOT(handleUpdatePieSeries()));
Michal Klocek
Adds trivial legend handling for slices when removed or added
r956 }
Michal Klocek
Adds qlegend pimpl...
r950
Michal Klocek
Refactor qledgend handling...
r855 updateLayout();
}
sauimone
layout fix to legend. Documented legend functions.
r724
sauimone
legend detach example. Bug fixes to legend.
r1263 void QLegendPrivate::handleSeriesUpdated(QAbstractSeries *series)
{
// TODO: find out which markers are are added or removed. Update them
// TODO: better implementation
handleSeriesRemoved(series);
Domain domain;
handleSeriesAdded(series, &domain);
}
Jani Honkonen
API review changes for pie
r1009 void QLegendPrivate::handleUpdatePieSeries()
Michal Klocek
Adds trivial legend handling for slices when removed or added
r956 {
//TODO: reimplement to be optimal
Jani Honkonen
pie: make slice added/removed signals public (again)
r1213 QPieSeries* series = qobject_cast<QPieSeries *> (sender());
Q_ASSERT(series);
handleSeriesRemoved(series);
handleSeriesAdded(series, 0);
Michal Klocek
Adds trivial legend handling for slices when removed or added
r956 }
sauimone
fix: series visible now affects legend items also
r1459 void QLegendPrivate::handleSeriesVisibleChanged()
{
QAbstractSeries* series = qobject_cast<QAbstractSeries *> (sender());
QList<QGraphicsItem *> items = m_markers->childItems();
foreach (QGraphicsItem *markers, items) {
LegendMarker *marker = static_cast<LegendMarker*>(markers);
if (marker->series() == series) {
marker->setVisible(!marker->isVisible());
}
}
updateLayout();
}
sauimone
moved legend offset to private side
r1458
sauimone
framework for legend
r524 #include "moc_qlegend.cpp"
Michal Klocek
Adds qlegend pimpl...
r950 #include "moc_qlegend_p.cpp"
Tero Ahola
Code review: Fixed simple issues in Bar and Legend
r737
sauimone
framework for legend
r524 QTCOMMERCIALCHART_END_NAMESPACE