diff --git a/demos/chartthemes/themewidget.cpp b/demos/chartthemes/themewidget.cpp index e460d2f..1b520c9 100644 --- a/demos/chartthemes/themewidget.cpp +++ b/demos/chartthemes/themewidget.cpp @@ -360,7 +360,6 @@ void ThemeWidget::updateUI() QLegend::Alignments alignment(m_legendComboBox->itemData(m_legendComboBox->currentIndex()).toInt()); foreach (QChartView *chartView, m_charts) { - qDebug() << alignment; chartView->chart()->legend()->setAlignmnent(alignment); } } diff --git a/src/barchart/barchart.pri b/src/barchart/barchart.pri index 79fd795..220bc47 100644 --- a/src/barchart/barchart.pri +++ b/src/barchart/barchart.pri @@ -11,7 +11,7 @@ SOURCES += \ $$PWD/qpercentbarseries.cpp \ $$PWD/qstackedbarseries.cpp \ $$PWD/stackedbarchartitem.cpp \ - $$PWD/barvalue.cpp + $$PWD/barlabel.cpp PRIVATE_HEADERS += \ $$PWD/bar_p.h \ @@ -19,7 +19,7 @@ PRIVATE_HEADERS += \ $$PWD/barchartitem_p.h \ $$PWD/percentbarchartitem_p.h \ $$PWD/stackedbarchartitem_p.h \ - $$PWD/barvalue_p.h + $$PWD/barlabel_p.h PUBLIC_HEADERS += \ $$PWD/qbarseries.h \ diff --git a/src/barchart/barchartitem.cpp b/src/barchart/barchartitem.cpp index d860381..088581f 100644 --- a/src/barchart/barchartitem.cpp +++ b/src/barchart/barchartitem.cpp @@ -20,7 +20,7 @@ #include "barchartitem_p.h" #include "bar_p.h" -#include "barvalue_p.h" +#include "barlabel_p.h" #include "qbarset.h" #include "qbarseries.h" #include "qchart.h" @@ -75,7 +75,7 @@ void BarChartItem::dataChanged() delete item; m_bars.clear(); - m_values.clear(); + m_labels.clear(); m_layout.clear(); // Create new graphic items for bars @@ -93,14 +93,14 @@ void BarChartItem::dataChanged() } } - // Create value items + // Create labels for (int category = 0; category < m_series->categoryCount(); category++) { for (int s = 0; s < m_series->barsetCount(); s++) { QBarSet *set = m_series->barsetAt(s); - BarValue *value = new BarValue(*set, this); + BarLabel *value = new BarLabel(*set, this); childItems().append(value); - m_values.append(value); - connect(set,SIGNAL(valuesVisibleChanged(bool)),value,SLOT(valuesVisibleChanged(bool))); + m_labels.append(value); + connect(set,SIGNAL(labelsVisibleChanged(bool)),value,SLOT(labelsVisibleChanged(bool))); } } } @@ -142,17 +142,17 @@ QVector BarChartItem::calculateLayout() bar->setPen(barSet->pen()); bar->setBrush(barSet->brush()); - BarValue* value = m_values.at(itemIndex); + BarLabel* label = m_labels.at(itemIndex); if (!qFuzzyIsNull(barSet->valueAt(category))) { - value->setText(QString::number(barSet->valueAt(category))); + label->setText(QString::number(barSet->valueAt(category))); } else { - value->setText(QString("")); + label->setText(QString("")); } - value->setPos(xPos + (rect.width()/2 - value->boundingRect().width()/2) - ,yPos - barHeight/2 - value->boundingRect().height()/2); - value->setPen(barSet->valuePen()); + label->setPos(xPos + (rect.width()/2 - label->boundingRect().width()/2) + ,yPos - barHeight/2 - label->boundingRect().height()/2); +// value->setFont(barSet->valueFont()); itemIndex++; xPos += barWidth; diff --git a/src/barchart/barchartitem_p.h b/src/barchart/barchartitem_p.h index 39a1283..c2dc3d4 100644 --- a/src/barchart/barchartitem_p.h +++ b/src/barchart/barchartitem_p.h @@ -29,7 +29,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE class Bar; -class BarValue; +class BarLabel; class QChartAxisCategories; class QChart; @@ -81,7 +81,7 @@ protected: // Not owned. QBarSeries *m_series; QList m_bars; - QList m_values; + QList m_labels; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/barchart/barvalue.cpp b/src/barchart/barlabel.cpp similarity index 71% rename from src/barchart/barvalue.cpp rename to src/barchart/barlabel.cpp index 302270e..9757f52 100644 --- a/src/barchart/barvalue.cpp +++ b/src/barchart/barlabel.cpp @@ -18,73 +18,87 @@ ** ****************************************************************************/ -#include "barvalue_p.h" +#include "barlabel_p.h" +#include "chartpresenter_p.h" +#include #include #include #include QTCOMMERCIALCHART_BEGIN_NAMESPACE -BarValue::BarValue(QBarSet &set, QGraphicsItem *parent) : QGraphicsObject(parent), - m_barSet(set), +BarLabel::BarLabel(QBarSet &barSet, QGraphicsItem *parent) : QGraphicsObject(parent), + m_barSet(barSet), m_textItem(new QGraphicsSimpleTextItem(this)) { -// connect(&set,SIGNAL(valuesVisibleChanged(bool)),value,SLOT(valuesVisibleChanged(bool))); - setVisible(false); +// connect(&set,SIGNAL(labelsVisibleChanged(bool)),value,SLOT(labelsVisibleChanged(bool))); + setZValue(ChartPresenter::BarSeriesZValue + 1); + setVisible(barSet.labelsVisible()); + setPen(Qt::NoPen); + setBrush(Qt::SolidPattern); } -void BarValue::setText(QString str) +void BarLabel::setText(QString str) { m_textItem->setText(str); } -QString BarValue::text() const +QString BarLabel::text() const { return m_textItem->text(); } -void BarValue::setPen(const QPen &pen) +void BarLabel::setPen(const QPen &pen) { m_textItem->setPen(pen); } -QPen BarValue::pen() const +QPen BarLabel::pen() const { return m_textItem->pen(); } -void BarValue::setFont(const QFont &font) +void BarLabel::setBrush(const QBrush &brush) +{ + m_textItem->setBrush(brush); +} + +QBrush BarLabel::brush() const +{ + return m_textItem->brush(); +} + +void BarLabel::setFont(const QFont &font) { m_textItem->setFont(font); } -QFont BarValue::font() const +QFont BarLabel::font() const { return m_textItem->font(); } -void BarValue::setPos(qreal x, qreal y) +void BarLabel::setPos(qreal x, qreal y) { m_textItem->setPos(x,y); } -void BarValue::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +void BarLabel::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(painter) Q_UNUSED(option) Q_UNUSED(widget) } -QRectF BarValue::boundingRect() const +QRectF BarLabel::boundingRect() const { return m_textItem->boundingRect(); } -void BarValue::valuesVisibleChanged(bool visible) +void BarLabel::labelsVisibleChanged(bool visible) { - qDebug() << "BarValue visiblle changed:" < @@ -32,11 +32,11 @@ class QBarSet; // Visual class for bar values // By default these are not visible. -class BarValue : public QGraphicsObject +class BarLabel : public QGraphicsObject { Q_OBJECT public: - BarValue(QBarSet &set, QGraphicsItem *parent = 0); + BarLabel(QBarSet &barSet, QGraphicsItem *parent = 0); void setText(QString str); QString text() const; @@ -44,6 +44,9 @@ public: void setPen(const QPen &pen); QPen pen() const; + void setBrush(const QBrush &brush); + QBrush brush() const; + void setFont(const QFont &font); QFont font() const; @@ -54,7 +57,7 @@ public: QRectF boundingRect() const; public Q_SLOTS: - void valuesVisibleChanged(bool visible); + void labelsVisibleChanged(bool visible); private: @@ -64,4 +67,4 @@ private: QTCOMMERCIALCHART_END_NAMESPACE -#endif // BARVALUE_P_H +#endif // BARLABEL_P_H diff --git a/src/barchart/percentbarchartitem.cpp b/src/barchart/percentbarchartitem.cpp index b1ffc60..66bbbe3 100644 --- a/src/barchart/percentbarchartitem.cpp +++ b/src/barchart/percentbarchartitem.cpp @@ -20,7 +20,7 @@ #include "percentbarchartitem_p.h" #include "bar_p.h" -#include "barvalue_p.h" +#include "barlabel_p.h" #include "qbarset.h" #include @@ -58,21 +58,21 @@ QVector PercentBarChartItem::calculateLayout() QRectF rect(xPos, yPos-barHeight, barWidth, barHeight); layout.append(rect); - BarValue* value = m_values.at(itemIndex); + BarLabel* label = m_labels.at(itemIndex); if (!qFuzzyIsNull(m_series->valueAt(set,category))) { int p = m_series->percentageAt(set,category) * 100; QString vString(QString::number(p)); vString.truncate(3); vString.append("%"); - value->setText(vString); + label->setText(vString); } else { - value->setText(QString("")); + label->setText(QString("")); } - value->setPos(xPos + (rect.width()/2 - value->boundingRect().width()/2) - ,yPos - barHeight/2 - value->boundingRect().height()/2); - value->setPen(barSet->valuePen()); + label->setPos(xPos + (rect.width()/2 - label->boundingRect().width()/2) + ,yPos - barHeight/2 - label->boundingRect().height()/2); +// value->setFont(barSet->valueFont()); itemIndex++; yPos -= barHeight; } diff --git a/src/barchart/qbarseries.cpp b/src/barchart/qbarseries.cpp index 3589873..c5f55ac 100644 --- a/src/barchart/qbarseries.cpp +++ b/src/barchart/qbarseries.cpp @@ -391,10 +391,10 @@ QBarCategories QBarSeries::categories() const return categories; } -void QBarSeries::setValuesVisible(bool visible) +void QBarSeries::setLabelsVisible(bool visible) { foreach (QBarSet* s, barSets()) { - s->setValuesVisible(visible); + s->setLabelsVisible(visible); } } diff --git a/src/barchart/qbarseries.h b/src/barchart/qbarseries.h index 12d5cbe..2b35535 100644 --- a/src/barchart/qbarseries.h +++ b/src/barchart/qbarseries.h @@ -51,7 +51,7 @@ public: QList barSets() const; QBarCategories categories() const; - void setValuesVisible(bool visible = true); + void setLabelsVisible(bool visible = true); bool setModel(QAbstractItemModel *model); QAbstractItemModel *modelExt() { return m_model; } diff --git a/src/barchart/qbarset.cpp b/src/barchart/qbarset.cpp index 6f76cd9..c224805 100644 --- a/src/barchart/qbarset.cpp +++ b/src/barchart/qbarset.cpp @@ -56,8 +56,8 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE */ /*! - \fn void QBarSet::setValuesVisible(bool visible = true) - \brief Sets visibility of bar values. Values are visible, if parameter \a visible is true + \fn void QBarSet::setLabelssVisible(bool visible = true) + \brief Sets visibility of bar labels. If \a visible is true, labels are drawn on top of barsets. */ /*! @@ -72,6 +72,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE QBarSet::QBarSet(QString name, QObject *parent) : QObject(parent) ,m_name(name) + ,m_labelsVisible(false) { } @@ -183,27 +184,71 @@ QBrush QBarSet::brush() const } /*! - Sets the pen for values that are drawn on top of this set + Sets pen of the values that are drawn on top of this barset */ -void QBarSet::setValuePen(const QPen &pen) +void QBarSet::setLabelPen(const QPen &pen) { - m_valuePen = pen; + m_labelPen = pen; + emit valueChanged(); +} + +/*! + Returns pen of the values that are drawn on top of this barset +*/ +QPen QBarSet::labelPen() const +{ + return m_labelPen; +} + +/*! + Sets brush of the values that are drawn on top of this barset +*/ +void QBarSet::setLabelBrush(const QBrush &brush) +{ + m_labelBrush = brush; + emit valueChanged(); +} + +/*! + Returns brush of the values that are drawn on top of this barset +*/ +QBrush QBarSet::labelBrush() const +{ + return m_labelBrush; +} + +/*! + Sets the pen for values that are drawn on top of this barset +*/ +void QBarSet::setLabelFont(const QFont &font) +{ + m_labelFont = font; + emit valueChanged(); } /*! Returns the pen for values that are drawn on top of this set */ -QPen QBarSet::valuePen() const +QFont QBarSet::labelFont() const { - return m_valuePen; + return m_labelFont; } /*! Sets the visibility of barset values to \a visible */ -void QBarSet::setValuesVisible(bool visible) +void QBarSet::setLabelsVisible(bool visible) +{ + m_labelsVisible = visible; + emit labelsVisibleChanged(visible); +} + +/*! + Returns the visibility of values +*/ +bool QBarSet::labelsVisible() const { - emit valuesVisibleChanged(visible); + return m_labelsVisible; } /*! diff --git a/src/barchart/qbarset.h b/src/barchart/qbarset.h index 7e2b996..15dfae3 100644 --- a/src/barchart/qbarset.h +++ b/src/barchart/qbarset.h @@ -24,6 +24,7 @@ #include #include #include +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -55,10 +56,17 @@ public: void setBrush(const QBrush &brush); QBrush brush() const; - void setValuePen(const QPen &pen); - QPen valuePen() const; + void setLabelPen(const QPen &pen); + QPen labelPen() const; - void setValuesVisible(bool visible = true); + void setLabelBrush(const QBrush &brush); + QBrush labelBrush() const; + + void setLabelFont(const QFont &font); + QFont labelFont() const; + + void setLabelsVisible(bool visible = true); + bool labelsVisible() const; Q_SIGNALS: void clicked(QString category, Qt::MouseButtons button); // Clicked and hover signals exposed to user @@ -69,7 +77,7 @@ Q_SIGNALS: void hoverEnter(QPoint pos); void hoverLeave(); void showToolTip(QPoint pos, QString tip); // Private signal - void valuesVisibleChanged(bool visible); + void labelsVisibleChanged(bool visible); // <--- TO PIMPL public Q_SLOTS: @@ -86,7 +94,10 @@ private: QMap m_mappedValues; QPen m_pen; QBrush m_brush; - QPen m_valuePen; + QPen m_labelPen; + QBrush m_labelBrush; + QFont m_labelFont; + bool m_labelsVisible; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/barchart/stackedbarchartitem.cpp b/src/barchart/stackedbarchartitem.cpp index 5025dab..ef49195 100644 --- a/src/barchart/stackedbarchartitem.cpp +++ b/src/barchart/stackedbarchartitem.cpp @@ -20,7 +20,7 @@ #include "stackedbarchartitem_p.h" #include "bar_p.h" -#include "barvalue_p.h" +#include "barlabel_p.h" #include "qbarset.h" #include @@ -60,25 +60,24 @@ QVector StackedBarChartItem::calculateLayout() for (int set=0; set < m_series->barsetCount(); set++) { QBarSet* barSet = m_series->barsetAt(set); - qreal barHeight = barSet->valueAt(category) * scale; //m_series->valueAt(set, category) * scale; + qreal barHeight = barSet->valueAt(category) * scale; Bar* bar = m_bars.at(itemIndex); bar->setPen(barSet->pen()); bar->setBrush(barSet->brush()); QRectF rect(xPos, yPos-barHeight, barWidth, barHeight); layout.append(rect); - BarValue* value = m_values.at(itemIndex); + BarLabel* label = m_labels.at(itemIndex); if (!qFuzzyIsNull(barSet->valueAt(category))) { - value->setText(QString::number(barSet->valueAt(category))); + label->setText(QString::number(barSet->valueAt(category))); } else { - value->setText(QString("")); + label->setText(QString("")); } - value->setPos(xPos + (rect.width()/2 - value->boundingRect().width()/2) - ,yPos - barHeight/2 - value->boundingRect().height()/2); - value->setPen(barSet->valuePen()); - + label->setPos(xPos + (rect.width()/2 - label->boundingRect().width()/2) + ,yPos - barHeight/2 - label->boundingRect().height()/2); +// value->setFont(barSet->valueFont()); itemIndex++; yPos -= barHeight; } diff --git a/src/charttheme.cpp b/src/charttheme.cpp index 7f25ee5..09333ee 100644 --- a/src/charttheme.cpp +++ b/src/charttheme.cpp @@ -183,9 +183,9 @@ void ChartTheme::decorate(QBarSeries* series, int index, bool force) // Pick label color from the opposite end of the gradient. // 0.3 as a boundary seems to work well. if (takeAtPos < 0.3) - sets.at(i)->setValuePen(colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), 1)); + sets.at(i)->setLabelBrush(colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), 1)); else - sets.at(i)->setValuePen(colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), 0)); + sets.at(i)->setLabelBrush(colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), 0)); if (pen == sets.at(i)->pen() || force) { QColor c = colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), 0.0);