diff --git a/src/animations/abstractbaranimation.cpp b/src/animations/abstractbaranimation.cpp index e3f9faf..aa149fc 100644 --- a/src/animations/abstractbaranimation.cpp +++ b/src/animations/abstractbaranimation.cpp @@ -19,7 +19,7 @@ ****************************************************************************/ #include "abstractbaranimation_p.h" -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" #include #include @@ -27,7 +27,7 @@ Q_DECLARE_METATYPE(QVector) QTCOMMERCIALCHART_BEGIN_NAMESPACE -AbstractBarAnimation::AbstractBarAnimation(BarChartItem *item) +AbstractBarAnimation::AbstractBarAnimation(AbstractBarChartItem *item) :ChartAnimation(item), m_item(item) { diff --git a/src/animations/abstractbaranimation_p.h b/src/animations/abstractbaranimation_p.h index c5d6c3c..3a8bb6b 100644 --- a/src/animations/abstractbaranimation_p.h +++ b/src/animations/abstractbaranimation_p.h @@ -34,14 +34,14 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE -class BarChartItem; +class AbstractBarChartItem; class AbstractBarAnimation : public ChartAnimation { Q_OBJECT public: - AbstractBarAnimation(BarChartItem *item); + AbstractBarAnimation(AbstractBarChartItem *item); ~AbstractBarAnimation(); public: // from QVariantAnimation @@ -51,7 +51,7 @@ public: // from QVariantAnimation void setup(const QVector &oldLayout, const QVector &newLayout); protected: - BarChartItem *m_item; + AbstractBarChartItem *m_item; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/animations/baranimation.cpp b/src/animations/baranimation.cpp index 22d453e..6c7018b 100644 --- a/src/animations/baranimation.cpp +++ b/src/animations/baranimation.cpp @@ -19,14 +19,14 @@ ****************************************************************************/ #include "baranimation_p.h" -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" #include Q_DECLARE_METATYPE(QVector) QTCOMMERCIALCHART_BEGIN_NAMESPACE -BarAnimation::BarAnimation(BarChartItem *item) +BarAnimation::BarAnimation(AbstractBarChartItem *item) :AbstractBarAnimation(item) { setDuration(ChartAnimationDuration); diff --git a/src/animations/baranimation_p.h b/src/animations/baranimation_p.h index 0db25f1..8b6bd6b 100644 --- a/src/animations/baranimation_p.h +++ b/src/animations/baranimation_p.h @@ -32,18 +32,18 @@ #include "abstractbaranimation_p.h" #include "chartanimation_p.h" -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" QTCOMMERCIALCHART_BEGIN_NAMESPACE -class BarChartItem; +class AbstractBarChartItem; class BarAnimation : public AbstractBarAnimation { Q_OBJECT public: - BarAnimation(BarChartItem *item); + BarAnimation(AbstractBarChartItem *item); ~BarAnimation(); public: // from QVariantAnimation diff --git a/src/animations/chartanimator.cpp b/src/animations/chartanimator.cpp index d854660..def9292 100644 --- a/src/animations/chartanimator.cpp +++ b/src/animations/chartanimator.cpp @@ -25,7 +25,7 @@ #include "xychart_p.h" #include "pieanimation_p.h" #include "baranimation_p.h" -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" #include "stackedbaranimation_p.h" #include "stackedbarchartitem_p.h" #include "percentbaranimation_p.h" diff --git a/src/animations/chartanimator_p.h b/src/animations/chartanimator_p.h index 53db1e1..a8fbc42 100644 --- a/src/animations/chartanimator_p.h +++ b/src/animations/chartanimator_p.h @@ -33,7 +33,7 @@ #include "qchartglobal.h" #include "chartanimation_p.h" #include "piechartitem_p.h" -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" #include QTCOMMERCIALCHART_BEGIN_NAMESPACE diff --git a/src/animations/percentbaranimation_p.h b/src/animations/percentbaranimation_p.h index 1e89638..d8fd218 100644 --- a/src/animations/percentbaranimation_p.h +++ b/src/animations/percentbaranimation_p.h @@ -12,7 +12,7 @@ #include "chartanimation_p.h" #include "abstractbaranimation_p.h" -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" QTCOMMERCIALCHART_BEGIN_NAMESPACE diff --git a/src/animations/stackedbaranimation_p.h b/src/animations/stackedbaranimation_p.h index 2de4988..799b9d6 100644 --- a/src/animations/stackedbaranimation_p.h +++ b/src/animations/stackedbaranimation_p.h @@ -11,7 +11,7 @@ #define STACKEDBARANIMATION_P_H #include "chartanimation_p.h" -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" #include "abstractbaranimation_p.h" QTCOMMERCIALCHART_BEGIN_NAMESPACE diff --git a/src/barchart/abstractbarchartitem.cpp b/src/barchart/abstractbarchartitem.cpp new file mode 100644 index 0000000..6acf10b --- /dev/null +++ b/src/barchart/abstractbarchartitem.cpp @@ -0,0 +1,179 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +#include "abstractbarchartitem_p.h" +#include "bar_p.h" +#include "qbarset.h" +#include "qbarset_p.h" +#include "qabstractbarseries.h" +#include "qabstractbarseries_p.h" +#include "qchart.h" +#include "chartpresenter_p.h" +#include "chartanimator_p.h" +#include "abstractbaranimation_p.h" +#include "chartdataset_p.h" +#include + +QTCOMMERCIALCHART_BEGIN_NAMESPACE + +AbstractBarChartItem::AbstractBarChartItem(QAbstractBarSeries *series, ChartPresenter *presenter) : + ChartItem(presenter), + m_animation(0), + m_series(series) +{ + setFlag(ItemClipsChildrenToShape); + connect(series->d_func(), SIGNAL(updatedBars()), this, SLOT(handleLayoutChanged())); + connect(series->d_func(), SIGNAL(labelsVisibleChanged(bool)), this, SLOT(handleLabelsVisibleChanged(bool))); + connect(series->d_func(), SIGNAL(restructuredBars()), this, SLOT(handleDataStructureChanged())); + connect(series, SIGNAL(visibleChanged()), this, SLOT(handleVisibleChanged())); + setZValue(ChartPresenter::BarSeriesZValue); + handleDataStructureChanged(); +} + +AbstractBarChartItem::~AbstractBarChartItem() +{ +} + +void AbstractBarChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + Q_UNUSED(painter); + Q_UNUSED(option); + Q_UNUSED(widget); +} + +QRectF AbstractBarChartItem::boundingRect() const +{ + return m_rect; +} + +void AbstractBarChartItem::applyLayout(const QVector &layout) +{ + if (m_animation) { + m_animation->setup(m_layout,layout); + presenter()->startAnimation(m_animation); + + } else { + setLayout(layout); + update(); + } +} + +void AbstractBarChartItem::setAnimation(AbstractBarAnimation *animation) +{ + m_animation = animation; +} + +void AbstractBarChartItem::setLayout(const QVector &layout) +{ + if (layout.count() != m_bars.count()) + return; + + m_layout = layout; + + for (int i=0; i < m_bars.count(); i++) { + m_bars.at(i)->setRect(layout.at(i)); + } +} +//handlers + +void AbstractBarChartItem::handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY) +{ + m_domainMinX = minX; + m_domainMaxX = maxX; + m_domainMinY = minY; + m_domainMaxY = maxY; + handleLayoutChanged(); +} + +void AbstractBarChartItem::handleGeometryChanged(const QRectF &rect) +{ + prepareGeometryChange(); + m_rect = rect; + handleLayoutChanged(); +} + +void AbstractBarChartItem::handleLayoutChanged() +{ + if ((m_rect.width() <= 0) || (m_rect.height() <= 0)) { + // rect size zero. + return; + } + QVector layout = calculateLayout(); + applyLayout(layout); +} + +void AbstractBarChartItem::handleLabelsVisibleChanged(bool visible) +{ + foreach (QGraphicsSimpleTextItem* label, m_labels) { + label->setVisible(visible); + } + update(); +} + +void AbstractBarChartItem::handleDataStructureChanged() +{ + foreach(QGraphicsItem *item, childItems()) { + delete item; + } + + m_bars.clear(); + m_labels.clear(); + m_layout.clear(); + + bool labelsVisible = m_series->isLabelsVisible(); + + // Create new graphic items for bars + for (int c = 0; c < m_series->d_func()->categoryCount(); c++) { + for (int s = 0; s < m_series->count(); s++) { + QBarSet *set = m_series->d_func()->barsetAt(s); + + // Bars + Bar *bar = new Bar(set,c,this); + m_bars.append(bar); + connect(bar, SIGNAL(clicked(int, QBarSet*)), m_series, SIGNAL(clicked(int, QBarSet*))); + connect(bar, SIGNAL(hovered(bool, QBarSet*)), m_series, SIGNAL(hovered(bool, QBarSet*))); + connect(bar, SIGNAL(clicked(int, QBarSet*)), set, SIGNAL(clicked(int))); + connect(bar, SIGNAL(hovered(bool, QBarSet*)), set, SIGNAL(hovered(bool))); + m_layout.append(QRectF(0, 0, 0, 0)); + + // Labels + QGraphicsSimpleTextItem *label = new QGraphicsSimpleTextItem(this); + label->setVisible(labelsVisible); + m_labels.append(label); + } + } + + // TODO: Is this the right place to call it? + presenter()->chartTheme()->decorate(m_series, presenter()->dataSet()->seriesIndex(m_series)); + handleLayoutChanged(); +} + +void AbstractBarChartItem::handleVisibleChanged() +{ + bool visible = m_series->isVisible(); + handleLabelsVisibleChanged(visible); + foreach(QGraphicsItem *item, childItems()) { + item->setVisible(visible); + } +} + +#include "moc_abstractbarchartitem_p.cpp" + +QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/barchart/groupedbarchartitem_p.h b/src/barchart/abstractbarchartitem_p.h similarity index 55% rename from src/barchart/groupedbarchartitem_p.h rename to src/barchart/abstractbarchartitem_p.h index 5119907..5b9699b 100644 --- a/src/barchart/groupedbarchartitem_p.h +++ b/src/barchart/abstractbarchartitem_p.h @@ -28,25 +28,67 @@ // We mean it. -#ifndef GROUPEDBARCHARTITEM_H -#define GROUPEDBARCHARTITEM_H +#ifndef ABSTRACTBARCHARTITEM_H +#define ABSTRACTBARCHARTITEM_H -#include "barchartitem_p.h" -#include "qstackedbarseries.h" -#include +#include "chartitem_p.h" +#include "qabstractbarseries.h" +#include +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE -class GroupedBarChartItem : public BarChartItem +class Bar; +class QAxisCategories; +class QChart; +class AbstractBarAnimation; + +class AbstractBarChartItem : public ChartItem { Q_OBJECT public: - GroupedBarChartItem(QAbstractBarSeries *series, ChartPresenter *presenter); + AbstractBarChartItem(QAbstractBarSeries *series, ChartPresenter *presenter); + virtual ~AbstractBarChartItem(); + +public: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + QRectF boundingRect() const; + + virtual QVector calculateLayout() = 0; + virtual void applyLayout(const QVector &layout); + virtual void setAnimation(AbstractBarAnimation* animation); + void setLayout(const QVector &layout); + void updateLayout(const QVector &layout); + + + QRectF geometry() const { return m_rect;} + +public Q_SLOTS: + void handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY); + void handleGeometryChanged(const QRectF &size); + void handleLayoutChanged(); + void handleLabelsVisibleChanged(bool visible); + void handleDataStructureChanged(); // structure of of series has changed, recreate graphic items + void handleVisibleChanged(); + +protected: + + qreal m_domainMinX; + qreal m_domainMaxX; + qreal m_domainMinY; + qreal m_domainMaxY; + + QRectF m_rect; + QVector m_layout; + + AbstractBarAnimation *m_animation; -private: - virtual QVector calculateLayout(); + // Not owned. + QAbstractBarSeries *m_series; + QList m_bars; + QList m_labels; }; QTCOMMERCIALCHART_END_NAMESPACE -#endif // GROUPEDBARCHARTITEM_H +#endif // ABSTRACTBARCHARTITEM_H diff --git a/src/barchart/barchart.pri b/src/barchart/barchart.pri index 71c7a73..24470a3 100644 --- a/src/barchart/barchart.pri +++ b/src/barchart/barchart.pri @@ -3,9 +3,9 @@ DEPENDPATH += $$PWD SOURCES += \ $$PWD/bar.cpp \ - $$PWD/barchartitem.cpp \ + $$PWD/abstractbarchartitem.cpp \ $$PWD/percentbarchartitem.cpp \ - $$PWD/groupedbarchartitem.cpp \ + $$PWD/barchartitem.cpp \ $$PWD/qabstractbarseries.cpp \ $$PWD/qbarset.cpp \ $$PWD/qpercentbarseries.cpp \ @@ -20,10 +20,10 @@ SOURCES += \ PRIVATE_HEADERS += \ $$PWD/bar_p.h \ - $$PWD/barchartitem_p.h \ + $$PWD/abstractbarchartitem_p.h \ $$PWD/percentbarchartitem_p.h \ $$PWD/stackedbarchartitem_p.h \ - $$PWD/groupedbarchartitem_p.h \ + $$PWD/barchartitem_p.h \ $$PWD/qbarset_p.h \ $$PWD/qabstractbarseries_p.h \ $$PWD/qstackedbarseries_p.h\ diff --git a/src/barchart/barchartitem.cpp b/src/barchart/barchartitem.cpp index 2903aad..5c36914 100644 --- a/src/barchart/barchartitem.cpp +++ b/src/barchart/barchartitem.cpp @@ -20,47 +20,16 @@ #include "barchartitem_p.h" #include "bar_p.h" -#include "qbarset.h" #include "qbarset_p.h" -#include "qabstractbarseries.h" #include "qabstractbarseries_p.h" -#include "qchart.h" -#include "chartpresenter_p.h" -#include "chartanimator_p.h" -#include "abstractbaranimation_p.h" -#include "chartdataset_p.h" -#include +#include "qbarset.h" +#include "qbarset_p.h" QTCOMMERCIALCHART_BEGIN_NAMESPACE BarChartItem::BarChartItem(QAbstractBarSeries *series, ChartPresenter *presenter) : - ChartItem(presenter), - m_animation(0), - m_series(series) -{ - setFlag(ItemClipsChildrenToShape); - connect(series->d_func(), SIGNAL(updatedBars()), this, SLOT(handleLayoutChanged())); - connect(series->d_func(), SIGNAL(labelsVisibleChanged(bool)), this, SLOT(handleLabelsVisibleChanged(bool))); - connect(series->d_func(), SIGNAL(restructuredBars()), this, SLOT(handleDataStructureChanged())); - connect(series, SIGNAL(visibleChanged()), this, SLOT(handleVisibleChanged())); - setZValue(ChartPresenter::BarSeriesZValue); - handleDataStructureChanged(); -} - -BarChartItem::~BarChartItem() -{ -} - -void BarChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) -{ - Q_UNUSED(painter); - Q_UNUSED(option); - Q_UNUSED(widget); -} - -QRectF BarChartItem::boundingRect() const + AbstractBarChartItem(series, presenter) { - return m_rect; } QVector BarChartItem::calculateLayout() @@ -79,19 +48,21 @@ QVector BarChartItem::calculateLayout() qreal rangeX = m_domainMaxX - m_domainMinX; qreal scaleY = (height / rangeY); qreal scaleX = (width / rangeX); - qreal barWidth = scaleX * m_series->d_func()->barWidth(); + qreal barWidth = (scaleX / setCount) * m_series->d_func()->barWidth(); int itemIndex(0); for (int category = 0; category < categoryCount; category++) { qreal yPos = height + scaleY * m_domainMinY + geometry().topLeft().y(); for (int set = 0; set < setCount; set++) { QBarSetPrivate* barSet = m_series->d_func()->barsetAt(set)->d_ptr.data(); - qreal xPos = (barSet->at(category).x() - m_domainMinX) * scaleX + m_rect.left() - barWidth/2; - qreal barHeight = barSet->at(category).y() * scaleY; + qreal xPos = (barSet->at(category).x() - m_domainMinX) * scaleX + m_rect.left(); + xPos -= setCount*barWidth/2; + xPos += set*barWidth; + qreal barHeight = barSet->at(category).y() * scaleY; Bar* bar = m_bars.at(itemIndex); - QRectF rect(xPos, yPos - barHeight, barWidth, barHeight); + QRectF rect(xPos, yPos - barHeight, barWidth, barHeight); layout.append(rect); bar->setPen(barSet->m_pen); bar->setBrush(barSet->m_brush); @@ -117,123 +88,9 @@ QVector BarChartItem::calculateLayout() itemIndex++; } } - return layout; } -void BarChartItem::applyLayout(const QVector &layout) -{ - if (m_animation) { - m_animation->setup(m_layout,layout); - presenter()->startAnimation(m_animation); - - } else { - setLayout(layout); - update(); - } -} - -void BarChartItem::setAnimation(AbstractBarAnimation *animation) -{ - m_animation = animation; -} - -void BarChartItem::setLayout(const QVector &layout) -{ - if (layout.count() != m_bars.count()) - return; - - m_layout = layout; - - for (int i=0; i < m_bars.count(); i++) { - m_bars.at(i)->setRect(layout.at(i)); - } -} -//handlers - -void BarChartItem::handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY) -{ - m_domainMinX = minX; - m_domainMaxX = maxX; - m_domainMinY = minY; - m_domainMaxY = maxY; - handleLayoutChanged(); -} - -void BarChartItem::handleGeometryChanged(const QRectF &rect) -{ - prepareGeometryChange(); - m_rect = rect; - handleLayoutChanged(); -} - -void BarChartItem::handleLayoutChanged() -{ - if ((m_rect.width() <= 0) || (m_rect.height() <= 0)) { - // rect size zero. - return; - } - QVector layout = calculateLayout(); - applyLayout(layout); -} - - - -void BarChartItem::handleLabelsVisibleChanged(bool visible) -{ - foreach (QGraphicsSimpleTextItem* label, m_labels) { - label->setVisible(visible); - } - update(); -} - -void BarChartItem::handleDataStructureChanged() -{ - foreach(QGraphicsItem *item, childItems()) { - delete item; - } - - m_bars.clear(); - m_labels.clear(); - m_layout.clear(); - - bool labelsVisible = m_series->isLabelsVisible(); - - // Create new graphic items for bars - for (int c = 0; c < m_series->d_func()->categoryCount(); c++) { - for (int s = 0; s < m_series->count(); s++) { - QBarSet *set = m_series->d_func()->barsetAt(s); - - // Bars - Bar *bar = new Bar(set,c,this); - m_bars.append(bar); - connect(bar, SIGNAL(clicked(int, QBarSet*)), m_series, SIGNAL(clicked(int, QBarSet*))); - connect(bar, SIGNAL(hovered(bool, QBarSet*)), m_series, SIGNAL(hovered(bool, QBarSet*))); - connect(bar, SIGNAL(clicked(int, QBarSet*)), set, SIGNAL(clicked(int))); - connect(bar, SIGNAL(hovered(bool, QBarSet*)), set, SIGNAL(hovered(bool))); - m_layout.append(QRectF(0, 0, 0, 0)); - - // Labels - QGraphicsSimpleTextItem *label = new QGraphicsSimpleTextItem(this); - label->setVisible(labelsVisible); - m_labels.append(label); - } - } - - // TODO: Is this the right place to call it? - presenter()->chartTheme()->decorate(m_series, presenter()->dataSet()->seriesIndex(m_series)); - handleLayoutChanged(); -} - -void BarChartItem::handleVisibleChanged() -{ - bool visible = m_series->isVisible(); - handleLabelsVisibleChanged(visible); - foreach(QGraphicsItem *item, childItems()) { - item->setVisible(visible); - } -} - #include "moc_barchartitem_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/barchart/barchartitem_p.h b/src/barchart/barchartitem_p.h index c8382c9..b4e0142 100644 --- a/src/barchart/barchartitem_p.h +++ b/src/barchart/barchartitem_p.h @@ -31,62 +31,20 @@ #ifndef BARCHARTITEM_H #define BARCHARTITEM_H -#include "chartitem_p.h" -#include "qabstractbarseries.h" -#include -#include +#include "abstractbarchartitem_p.h" +#include "qstackedbarseries.h" +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE -class Bar; -class QAxisCategories; -class QChart; -class AbstractBarAnimation; - -class BarChartItem : public ChartItem +class BarChartItem : public AbstractBarChartItem { Q_OBJECT public: BarChartItem(QAbstractBarSeries *series, ChartPresenter *presenter); - virtual ~BarChartItem(); - -public: - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); - QRectF boundingRect() const; +private: virtual QVector calculateLayout(); - virtual void applyLayout(const QVector &layout); - virtual void setAnimation(AbstractBarAnimation* animation); - void setLayout(const QVector &layout); - void updateLayout(const QVector &layout); - - - QRectF geometry() const { return m_rect;} - -public Q_SLOTS: - void handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY); - void handleGeometryChanged(const QRectF &size); - void handleLayoutChanged(); - void handleLabelsVisibleChanged(bool visible); - void handleDataStructureChanged(); // structure of of series has changed, recreate graphic items - void handleVisibleChanged(); - -protected: - - qreal m_domainMinX; - qreal m_domainMaxX; - qreal m_domainMinY; - qreal m_domainMaxY; - - QRectF m_rect; - QVector m_layout; - - AbstractBarAnimation *m_animation; - - // Not owned. - QAbstractBarSeries *m_series; - QList m_bars; - QList m_labels; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/barchart/groupedbarchartitem.cpp b/src/barchart/groupedbarchartitem.cpp deleted file mode 100644 index 2a290b6..0000000 --- a/src/barchart/groupedbarchartitem.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** 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$ -** -****************************************************************************/ - -#include "groupedbarchartitem_p.h" -#include "bar_p.h" -#include "qbarset_p.h" -#include "qabstractbarseries_p.h" -#include "qbarset.h" -#include "qbarset_p.h" - -QTCOMMERCIALCHART_BEGIN_NAMESPACE - -GroupedBarChartItem::GroupedBarChartItem(QAbstractBarSeries *series, ChartPresenter *presenter) : - BarChartItem(series, presenter) -{ -} - -QVector GroupedBarChartItem::calculateLayout() -{ - QVector layout; - - // Use temporary qreals for accuracy - qreal categoryCount = m_series->d_func()->categoryCount(); - qreal setCount = m_series->count(); - bool barsVisible = m_series->isVisible(); - - // Domain: - qreal width = geometry().width(); - qreal height = geometry().height(); - qreal rangeY = m_domainMaxY - m_domainMinY; - qreal rangeX = m_domainMaxX - m_domainMinX; - qreal scaleY = (height / rangeY); - qreal scaleX = (width / rangeX); - qreal barWidth = (scaleX / setCount) * m_series->d_func()->barWidth(); - - int itemIndex(0); - for (int category = 0; category < categoryCount; category++) { - qreal yPos = height + scaleY * m_domainMinY + geometry().topLeft().y(); - for (int set = 0; set < setCount; set++) { - QBarSetPrivate* barSet = m_series->d_func()->barsetAt(set)->d_ptr.data(); - - qreal xPos = (barSet->at(category).x() - m_domainMinX) * scaleX + m_rect.left(); - xPos -= setCount*barWidth/2; - xPos += set*barWidth; - qreal barHeight = barSet->at(category).y() * scaleY; - Bar* bar = m_bars.at(itemIndex); - - QRectF rect(xPos, yPos - barHeight, barWidth, barHeight); - layout.append(rect); - bar->setPen(barSet->m_pen); - bar->setBrush(barSet->m_brush); - if (qFuzzyIsNull(barHeight)) { - bar->setVisible(false); - } else { - bar->setVisible(barsVisible); - } - - QGraphicsSimpleTextItem* label = m_labels.at(itemIndex); - - if (!qFuzzyIsNull(barSet->at(category).y())) { - label->setText(QString::number(barSet->at(category).y())); - } else { - label->setText(QString("")); - } - - label->setPos(xPos + (rect.width()/2 - label->boundingRect().width()/2) - ,yPos - barHeight/2 - label->boundingRect().height()/2); - label->setFont(barSet->m_labelFont); - label->setBrush(barSet->m_labelBrush); - - itemIndex++; - } - } - return layout; -} - -#include "moc_groupedbarchartitem_p.cpp" - -QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/barchart/horizontalbarchartitem.cpp b/src/barchart/horizontalbarchartitem.cpp index 56c8dc6..f37c5d9 100644 --- a/src/barchart/horizontalbarchartitem.cpp +++ b/src/barchart/horizontalbarchartitem.cpp @@ -3,7 +3,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE HorizontalBarChartitem::HorizontalBarChartitem(QAbstractBarSeries *series, ChartPresenter *presenter) : - BarChartItem(series, presenter) + AbstractBarChartItem(series, presenter) { } diff --git a/src/barchart/horizontalbarchartitem_p.h b/src/barchart/horizontalbarchartitem_p.h index 5bed8c9..e126779 100644 --- a/src/barchart/horizontalbarchartitem_p.h +++ b/src/barchart/horizontalbarchartitem_p.h @@ -1,14 +1,14 @@ #ifndef HORIZONTALBARCHARTITEM_H #define HORIZONTALBARCHARTITEM_H -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" #include "qstackedbarseries.h" #include QTCOMMERCIALCHART_BEGIN_NAMESPACE -class HorizontalBarChartitem : public BarChartItem +class HorizontalBarChartitem : public AbstractBarChartItem { Q_OBJECT public: diff --git a/src/barchart/percentbarchartitem.cpp b/src/barchart/percentbarchartitem.cpp index a42974a..4c8efbe 100644 --- a/src/barchart/percentbarchartitem.cpp +++ b/src/barchart/percentbarchartitem.cpp @@ -28,7 +28,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE PercentBarChartItem::PercentBarChartItem(QAbstractBarSeries *series, ChartPresenter *presenter) : - BarChartItem(series, presenter) + AbstractBarChartItem(series, presenter) { } diff --git a/src/barchart/percentbarchartitem_p.h b/src/barchart/percentbarchartitem_p.h index ea40263..6cefd54 100644 --- a/src/barchart/percentbarchartitem_p.h +++ b/src/barchart/percentbarchartitem_p.h @@ -31,14 +31,14 @@ #ifndef PERCENTBARCHARTITEM_H #define PERCENTBARCHARTITEM_H -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" #include QTCOMMERCIALCHART_BEGIN_NAMESPACE class QAbstractBarSeries; -class PercentBarChartItem : public BarChartItem +class PercentBarChartItem : public AbstractBarChartItem { Q_OBJECT public: diff --git a/src/barchart/qabstractbarseries.h b/src/barchart/qabstractbarseries.h index 7c726bb..a8e3e65 100644 --- a/src/barchart/qabstractbarseries.h +++ b/src/barchart/qabstractbarseries.h @@ -43,8 +43,6 @@ protected: public: virtual ~QAbstractBarSeries(); -// virtual QAbstractSeries::SeriesType type() const = 0; - void setBarWidth(qreal width); qreal barWidth() const; @@ -73,10 +71,10 @@ Q_SIGNALS: protected: Q_DECLARE_PRIVATE(QAbstractBarSeries) - friend class BarChartItem; + friend class AbstractBarChartItem; friend class PercentBarChartItem; friend class StackedBarChartItem; - friend class GroupedBarChartItem; + friend class BarChartItem; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/barchart/qbarseries.cpp b/src/barchart/qbarseries.cpp index 2bd5108..4542ed3 100644 --- a/src/barchart/qbarseries.cpp +++ b/src/barchart/qbarseries.cpp @@ -20,7 +20,7 @@ #include "qbarseries.h" #include "qbarseries_p.h" -#include "groupedbarchartitem_p.h" +#include "barchartitem_p.h" #include "chartdataset_p.h" #include "charttheme_p.h" #include "chartanimator_p.h" @@ -65,7 +65,7 @@ QBarSeries::QBarSeries(QObject *parent) } /*! - Returns QChartSeries::SeriesTypeGroupedBar. + Returns QChartSeries::SeriesTypeBar. */ QAbstractSeries::SeriesType QBarSeries::type() const { @@ -104,7 +104,7 @@ Chart* QBarSeriesPrivate::createGraphics(ChartPresenter* presenter) { Q_Q(QBarSeries); - GroupedBarChartItem* bar = new GroupedBarChartItem(q,presenter); + BarChartItem* bar = new BarChartItem(q,presenter); if(presenter->animationOptions().testFlag(QChart::SeriesAnimations)) { bar->setAnimator(presenter->animator()); bar->setAnimation(new BarAnimation(bar)); diff --git a/src/barchart/qbarset.h b/src/barchart/qbarset.h index d29a5d9..ea43481 100644 --- a/src/barchart/qbarset.h +++ b/src/barchart/qbarset.h @@ -103,11 +103,11 @@ private: Q_DISABLE_COPY(QBarSet) friend class QAbstractBarSeries; friend class BarLegendMarker; - friend class BarChartItem; + friend class AbstractBarChartItem; friend class QAbstractBarSeriesPrivate; friend class StackedBarChartItem; friend class PercentBarChartItem; - friend class GroupedBarChartItem; + friend class BarChartItem; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/barchart/stackedbarchartitem.cpp b/src/barchart/stackedbarchartitem.cpp index e1895cb..8168f36 100644 --- a/src/barchart/stackedbarchartitem.cpp +++ b/src/barchart/stackedbarchartitem.cpp @@ -28,7 +28,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE StackedBarChartItem::StackedBarChartItem(QAbstractBarSeries *series, ChartPresenter *presenter) : - BarChartItem(series, presenter) + AbstractBarChartItem(series, presenter) { } diff --git a/src/barchart/stackedbarchartitem_p.h b/src/barchart/stackedbarchartitem_p.h index 4d7609c..85cb99a 100644 --- a/src/barchart/stackedbarchartitem_p.h +++ b/src/barchart/stackedbarchartitem_p.h @@ -31,13 +31,13 @@ #ifndef STACKEDBARCHARTITEM_H #define STACKEDBARCHARTITEM_H -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" #include "qstackedbarseries.h" #include QTCOMMERCIALCHART_BEGIN_NAMESPACE -class StackedBarChartItem : public BarChartItem +class StackedBarChartItem : public AbstractBarChartItem { Q_OBJECT public: diff --git a/src/charttheme.cpp b/src/charttheme.cpp index 8cf74bf..b412312 100644 --- a/src/charttheme.cpp +++ b/src/charttheme.cpp @@ -41,7 +41,7 @@ //items #include "chartaxis_p.h" -#include "barchartitem_p.h" +#include "abstractbarchartitem_p.h" #include "stackedbarchartitem_p.h" #include "percentbarchartitem_p.h" #include "linechartitem_p.h" diff --git a/src/charttheme_p.h b/src/charttheme_p.h index 8f482b8..ec75d55 100644 --- a/src/charttheme_p.h +++ b/src/charttheme_p.h @@ -40,7 +40,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE class ChartItem; class LineChartItem; class QLineSeries; -class BarChartItem; +class AbstractBarChartItem; class QAbstractBarSeries; class StackedBarChartItem; class QStackedBarSeries;