Skip to content

Commit 8001160

Browse files
authored
Merge pull request #7856 from LucasYuki/gui_chartsWidget
Select buckets in End point Slack Histogram by x-coordinate
2 parents e4f795a + d08d9cb commit 8001160

File tree

2 files changed

+62
-12
lines changed

2 files changed

+62
-12
lines changed

src/gui/src/chartsWidget.cpp

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -530,9 +530,23 @@ void HistogramView::clear()
530530
void 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

755794
void 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

src/gui/src/chartsWidget.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,11 @@ class HistogramView : public QChartView
8282
const std::vector<std::vector<const sta::Pin*>>& pin_bins);
8383
void setVisualConfig();
8484

85-
std::pair<QBarSet*, QBarSet*> createBarSets();
86-
void populateBarSets(QBarSet& neg_set, QBarSet& pos_set);
85+
std::tuple<QBarSet*, QBarSet*, QBarSet*, QBarSet*> createBarSets();
86+
void populateBarSets(QBarSet& neg_set,
87+
QBarSet& pos_set,
88+
QBarSet& neg_set_invisible,
89+
QBarSet& pos_set_invisible);
8790

8891
void setXAxisConfig(int all_bars_count);
8992
void setXAxisTitle();

0 commit comments

Comments
 (0)