@@ -530,9 +530,23 @@ void HistogramView::clear()
530530void HistogramView::showToolTip (bool is_hovering, int bar_index)
531531{
532532 if (is_hovering) {
533+ int num;
534+ if (buckets_.negative .empty ()) {
535+ num = buckets_.positive [bar_index].size ();
536+ } else {
537+ const int num_of_neg_buckets = static_cast <int >(buckets_.negative .size ());
538+
539+ if (bar_index >= num_of_neg_buckets) {
540+ num = buckets_.positive [bar_index - num_of_neg_buckets].size ();
541+ ;
542+ } else {
543+ num = buckets_.negative [bar_index].size ();
544+ ;
545+ }
546+ }
547+
533548 const QString number_of_pins
534- = QString (" Number of Endpoints: %1\n " )
535- .arg (static_cast <QBarSet*>(sender ())->at (bar_index));
549+ = QString (" Number of Endpoints: %1\n " ).arg (num);
536550
537551 QString scaled_suffix = sta_->getSTA ()->units ()->timeUnit ()->scaledSuffix ();
538552
@@ -712,16 +726,22 @@ void HistogramView::setVisualConfig()
712726 return ;
713727 }
714728
715- std::pair<QBarSet*, QBarSet*> bar_sets = createBarSets (); /* <neg, pos> */
716- populateBarSets (*bar_sets.first , *bar_sets.second );
729+ std::tuple<QBarSet*, QBarSet*, QBarSet*, QBarSet*> bar_sets
730+ = createBarSets (); /* <neg, pos> */
731+ populateBarSets (*std::get<0 >(bar_sets),
732+ *std::get<1 >(bar_sets),
733+ *std::get<2 >(bar_sets),
734+ *std::get<3 >(bar_sets));
717735
718736 QStackedBarSeries* series = new QStackedBarSeries (this );
719- series->append (bar_sets.first );
720- series->append (bar_sets.second );
737+ series->append (std::get<0 >(bar_sets));
738+ series->append (std::get<1 >(bar_sets));
739+ series->append (std::get<2 >(bar_sets));
740+ series->append (std::get<3 >(bar_sets));
721741 series->setBarWidth (1.0 );
722742 chart_->addSeries (series);
723743
724- setXAxisConfig (bar_sets. first ->count ());
744+ setXAxisConfig (std::get< 0 >( bar_sets) ->count ());
725745 setYAxisConfig ();
726746 series->attachAxis (axis_y_);
727747
@@ -732,24 +752,43 @@ void HistogramView::setVisualConfig()
732752 chart_->setTitle (" Endpoint Slack" );
733753}
734754
735- std::pair<QBarSet*, QBarSet*> HistogramView::createBarSets ()
755+ std::tuple<QBarSet*, QBarSet*, QBarSet*, QBarSet*>
756+ HistogramView::createBarSets ()
736757{
737758 QBarSet* neg_set = new QBarSet (" " );
738759 neg_set->setBorderColor (0x8b0000 ); // darkred
739760 neg_set->setColor (0xf08080 ); // lightcoral
740761 QBarSet* pos_set = new QBarSet (" " );
741762 pos_set->setBorderColor (0x006400 ); // darkgreen
742763 pos_set->setColor (0x90ee90 ); // lightgreen
764+ QBarSet* pos_set_invisible = new QBarSet (" " );
765+ pos_set_invisible->setBorderColor (Qt::transparent);
766+ pos_set_invisible->setColor (Qt::transparent);
767+ QBarSet* neg_set_invisible = new QBarSet (" " );
768+ neg_set_invisible->setBorderColor (Qt::transparent);
769+ neg_set_invisible->setColor (Qt::transparent);
743770
744771 connect (neg_set, &QBarSet::hovered, this , &HistogramView::showToolTip);
745772 connect (pos_set, &QBarSet::hovered, this , &HistogramView::showToolTip);
773+ connect (
774+ pos_set_invisible, &QBarSet::hovered, this , &HistogramView::showToolTip);
775+ connect (
776+ neg_set_invisible, &QBarSet::hovered, this , &HistogramView::showToolTip);
746777
747778 connect (
748779 neg_set, &QBarSet::clicked, this , &HistogramView::emitEndPointsInBucket);
749780 connect (
750781 pos_set, &QBarSet::clicked, this , &HistogramView::emitEndPointsInBucket);
782+ connect (pos_set_invisible,
783+ &QBarSet::clicked,
784+ this ,
785+ &HistogramView::emitEndPointsInBucket);
786+ connect (neg_set_invisible,
787+ &QBarSet::clicked,
788+ this ,
789+ &HistogramView::emitEndPointsInBucket);
751790
752- return {neg_set, pos_set};
791+ return {neg_set, pos_set, pos_set_invisible, neg_set_invisible };
753792}
754793
755794void HistogramView::emitEndPointsInBucket (const int bar_index)
@@ -915,15 +954,23 @@ int HistogramView::computeFirstDigit(int value, int digits)
915954 return static_cast <int >(value / std::pow (10 , digits - 1 ));
916955}
917956
918- void HistogramView::populateBarSets (QBarSet& neg_set, QBarSet& pos_set)
957+ void HistogramView::populateBarSets (QBarSet& neg_set,
958+ QBarSet& pos_set,
959+ QBarSet& neg_set_invisible,
960+ QBarSet& pos_set_invisible)
919961{
962+ const int max_bin_count = histogram_->getMaxBinCount ();
920963 for (const auto & bucket : buckets_.negative ) {
921964 neg_set << bucket.size ();
965+ neg_set_invisible << max_bin_count - bucket.size ();
922966 pos_set << 0 ;
967+ pos_set_invisible << 0 ;
923968 }
924969 for (const auto & bucket : buckets_.positive ) {
925970 neg_set << 0 ;
971+ neg_set_invisible << 0 ;
926972 pos_set << bucket.size ();
973+ pos_set_invisible << max_bin_count - bucket.size ();
927974 }
928975}
929976
0 commit comments