Skip to content

Commit

Permalink
feat: make some improvements to the width framer
Browse files Browse the repository at this point in the history
  • Loading branch information
hello-adam committed Apr 27, 2020
1 parent 58ce75b commit 0dd2f73
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 6 deletions.
68 changes: 62 additions & 6 deletions src/hobbits-plugins/analyzers/WidthFramer/peakselector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@ PeakSelector::PeakSelector(QWidget *parent) :
connect(m_hScroll, SIGNAL(valueChanged(int)), this, SLOT(repaint()));

m_zoomSlider = new QSlider(Qt::Horizontal, this);
m_zoomSlider->setValue(1);
m_zoomSlider->setValue(5);
m_zoomSlider->setMinimum(1);
m_zoomSlider->setMaximum(200);
m_zoomSlider->setMaximum(600);

m_zoomSlider->setInvertedControls(true);

connect(m_zoomSlider, SIGNAL(valueChanged(int)), this, SLOT(adjustScroll()));

this->setMouseTracking(true);
}

QSlider* PeakSelector::getZoomSlider()
Expand Down Expand Up @@ -86,21 +88,65 @@ void PeakSelector::paintEvent(QPaintEvent*)
path.lineTo(i + 1, maxY);
}

QRgb lineColor = qRgb(30, 40, 180);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(Qt::blue);
painter.setPen(lineColor);
painter.drawPath(path);

QFont font = QFont("monospace", 11);
font.setStyleStrategy(QFont::ForceIntegerMetrics);
QFontMetrics fontMetrics = QFontMetrics(font, painter.device());

QFont bigFont = QFont("monospace", 12);
bigFont.setStyleStrategy(QFont::ForceIntegerMetrics);
QFontMetrics bigFontMetrics = QFontMetrics(bigFont, painter.device());

int textPad = 2;
if (m_startDrag >= 0) {
QPointF peak = getPeak();
if (!peak.isNull()) {
double yValue = (peak.y() + yOffset) * yScale;
yValue = this->height() - yValue;
painter.setBrush(QBrush(qRgba(50, 250, 50, 100)));
painter.drawEllipse(QPointF((peak.x() - xOffset) / m_zoomSlider->value(), yValue), 3, 3);
painter.setBrush(QBrush(lineColor));
QPointF peakPoint = QPointF((peak.x() - xOffset) / m_zoomSlider->value(), yValue);
painter.drawEllipse(peakPoint + QPointF(1, 0), 2, 2);

painter.setOpacity(0.85);
painter.setPen(Qt::black);
painter.setFont(bigFont);
QString valString = QString("%1").arg(peak.x());
int textWidth = bigFontMetrics.width(valString);
int textX = int(peakPoint.x() - textWidth/2);
if (textX < textPad) {
textX = textPad;
}
else if (textX + textWidth + textPad > this->width()) {
textX = this->width() - textWidth - textPad;
}
painter.drawText(textX, int(peakPoint.y() - textPad - 3), valString);
}

painter.setOpacity(0.15);
painter.fillRect(m_startDrag, 0, m_endDrag - m_startDrag, this->height(), Qt::black);
}

if (!m_hover.isNull()) {
painter.setOpacity(0.70);
painter.setPen(Qt::black);
painter.drawLine(m_hover.x(), 0, m_hover.x(), this->height());

int location = (m_hover.x() * m_zoomSlider->value()) + m_hScroll->value();
if (location >= 0 && location < m_data.size()) {
QString valString = QString("%1").arg(location);
painter.setFont(font);
int textWidth = fontMetrics.width(valString);
int textHeight = fontMetrics.height();
int textX = m_hover.x() + textPad;
if (textWidth + textX > this->width() - textPad) {
textX = m_hover.x() - textPad - textWidth;
}
painter.drawText(textX, textHeight + textPad, valString);
}

}
}
Expand Down Expand Up @@ -177,8 +223,9 @@ void PeakSelector::mouseMoveEvent(QMouseEvent *event)
}
if (m_startDrag >= 0) {
m_endDrag = event->x();
this->repaint();
}
m_hover = event->pos();
this->repaint();
}

void PeakSelector::mousePressEvent(QMouseEvent *event)
Expand Down Expand Up @@ -208,3 +255,12 @@ void PeakSelector::mouseReleaseEvent(QMouseEvent *event)

this->repaint();
}

void PeakSelector::leaveEvent(QEvent * event)
{
if (m_disabled) {
return;
}
m_hover = QPoint();
this->repaint();
}
2 changes: 2 additions & 0 deletions src/hobbits-plugins/analyzers/WidthFramer/peakselector.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class PeakSelector : public QWidget
void mouseMoveEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void leaveEvent(QEvent * event) override;

public slots:
void setData(QVector<QPointF> data);
Expand All @@ -40,6 +41,7 @@ public slots:

int m_startDrag;
int m_endDrag;
QPoint m_hover;

bool m_disabled;
bool m_hasNan;
Expand Down

0 comments on commit 0dd2f73

Please sign in to comment.