diff --git a/src/barchart/bar.cpp b/src/barchart/bar.cpp index f893017..dc3022d 100644 --- a/src/barchart/bar.cpp +++ b/src/barchart/bar.cpp @@ -36,18 +36,21 @@ void Bar::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_UNUSED(event) emit clicked(m_barset, m_index); + emit clicked(m_index); } void Bar::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event) emit hovered(m_barset, true); + emit hovered(true); } void Bar::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event) emit hovered(m_barset, false); + emit hovered(false); } #include "moc_bar_p.cpp" diff --git a/src/barchart/bar_p.h b/src/barchart/bar_p.h index b062e08..b3909b5 100644 --- a/src/barchart/bar_p.h +++ b/src/barchart/bar_p.h @@ -52,6 +52,8 @@ public: Q_SIGNALS: void clicked(QBarSet *barset, int index); void hovered(QBarSet *barset, bool status); + void clicked(int index); + void hovered(bool status); private: int m_index; diff --git a/src/barchart/barchartitem.cpp b/src/barchart/barchartitem.cpp index fb90aac..3736ca9 100644 --- a/src/barchart/barchartitem.cpp +++ b/src/barchart/barchartitem.cpp @@ -196,6 +196,8 @@ void BarChartItem::handleDataStructureChanged() m_bars.append(bar); connect(bar, SIGNAL(clicked(QBarSet*,int)), m_series, SIGNAL(clicked(QBarSet*,int))); connect(bar, SIGNAL(hovered(QBarSet*,bool)), m_series, SIGNAL(hovered(QBarSet*,bool))); + connect(bar, SIGNAL(clicked(int)), set, SIGNAL(clicked(int))); + connect(bar, SIGNAL(hovered(bool)), set, SIGNAL(hovered(bool))); m_layout.append(QRectF(0, 0, 0, 0)); // Labels diff --git a/src/barchart/qbarset.cpp b/src/barchart/qbarset.cpp index 88672b6..2201df7 100644 --- a/src/barchart/qbarset.cpp +++ b/src/barchart/qbarset.cpp @@ -103,6 +103,21 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE */ /*! + \fn void QBarSet::clicked(int index) + + The signal is emitted if the user clicks with a mouse on top of barset. + Clicked bar inside set is indexed by \a index +*/ + +/*! + \fn void QBarSet::hovered(bool status) + + The signal is emitted if mouse is hovered on top of barset. + Parameter \a status is true, if mouse entered on top of barset, false if mouse left from top of barset. +*/ + + +/*! \fn void QBarSet::labelChanged() This signal is emitted when the label of the barSet has changed. \sa label diff --git a/src/barchart/qbarset.h b/src/barchart/qbarset.h index bbe2f33..c91c1f0 100644 --- a/src/barchart/qbarset.h +++ b/src/barchart/qbarset.h @@ -88,6 +88,8 @@ public: void setLabelColor(QColor color); Q_SIGNALS: + void clicked(int index); + void hovered(bool status); void penChanged(); void brushChanged(); void labelChanged(); diff --git a/tests/auto/qbarseries/tst_qbarseries.cpp b/tests/auto/qbarseries/tst_qbarseries.cpp index 2a99b01..9e3bfea 100644 --- a/tests/auto/qbarseries/tst_qbarseries.cpp +++ b/tests/auto/qbarseries/tst_qbarseries.cpp @@ -327,6 +327,8 @@ void tst_QBarSeries::mouseclicked() series->append(set2); QSignalSpy seriesSpy(series,SIGNAL(clicked(QBarSet*,int))); + QSignalSpy setSpy1(set1, SIGNAL(clicked(int))); + QSignalSpy setSpy2(set2, SIGNAL(clicked(int))); QChartView view(new QChart()); view.resize(400,300); @@ -340,71 +342,107 @@ void tst_QBarSeries::mouseclicked() QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); QList seriesSpyArg = seriesSpy.takeFirst(); QCOMPARE(qvariant_cast(seriesSpyArg.at(0)), set1); QVERIFY(seriesSpyArg.at(1).type() == QVariant::Int); QVERIFY(seriesSpyArg.at(1).toInt() == 0); + QList setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + //==================================================================================== // barset 1, bar 1 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, QPoint(186,142)); QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); seriesSpyArg = seriesSpy.takeFirst(); QCOMPARE(qvariant_cast(seriesSpyArg.at(0)), set1); QVERIFY(seriesSpyArg.at(1).type() == QVariant::Int); QVERIFY(seriesSpyArg.at(1).toInt() == 1); + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + //==================================================================================== // barset 1, bar 2 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, QPoint(271,142)); QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); seriesSpyArg = seriesSpy.takeFirst(); QCOMPARE(qvariant_cast(seriesSpyArg.at(0)), set1); QVERIFY(seriesSpyArg.at(1).type() == QVariant::Int); QVERIFY(seriesSpyArg.at(1).toInt() == 2); + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + //==================================================================================== // barset 2, bar 0 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, QPoint(127,142)); QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); seriesSpyArg = seriesSpy.takeFirst(); QCOMPARE(qvariant_cast(seriesSpyArg.at(0)), set2); QVERIFY(seriesSpyArg.at(1).type() == QVariant::Int); QVERIFY(seriesSpyArg.at(1).toInt() == 0); + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + //==================================================================================== // barset 2, bar 1 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, QPoint(212,142)); QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); seriesSpyArg = seriesSpy.takeFirst(); QCOMPARE(qvariant_cast(seriesSpyArg.at(0)), set2); QVERIFY(seriesSpyArg.at(1).type() == QVariant::Int); QVERIFY(seriesSpyArg.at(1).toInt() == 1); + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + //==================================================================================== // barset 2, bar 2 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, QPoint(296,142)); QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); seriesSpyArg = seriesSpy.takeFirst(); QCOMPARE(qvariant_cast(seriesSpyArg.at(0)), set2); QVERIFY(seriesSpyArg.at(1).type() == QVariant::Int); QVERIFY(seriesSpyArg.at(1).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); } void tst_QBarSeries::mousehovered_data() @@ -425,6 +463,8 @@ void tst_QBarSeries::mousehovered() series->append(set2); QSignalSpy seriesSpy(series,SIGNAL(hovered(QBarSet*,bool))); + QSignalSpy setSpy1(set1, SIGNAL(hovered(bool))); + QSignalSpy setSpy2(set2, SIGNAL(hovered(bool))); QChartView view(new QChart()); view.resize(400,300); @@ -440,21 +480,31 @@ void tst_QBarSeries::mousehovered() QTest::mouseMove(view.viewport(), QPoint(0, 142)); QCoreApplication::processEvents(QEventLoop::AllEvents, 10000); TRY_COMPARE(seriesSpy.count(), 0); + TRY_COMPARE(setSpy1.count(), 0); + TRY_COMPARE(setSpy2.count(), 0); //======================================================================= // move mouse on top of set1 QTest::mouseMove(view.viewport(), QPoint(102,142)); TRY_COMPARE(seriesSpy.count(), 1); + TRY_COMPARE(setSpy1.count(), 1); + TRY_COMPARE(setSpy2.count(), 0); QList seriesSpyArg = seriesSpy.takeFirst(); QCOMPARE(qvariant_cast(seriesSpyArg.at(0)), set1); QVERIFY(seriesSpyArg.at(1).type() == QVariant::Bool); QVERIFY(seriesSpyArg.at(1).toBool() == true); + QList setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Bool); + QVERIFY(setSpyArg.at(0).toBool() == true); + //======================================================================= // move mouse from top of set1 to top of set2 QTest::mouseMove(view.viewport(), QPoint(127,142)); TRY_COMPARE(seriesSpy.count(), 2); + TRY_COMPARE(setSpy1.count(), 1); + TRY_COMPARE(setSpy2.count(), 1); // should leave set1 seriesSpyArg = seriesSpy.takeFirst(); @@ -462,22 +512,36 @@ void tst_QBarSeries::mousehovered() QVERIFY(seriesSpyArg.at(1).type() == QVariant::Bool); QVERIFY(seriesSpyArg.at(1).toBool() == false); + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Bool); + QVERIFY(setSpyArg.at(0).toBool() == false); + // should enter set2 seriesSpyArg = seriesSpy.takeFirst(); QCOMPARE(qvariant_cast(seriesSpyArg.at(0)), set2); QVERIFY(seriesSpyArg.at(1).type() == QVariant::Bool); QVERIFY(seriesSpyArg.at(1).toBool() == true); + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Bool); + QVERIFY(setSpyArg.at(0).toBool() == true); + //======================================================================= // move mouse from top of set2 to background QTest::mouseMove(view.viewport(), QPoint(127,0)); TRY_COMPARE(seriesSpy.count(), 1); + TRY_COMPARE(setSpy1.count(), 0); + TRY_COMPARE(setSpy2.count(), 1); // should leave set2 seriesSpyArg = seriesSpy.takeFirst(); QCOMPARE(qvariant_cast(seriesSpyArg.at(0)), set2); QVERIFY(seriesSpyArg.at(1).type() == QVariant::Bool); QVERIFY(seriesSpyArg.at(1).toBool() == false); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Bool); + QVERIFY(setSpyArg.at(0).toBool() == false); } void tst_QBarSeries::clearWithAnimations()