##// END OF EJS Templates
combined clicked and rightclicked events of legend to one event with parameter
combined clicked and rightclicked events of legend to one event with parameter

File last commit:

r567:17f0257049a1
r567:17f0257049a1
Show More
qlegend.cpp
203 lines | 5.2 KiB | text/x-c | CppLexer
sauimone
framework for legend
r524 #include "qchartglobal.h"
#include "qlegend.h"
#include "qseries.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"
#include "qpieslice.h"
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 #include <QPainter>
#include <QPen>
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
framework for legend
r524 QLegend::QLegend(QGraphicsItem *parent)
: QGraphicsObject(parent)
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 ,mBoundingRect(0,0,1,1)
sauimone
background to legend, theme applies
r540 ,mBackgroundBrush(Qt::darkGray) // TODO: from theme?
sauimone
framework for legend
r524 {
}
void QLegend::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
sauimone
background to legend, theme applies
r540 painter->setBrush(mBackgroundBrush);
painter->drawRect(mBoundingRect);
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 foreach(LegendMarker* m, mMarkers) {
QRectF r = m->boundingRect();
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 painter->setBrush(m->brush());
sauimone
Separated legend marker to private header. Added signals for left and right mouse click
r547 painter->drawText(r.x() + r.width()*2, r.y() + r.height(), m->name());
sauimone
framework for legend
r524 }
}
QRectF QLegend::boundingRect() const
{
return mBoundingRect;
}
sauimone
background to legend, theme applies
r540 void QLegend::setBackgroundBrush(const QBrush& brush)
{
mBackgroundBrush = brush;
}
QBrush QLegend::backgroundBrush() const
{
return mBackgroundBrush;
}
sauimone
framework for legend
r524 void QLegend::handleSeriesAdded(QSeries* series,Domain* domain)
{
mSeriesList.append(series);
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565
switch (series->type())
{
case QSeries::SeriesTypeLine: {
QLineSeries* lineSeries = static_cast<QLineSeries*>(series);
createMarker(lineSeries);
break;
}
case QSeries::SeriesTypeArea: {
QAreaSeries* areaSeries = static_cast<QAreaSeries*>(series);
createMarker(areaSeries->upperSeries());
createMarker(areaSeries->lowerSeries());
break;
}
case QSeries::SeriesTypeBar: {
QBarSeries* barSeries = static_cast<QBarSeries*>(series);
createMarkers(barSeries);
break;
}
case QSeries::SeriesTypeStackedBar: {
QStackedBarSeries* stackedBarSeries = static_cast<QStackedBarSeries*>(series);
createMarkers(stackedBarSeries);
break;
}
case QSeries::SeriesTypePercentBar: {
QPercentBarSeries* percentBarSeries = static_cast<QPercentBarSeries*>(series);
createMarkers(percentBarSeries);
break;
}
case QSeries::SeriesTypeScatter: {
QScatterSeries *scatterSeries = static_cast<QScatterSeries *>(series);
createMarker(scatterSeries);
break;
}
case QSeries::SeriesTypePie: {
QPieSeries *pieSeries = static_cast<QPieSeries *>(series);
createMarkers(pieSeries);
break;
}
case QSeries::SeriesTypeSpline: {
QSplineSeries* splineSeries = static_cast<QSplineSeries*>(series);
break;
}
default: {
qDebug()<< "QLegend::handleSeriesAdded" << series->type() << "not implemented.";
break;
}
}
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 layoutChanged();
sauimone
framework for legend
r524 }
void QLegend::handleSeriesRemoved(QSeries* series)
{
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 // TODO: delete markers, disconnect.
sauimone
framework for legend
r524 mSeriesList.removeOne(series);
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 layoutChanged();
}
void QLegend::handleGeometryChanged(const QRectF& size)
{
mBoundingRect = size;
layoutChanged();
sauimone
framework for legend
r524 }
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 void QLegend::createMarker(QXYSeries* series)
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 {
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 LegendMarker* marker = new LegendMarker(series,this);
marker->setName(series->name());
marker->setBrush(series->brush());
sauimone
combined clicked and rightclicked events of legend to one event with parameter
r567 connect(marker,SIGNAL(clicked(QSeries*,Qt::MouseButton)),this,SIGNAL(clicked(QSeries*,Qt::MouseButton)));
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 mMarkers.append(marker);
childItems().append(marker);
}
void QLegend::createMarkers(QBarSeries *series)
{
foreach(QBarSet* s, series->barSets()) {
LegendMarker* marker = new LegendMarker(series,this);
marker->setName(s->name());
marker->setBrush(s->brush());
sauimone
combined clicked and rightclicked events of legend to one event with parameter
r567 connect(marker,SIGNAL(clicked(QBarSet*,Qt::MouseButton)),this,SIGNAL(clicked(QBarSet*,Qt::MouseButton)));
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 mMarkers.append(marker);
childItems().append(marker);
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 }
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
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 void QLegend::createMarkers(QPieSeries *series)
{
foreach(QPieSlice* s, series->slices()) {
LegendMarker* marker = new LegendMarker(series,this);
marker->setName(s->label());
marker->setBrush(s->sliceBrush());
sauimone
combined clicked and rightclicked events of legend to one event with parameter
r567 connect(marker,SIGNAL(clicked(QPieSlice*,Qt::MouseButton)),this,SIGNAL(clicked(QPieSlice*,Qt::MouseButton)));
sauimone
more intelligent legend. fixed compiler warning in bar.cpp
r565 mMarkers.append(marker);
childItems().append(marker);
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 }
}
void QLegend::layoutChanged()
{
// Calculate layout for markers and text
if (mMarkers.count() <= 0) {
// Nothing to do
return;
}
// TODO: marker defined by series.
QSizeF markerSize(10,10);
// TODO: better layout, this is just concept.
// Leave some space around markers like this: | x x x x |
sauimone
background to legend, theme applies
r540 qreal steps = mMarkers.count();
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529
sauimone
background to legend, theme applies
r540 qreal xStep = mBoundingRect.width() / steps;
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 qreal yStep = mBoundingRect.height() / steps;
sauimone
background to legend, theme applies
r540 qreal x = mBoundingRect.x() + 5;
qreal y = mBoundingRect.y() + (mBoundingRect.height() - markerSize.height())/2;
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 foreach (LegendMarker* m, mMarkers) {
sauimone
background to legend, theme applies
r540 qDebug() << "marker x:" << x;
qDebug() << "marker y:" << y;
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 m->setBoundingRect(QRectF(x,y,markerSize.width(),markerSize.height()));
sauimone
background to legend, theme applies
r540 x += xStep;
sauimone
First version of legend. Simple markers and serie names. Using drilldown as example for now.
r529 }
}
sauimone
framework for legend
r524
#include "moc_qlegend.cpp"
QTCOMMERCIALCHART_END_NAMESPACE