diff --git a/src/chartpresenter.cpp b/src/chartpresenter.cpp index 542d35b..5fa61d4 100644 --- a/src/chartpresenter.cpp +++ b/src/chartpresenter.cpp @@ -2,6 +2,7 @@ #include "qchartaxis.h" #include "chartpresenter_p.h" #include "chartdataset_p.h" +#include "charttheme_p.h" //series #include "barchartseries.h" #include "stackedbarchartseries.h" @@ -25,10 +26,12 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE ChartPresenter::ChartPresenter(QChart* chart,ChartDataSet* dataset):QObject(chart), m_chart(chart), m_dataset(dataset), +m_chartTheme(0), m_domainIndex(0), m_marginSize(0), m_rect(QRectF(QPoint(0,0),m_chart->size())) { + setTheme(QChart::ChartThemeDefault); createConnections(); createDeafultAxis(); } @@ -82,7 +85,7 @@ void ChartPresenter::handleSeriesAdded(QChartSeries* series) case QChartSeries::SeriesTypeLine: { QXYChartSeries* lineSeries = static_cast(series); XYLineChartItem* item = new LineChartAnimationItem(this,lineSeries,m_chart); - item->setPen(lineSeries->pen()); + m_chartTheme->decorate(item,lineSeries,m_chartItems.count()); QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&))); QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&))); QObject::connect(lineSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int))); @@ -93,14 +96,7 @@ void ChartPresenter::handleSeriesAdded(QChartSeries* series) case QChartSeries::SeriesTypeBar: { BarChartSeries* barSeries = static_cast(series); BarGroup* item = new BarGroup(*barSeries,m_chart); - - // Add some fugly colors for 5 fist series... - item->addColor(QColor(255,0,0,128)); - item->addColor(QColor(255,255,0,128)); - item->addColor(QColor(0,255,0,128)); - item->addColor(QColor(0,0,255,128)); - item->addColor(QColor(255,128,0,128)); - + m_chartTheme->decorate(item,barSeries,m_chartItems.count()); QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&))); QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&))); QObject::connect(barSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int))); @@ -113,13 +109,7 @@ void ChartPresenter::handleSeriesAdded(QChartSeries* series) StackedBarChartSeries* stackedBarSeries = static_cast(series); StackedBarGroup* item = new StackedBarGroup(*stackedBarSeries,m_chart); - - // Add some fugly colors for 5 fist series... - item->addColor(QColor(255,0,0,128)); - item->addColor(QColor(255,255,0,128)); - item->addColor(QColor(0,255,0,128)); - item->addColor(QColor(0,0,255,128)); - item->addColor(QColor(255,128,0,128)); + m_chartTheme->decorate(item,stackedBarSeries,m_chartItems.count()); QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&))); QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&))); QObject::connect(stackedBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int))); @@ -131,13 +121,7 @@ void ChartPresenter::handleSeriesAdded(QChartSeries* series) PercentBarChartSeries* percentBarSeries = static_cast(series); PercentBarGroup* item = new PercentBarGroup(*percentBarSeries,m_chart); - - // Add some fugly colors for 5 fist series... - item->addColor(QColor(255,0,0,128)); - item->addColor(QColor(255,255,0,128)); - item->addColor(QColor(0,255,0,128)); - item->addColor(QColor(0,0,255,128)); - item->addColor(QColor(255,128,0,128)); + m_chartTheme->decorate(item,percentBarSeries ,m_chartItems.count()); QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&))); QObject::connect(m_dataset,SIGNAL(domainChanged(const Domain&)),item,SLOT(handleDomainChanged(const Domain&))); QObject::connect(percentBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int))); @@ -219,6 +203,29 @@ void ChartPresenter::zoomReset() m_dataset->clearDomains(); } +void ChartPresenter::setTheme(QChart::ChartThemeId theme) +{ + delete m_chartTheme; + + m_chartTheme = ChartTheme::createTheme(theme); + + m_chartTheme->decorate(m_chart); + QMapIterator i(m_chartItems); + + int index=0; + while (i.hasNext()) { + i.next(); + index++; + m_chartTheme->decorate(i.value(),i.key(),index); + } + } + + +QChart::ChartThemeId ChartPresenter::theme() +{ + return (QChart::ChartThemeId) 0; +} + /* void ChartPresenter::setAxisX(const QChartAxis& axis) { diff --git a/src/chartpresenter_p.h b/src/chartpresenter_p.h index fef89ff..9660e79 100644 --- a/src/chartpresenter_p.h +++ b/src/chartpresenter_p.h @@ -2,6 +2,7 @@ #define CHARTPRESENTER_H_ #include "qchartglobal.h" +#include "qchart.h" //becouse of QChart::ChartThemeId //TODO #include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -9,9 +10,10 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE class ChartItem; class QChartSeries; class ChartDataSet; -class QChart; +//class QChart; class Domain; class AxisItem; +class ChartTheme; class ChartPresenter: public QObject { @@ -35,6 +37,9 @@ public: void zoomOut(); void zoomReset(); + void setTheme(QChart::ChartThemeId theme); + QChart::ChartThemeId theme(); + private: void createConnections(); void createDeafultAxis(); @@ -55,9 +60,11 @@ private: ChartDataSet* m_dataset; QVector m_domains; QList m_axis; + ChartTheme *m_chartTheme; int m_domainIndex; int m_marginSize; QRectF m_rect; + }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/charttheme.cpp b/src/charttheme.cpp index 795d592..6957ad8 100644 --- a/src/charttheme.cpp +++ b/src/charttheme.cpp @@ -1,64 +1,29 @@ #include "charttheme_p.h" #include "qchart.h" -QTCOMMERCIALCHART_BEGIN_NAMESPACE -void ChartThemeData::setTheme(int theme) -{ - m_seriesThemes.clear(); - m_seriesIndex = 0; - m_currentTheme = theme; - - switch (theme) { - case QChart::ChartThemeDefault: - // line: solid, dashed, dotted - // line width: 1 - // line color (and opacity) - // line shadow (on/off) - // marker shape: "x", "o", "." - // TODO: define the default theme based on the OS - m_seriesThemes.append(SeriesTheme(QRgb(0xff000000), 2)); - m_seriesThemes.append(SeriesTheme(QRgb(0xff707070), 2)); - m_gradientStartColor = QColor(QRgb(0xffffffff)); - m_gradientEndColor = QColor(QRgb(0xffafafaf)); - break; - case QChart::ChartThemeVanilla: - m_seriesThemes.append(SeriesTheme(QColor(217, 197, 116), 6)); - m_seriesThemes.append(SeriesTheme(QColor(214, 168, 150), 4)); - m_seriesThemes.append(SeriesTheme(QColor(160, 160, 113), 6)); - m_seriesThemes.append(SeriesTheme(QColor(210, 210, 52), 4)); - m_seriesThemes.append(SeriesTheme(QColor(136, 114, 58), 6)); - - m_gradientStartColor = QColor(QRgb(0xff9d844d)); - m_gradientEndColor = QColor(QRgb(0xffafafaf)); - break; - case QChart::ChartThemeIcy: - m_seriesThemes.append(SeriesTheme(QRgb(0xFF0D2673), 2)); - m_seriesThemes.append(SeriesTheme(QRgb(0xFF2685BF), 2)); - m_seriesThemes.append(SeriesTheme(QRgb(0xFF3DADD9), 3)); - m_seriesThemes.append(SeriesTheme(QRgb(0xFF62C3D9), 2)); +//series +#include "barchartseries.h" +#include "stackedbarchartseries.h" +#include "percentbarchartseries.h" +#include "qxychartseries.h" +//items +#include "axisitem_p.h" +#include "bargroup.h" +#include "stackedbargroup.h" +#include "xylinechartitem_p.h" +#include "percentbargroup.h" - m_gradientStartColor = QColor(QRgb(0xffBDE3F2)); - m_gradientEndColor = QColor(QRgb(0xffafafaf)); - break; - case QChart::ChartThemeGrayscale: - m_seriesThemes.append(SeriesTheme(QRgb(0xFF869299), 2)); - m_seriesThemes.append(SeriesTheme(QRgb(0xFFA5BDCC), 2)); - m_seriesThemes.append(SeriesTheme(QRgb(0xFFE8FFFC), 3)); - m_seriesThemes.append(SeriesTheme(QRgb(0xFFCCC2C2), 2)); +//themes +#include "chartthemevanilla_p.h" +#include "chartthemeicy_p.h" +#include "chartthemegrayscale_p.h" +#include "chartthemescientific_p.h" - m_gradientStartColor = QColor(QRgb(0xffffffff)); - m_gradientEndColor = QColor(QRgb(0xffafafaf)); - break; - case QChart::ChartThemeScientific: - m_seriesThemes.append(SeriesTheme(QRgb(0xFF000000), 3)); - m_seriesThemes.append(SeriesTheme(QRgb(0xFFFFAD00), 2)); - m_seriesThemes.append(SeriesTheme(QRgb(0xFF596A75), 2)); - m_seriesThemes.append(SeriesTheme(QRgb(0xFF474747), 2)); - m_gradientStartColor = QColor(QRgb(0xffafafaf)); - m_gradientEndColor = QColor(QRgb(0xffafafaf)); - break; +QTCOMMERCIALCHART_BEGIN_NAMESPACE + +/* TODO case QChart::ChartThemeUnnamed1: m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xff3fa9f5)), 2)); m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xff7AC943)), 2)); @@ -68,45 +33,110 @@ void ChartThemeData::setTheme(int theme) m_gradientStartColor = QColor(QRgb(0xfff3dc9e)); m_gradientEndColor = QColor(QRgb(0xffafafaf)); - break; - default: - Q_ASSERT(false); +*/ + +ChartTheme::ChartTheme() +{ + m_seriesColor.append(QRgb(0xff000000)); + m_seriesColor.append(QRgb(0xff707070)); + m_gradientStartColor = QColor(QRgb(0xffffffff)); + m_gradientEndColor = QColor(QRgb(0xffafafaf)); +} + + +ChartTheme* ChartTheme::createTheme(QChart::ChartThemeId theme) +{ + switch(theme) { + case QChart::ChartThemeDefault: + return new ChartTheme(); + case QChart::ChartThemeVanilla: + return new ChartThemeVanilla(); + case QChart::ChartThemeIcy: + return new ChartThemeIcy(); + case QChart::ChartThemeGrayscale: + return new ChartThemeGrayscale(); + case QChart::ChartThemeScientific: + return new ChartThemeScientific(); + } +} + +void ChartTheme::decorate(QChart* chart) +{ + QLinearGradient backgroundGradient; + backgroundGradient.setColorAt(0.0, m_gradientStartColor); + backgroundGradient.setColorAt(1.0, m_gradientEndColor); + backgroundGradient.setCoordinateMode(QGradient::ObjectBoundingMode); + chart->setChartBackgroundBrush(backgroundGradient); +} +//TODO helper to by removed later +void ChartTheme::decorate(ChartItem* item, QChartSeries* series,int count) +{ + switch(series->type()) + { + case QChartSeries::SeriesTypeLine: { + QXYChartSeries* s = static_cast(series); + XYLineChartItem* i = static_cast(item); + decorate(i,s,count); + break; + } + case QChartSeries::SeriesTypeBar: { + BarChartSeries* b = static_cast(series); + BarGroup* i = static_cast(item); + decorate(i,b,count); + break; + } + case QChartSeries::SeriesTypeStackedBar: { + StackedBarChartSeries* s = static_cast(series); + StackedBarGroup* i = static_cast(item); + decorate(i,s,count); + break; + } + case QChartSeries::SeriesTypePercentBar: { + PercentBarChartSeries* s = static_cast(series); + PercentBarGroup* i = static_cast(item); + decorate(i,s,count); + break; + } + default: + qDebug()<<"Wrong item to be decorated by theme"; break; } + } -ChartTheme::ChartTheme(QObject *parent) : - QObject(parent), - d(new ChartThemeData()) +void ChartTheme::decorate(XYLineChartItem* item, QXYChartSeries* series,int count) { - d->m_currentTheme = QChart::ChartThemeInvalid; - d->m_seriesIndex = 0; + item->setPen(series->pen()); } -void ChartTheme::setTheme(int theme) +void ChartTheme::decorate(BarGroup* item, BarChartSeries* series,int count) { - if (theme != d->m_currentTheme) { - d->setTheme(theme); - foreach (ChartThemeObserver *o, d->m_observers) - o->themeChanged(this); - } + item->addColor(QColor(255,0,0,128)); + item->addColor(QColor(255,255,0,128)); + item->addColor(QColor(0,255,0,128)); + item->addColor(QColor(0,0,255,128)); + item->addColor(QColor(255,128,0,128)); } -SeriesTheme ChartTheme::themeForSeries() +void ChartTheme::decorate(StackedBarGroup* item, StackedBarChartSeries* series,int count) { - if (d->m_seriesThemes.count() == 0) { - return SeriesTheme(); - } else { - // Get the next available theme for the series; if no more themes available start over - // beginning from the first theme in the list - SeriesTheme nextTheme = - d->m_seriesThemes[d->m_seriesIndex % d->m_seriesThemes.count()]; - d->m_seriesIndex++; - return nextTheme; - } + // Add some fugly colors for 5 fist series... + item->addColor(QColor(255,0,0,128)); + item->addColor(QColor(255,255,0,128)); + item->addColor(QColor(0,255,0,128)); + item->addColor(QColor(0,0,255,128)); + item->addColor(QColor(255,128,0,128)); } +void ChartTheme::decorate(PercentBarGroup* item, PercentBarChartSeries* series,int count) +{ +// Add some fugly colors for 5 fist series... + item->addColor(QColor(255,0,0,128)); + item->addColor(QColor(255,255,0,128)); + item->addColor(QColor(0,255,0,128)); + item->addColor(QColor(0,0,255,128)); + item->addColor(QColor(255,128,0,128)); +} -#include "moc_charttheme_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/charttheme_p.h b/src/charttheme_p.h index 8b6b8a3..7816604 100644 --- a/src/charttheme_p.h +++ b/src/charttheme_p.h @@ -2,81 +2,40 @@ #define CHARTTHEME_H #include "qchartglobal.h" -#include -#include +#include "qchart.h" #include -#include -#include QTCOMMERCIALCHART_BEGIN_NAMESPACE -class ChartTheme; - -class ChartThemeObserver -{ -public: - virtual void themeChanged(ChartTheme *theme) = 0; -}; - -/*! - * The theme specific settings for the appearance of a series. TODO: These can be overridden by setting - * custom settings to a QChartSeries object. - */ -struct SeriesTheme { -public: - SeriesTheme() : - linePen(QPen()), - markerPen(QPen()) {} - SeriesTheme(QColor lineColor, qreal lineWidth/*, QPen marker*/) : - linePen(QPen(QBrush(lineColor), lineWidth)), - markerPen(linePen) {} - -//const QBrush & brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJo - // TODO: - //QColor lineColor; - QPen linePen; - //QBrush lineBrush; - QPen markerPen; - //QBrush markerBrush; -}; - -/*! - * Explicitly shared data class for the themes. - */ -class ChartThemeData : public QSharedData +class ChartItem; +class QChartSeries; +class XYLineChartItem; +class QXYChartSeries; +class BarGroup; +class BarChartSeries; +class StackedBarGroup; +class StackedBarChartSeries; +class PercentBarChartSeries; +class PercentBarGroup; + +class ChartTheme { +protected: + explicit ChartTheme(); public: - ChartThemeData() : m_currentTheme(0) {} - ~ChartThemeData() {} - -public: - void setTheme(int theme); - -public: - int m_currentTheme; - QList m_observers; + static ChartTheme* createTheme(QChart::ChartThemeId theme); + void decorate(QChart* chart); + void decorate(ChartItem* item, QChartSeries* series,int count); + void decorate(XYLineChartItem* item, QXYChartSeries*, int count); + void decorate(BarGroup* item, BarChartSeries* series,int count); + void decorate(StackedBarGroup* item, StackedBarChartSeries* series,int count); + void decorate(PercentBarGroup* item, PercentBarChartSeries* series,int count); + +protected: QColor m_gradientStartColor; QColor m_gradientEndColor; - QList m_seriesThemes; - int m_seriesIndex; -}; + QList m_seriesColor; -class ChartTheme : public QObject -{ - Q_OBJECT -public: - explicit ChartTheme(QObject *parent = 0); - explicit ChartTheme(const ChartTheme &other, QObject *parent = 0) : QObject(parent), d(other.d) {} - void operator =(const ChartTheme &other) { d = other.d; } - - void setTheme(int theme); - SeriesTheme themeForSeries(); - void addObserver(ChartThemeObserver *o) { d->m_observers << o; } - -public: - // All the graphical elements of a QChart share the same theme settings - // so let's use explicitly shared data - QExplicitlySharedDataPointer d; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/piechart/pieslice.cpp b/src/piechart/pieslice.cpp index 80e916f..fda691c 100644 --- a/src/piechart/pieslice.cpp +++ b/src/piechart/pieslice.cpp @@ -58,6 +58,7 @@ void PieSlice::paint(QPainter* painter, const QStyleOptionGraphicsItem* /*option QPieSlice data = (static_cast(parentItem()))->m_pieSeries->slice(m_seriesIndex); painter->setBrush(data.m_color); + //painter->setBrush(m_theme.linePen.color()); // From Qt docs: diff --git a/src/piechart/pieslice.h b/src/piechart/pieslice.h index c22641f..444990b 100644 --- a/src/piechart/pieslice.h +++ b/src/piechart/pieslice.h @@ -27,6 +27,7 @@ private: int m_seriesIndex; qreal m_startAngle; qreal m_span; + QRectF m_rect; //SeriesTheme m_theme; }; diff --git a/src/qchart.cpp b/src/qchart.cpp index 1f481ef..9863dae 100644 --- a/src/qchart.cpp +++ b/src/qchart.cpp @@ -17,7 +17,6 @@ #include "percentbarchartseries.h" #include "qxychartseries.h" - #include #include #include @@ -25,28 +24,21 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE QChart::QChart(QGraphicsItem *parent, Qt::WindowFlags wFlags) : QGraphicsWidget(parent,wFlags), - m_backgroundItem(0), - m_titleItem(0), - m_axisXItem(0), - m_chartTheme(new ChartTheme(this)), - //m_dataset(0), - m_dataset(new ChartDataSet(this)), - //m_presenter(0) - m_presenter(new ChartPresenter(this,m_dataset)) +m_backgroundItem(0), +m_titleItem(0), +m_dataset(new ChartDataSet(this)), +m_presenter(new ChartPresenter(this,m_dataset)) { - // TODO: the default theme? - setTheme(QChart::ChartThemeDefault); - //m_chartItems << m_axisXItem; - //m_chartItems << m_axisYItem.at(0); } -QChart::~QChart(){} +QChart::~QChart() {} void QChart::addSeries(QChartSeries* series) { - m_dataset->addSeries(series); + m_dataset->addSeries(series); } +//TODO on review, is it really needed ?? QChartSeries* QChart::createSeries(QChartSeries::QChartSeriesType type) { // TODO: support also other types; not only scatter and pie @@ -54,31 +46,31 @@ QChartSeries* QChart::createSeries(QChartSeries::QChartSeriesType type) QChartSeries *series(0); switch (type) { - case QChartSeries::SeriesTypeLine: { - series = QXYChartSeries::create(); - break; - } - case QChartSeries::SeriesTypeBar: { - series = new BarChartSeries(this); - break; - } - case QChartSeries::SeriesTypeStackedBar: { - series = new StackedBarChartSeries(this); - break; - } - case QChartSeries::SeriesTypePercentBar: { - series = new PercentBarChartSeries(this); - break; - } - case QChartSeries::SeriesTypeScatter: { - series = new QScatterSeries(this); - break; - } - case QChartSeries::SeriesTypePie: { - series = new QPieSeries(this); - break; - } - default: + case QChartSeries::SeriesTypeLine: { + series = QXYChartSeries::create(); + break; + } + case QChartSeries::SeriesTypeBar: { + series = new BarChartSeries(this); + break; + } + case QChartSeries::SeriesTypeStackedBar: { + series = new StackedBarChartSeries(this); + break; + } + case QChartSeries::SeriesTypePercentBar: { + series = new PercentBarChartSeries(this); + break; + } + case QChartSeries::SeriesTypeScatter: { + series = new QScatterSeries(this); + break; + } + case QChartSeries::SeriesTypePie: { + series = new QPieSeries(this); + break; + } + default: Q_ASSERT(false); break; } @@ -90,7 +82,7 @@ QChartSeries* QChart::createSeries(QChartSeries::QChartSeriesType type) void QChart::setChartBackgroundBrush(const QBrush& brush) { - if(!m_backgroundItem){ + if(!m_backgroundItem) { m_backgroundItem = new QGraphicsRectItem(this); m_backgroundItem->setZValue(-1); } @@ -102,7 +94,7 @@ void QChart::setChartBackgroundBrush(const QBrush& brush) void QChart::setChartBackgroundPen(const QPen& pen) { - if(!m_backgroundItem){ + if(!m_backgroundItem) { m_backgroundItem = new QGraphicsRectItem(this); m_backgroundItem->setZValue(-1); } @@ -125,37 +117,17 @@ int QChart::margin() const void QChart::setMargin(int margin) { - m_presenter->setMargin(margin); + m_presenter->setMargin(margin); } void QChart::setTheme(QChart::ChartThemeId theme) { - m_chartTheme->setTheme(theme); - - QLinearGradient backgroundGradient; - backgroundGradient.setColorAt(0.0, m_chartTheme->d->m_gradientStartColor); - backgroundGradient.setColorAt(1.0, m_chartTheme->d->m_gradientEndColor); - backgroundGradient.setCoordinateMode(QGradient::ObjectBoundingMode); - setChartBackgroundBrush(backgroundGradient); - - // TODO: Move the controlling of the series presentations into private implementation of the - // series instead of QChart controlling themes for each - // In other words, the following should be used when creating xy series: - // m_chartTheme->addObserver(xyseries) - foreach (QChartSeries *series, m_chartSeries) { - if (series->type() == QChartSeries::SeriesTypeLine) { - QXYChartSeries *xyseries = static_cast(series); - SeriesTheme seriesTheme = m_chartTheme->themeForSeries(); - xyseries->setPen(seriesTheme.linePen); - } - } - - update(); + m_presenter->setTheme(theme); } QChart::ChartThemeId QChart::theme() { - return (QChart::ChartThemeId) m_chartTheme->d->m_currentTheme; + return (QChart::ChartThemeId) m_presenter->theme(); } void QChart::zoomInToRect(const QRectF& rectangle) @@ -180,11 +152,11 @@ void QChart::zoomReset() void QChart::setAxisX(const QChartAxis& axis) { - setAxis(m_axisXItem,axis); + } void QChart::setAxisY(const QChartAxis& axis) { - setAxis(m_axisYItem.at(0),axis); + } void QChart::setAxisY(const QList& axis) @@ -194,7 +166,7 @@ void QChart::setAxisY(const QList& axis) void QChart::setAxis(AxisItem *item, const QChartAxis& axis) { - item->setVisible(axis.isAxisVisible()); + } void QChart::resizeEvent(QGraphicsSceneResizeEvent *event) @@ -218,8 +190,6 @@ void QChart::resizeEvent(QGraphicsSceneResizeEvent *event) update(); } - - #include "moc_qchart.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/qchart.h b/src/qchart.h index 03a2018..8345aeb 100644 --- a/src/qchart.h +++ b/src/qchart.h @@ -41,7 +41,7 @@ public: ChartThemeIcy, ChartThemeGrayscale, ChartThemeScientific, - ChartThemeUnnamed1 + //ChartThemeUnnamed1 }; public: @@ -82,14 +82,7 @@ private: Q_DISABLE_COPY(QChart) QGraphicsRectItem* m_backgroundItem; QGraphicsTextItem* m_titleItem; - AxisItem* m_axisXItem; - QList m_axisYItem; QRectF m_rect; - QList m_chartSeries; - QList m_chartItems; - ChartTheme *m_chartTheme; - - ChartDataSet *m_dataset; ChartPresenter *m_presenter; }; diff --git a/src/qscatterseries.cpp b/src/qscatterseries.cpp index be3a9e2..edb0782 100644 --- a/src/qscatterseries.cpp +++ b/src/qscatterseries.cpp @@ -46,7 +46,7 @@ void QScatterSeriesPrivate::setSize(const QSizeF &size) void QScatterSeriesPrivate::themeChanged(ChartTheme *theme) { - m_theme = theme->themeForSeries(); + //m_theme = theme->themeForSeries(); } void QScatterSeriesPrivate::setPlotDomain(const PlotDomain& plotDomain) @@ -73,7 +73,7 @@ void QScatterSeriesPrivate::paint(QPainter *painter, const QStyleOptionGraphicsI painter->setPen(pen); } else - painter->setPen(m_theme.markerPen); + //painter->setPen(m_theme.markerPen); // brush.setColor(m_theme..lineColor); // TODO: m_scenex and m_sceny are left empty during construction -> we would need a resize diff --git a/src/qscatterseries_p.h b/src/qscatterseries_p.h index 99bcaa8..5af4ba4 100644 --- a/src/qscatterseries_p.h +++ b/src/qscatterseries_p.h @@ -12,7 +12,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE /*! * The PIMPL class of QScatterSeries. */ -class QScatterSeriesPrivate : public ChartItem, public ChartThemeObserver +class QScatterSeriesPrivate : public ChartItem { public: QScatterSeriesPrivate(QGraphicsItem *parent); @@ -38,7 +38,7 @@ public: QList m_scenex; QList m_sceney; QColor m_markerColor; - SeriesTheme m_theme; + //SeriesTheme m_theme; PlotDomain m_visibleChartArea; }; diff --git a/src/src.pro b/src/src.pro index f94116e..92344e8 100644 --- a/src/src.pro +++ b/src/src.pro @@ -39,7 +39,7 @@ SOURCES += \ barchart/barchartseriesbase.cpp \ chartdataset.cpp \ chartpresenter.cpp \ - domain.cpp + domain.cpp @@ -77,13 +77,22 @@ PUBLIC_HEADERS += \ piechart/qpieseries.h \ qchartview.h \ qchartaxis.h + +THEMES += \ + themes/chartthemeicy_p.h \ + themes/chartthemegrayscale_p.h \ + themes/chartthemescientific_p.h \ + themes/chartthemevanilla_p.h \ + HEADERS += $$PUBLIC_HEADERS HEADERS += $$PRIVATE_HEADERS +HEADERS += $$THEMES INCLUDEPATH += xylinechart \ barchart \ piechart \ + themes \ . OBJECTS_DIR = $$CHART_BUILD_DIR/lib diff --git a/src/themes/chartthemegrayscale_p.h b/src/themes/chartthemegrayscale_p.h new file mode 100644 index 0000000..33443c2 --- /dev/null +++ b/src/themes/chartthemegrayscale_p.h @@ -0,0 +1,20 @@ +#include "charttheme_p.h" + +QTCOMMERCIALCHART_BEGIN_NAMESPACE + +class ChartThemeGrayscale: public ChartTheme +{ +public: + ChartThemeGrayscale() + { + m_seriesColor.append(QRgb(0xFF869299)); + m_seriesColor.append(QRgb(0xFFA5BDCC)); + m_seriesColor.append(QRgb(0xFFE8FFFC)); + m_seriesColor.append(QRgb(0xFFCCC2C2)); + + m_gradientStartColor = QColor(QRgb(0xffffffff)); + m_gradientEndColor = QColor(QRgb(0xffafafaf)); + } +}; + +QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/themes/chartthemeicy_p.h b/src/themes/chartthemeicy_p.h new file mode 100644 index 0000000..5477609 --- /dev/null +++ b/src/themes/chartthemeicy_p.h @@ -0,0 +1,20 @@ +#include "charttheme_p.h" + +QTCOMMERCIALCHART_BEGIN_NAMESPACE + +class ChartThemeIcy: public ChartTheme +{ +public: + ChartThemeIcy() + { + m_seriesColor.append(QRgb(0xFF0D2673)); + m_seriesColor.append(QRgb(0xFF2685BF)); + m_seriesColor.append(QRgb(0xFF3DADD9)); + m_seriesColor.append(QRgb(0xFF62C3D9)); + + m_gradientStartColor = QColor(QRgb(0xffBDE3F2)); + m_gradientEndColor = QColor(QRgb(0xffafafaf)); + } +}; + +QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/themes/chartthemescientific_p.h b/src/themes/chartthemescientific_p.h new file mode 100644 index 0000000..d4943d4 --- /dev/null +++ b/src/themes/chartthemescientific_p.h @@ -0,0 +1,20 @@ +#include "charttheme_p.h" + +QTCOMMERCIALCHART_BEGIN_NAMESPACE + +class ChartThemeScientific: public ChartTheme +{ +public: + ChartThemeScientific() + { + m_seriesColor.append(QRgb(0xFF000000)); + m_seriesColor.append(QRgb(0xFFFFAD00)); + m_seriesColor.append(QRgb(0xFF596A75)); + m_seriesColor.append(QRgb(0xFF474747)); + + m_gradientStartColor = QColor(QRgb(0xffafafaf)); + m_gradientEndColor = QColor(QRgb(0xffafafaf)); + } +}; + +QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/themes/chartthemevanilla_p.h b/src/themes/chartthemevanilla_p.h new file mode 100644 index 0000000..4b6dd37 --- /dev/null +++ b/src/themes/chartthemevanilla_p.h @@ -0,0 +1,21 @@ +#include "charttheme_p.h" + +QTCOMMERCIALCHART_BEGIN_NAMESPACE + +class ChartThemeVanilla: public ChartTheme +{ +public: + ChartThemeVanilla() + { + m_seriesColor.append(QColor(217, 197, 116)); + m_seriesColor.append(QColor(214, 168, 150)); + m_seriesColor.append(QColor(160, 160, 113)); + m_seriesColor.append(QColor(210, 210, 52)); + m_seriesColor.append(QColor(136, 114, 58)); + + m_gradientStartColor = QColor(QRgb(0xff9d844d)); + m_gradientEndColor = QColor(QRgb(0xffafafaf)); + } +}; + +QTCOMMERCIALCHART_END_NAMESPACE