diff options
Diffstat (limited to 'DSLogic-gui/pv/view/viewport.cpp')
-rw-r--r-- | DSLogic-gui/pv/view/viewport.cpp | 129 |
1 files changed, 99 insertions, 30 deletions
diff --git a/DSLogic-gui/pv/view/viewport.cpp b/DSLogic-gui/pv/view/viewport.cpp index e0b7e45..9a59aa8 100644 --- a/DSLogic-gui/pv/view/viewport.cpp +++ b/DSLogic-gui/pv/view/viewport.cpp @@ -79,9 +79,9 @@ Viewport::Viewport(View &parent) : int Viewport::get_total_height() const { int h = 0; - const vector< shared_ptr<Signal> > sigs( + const vector< boost::shared_ptr<Signal> > sigs( _view.session().get_signals()); - BOOST_FOREACH(const shared_ptr<Signal> s, sigs) { + BOOST_FOREACH(const boost::shared_ptr<Signal> s, sigs) { assert(s); //h = max(s->get_v_offset() + _view.get_signalHeight(), h); h = max(s->get_v_offset(), h); @@ -95,7 +95,7 @@ void Viewport::paintEvent(QPaintEvent *event) (void)event; using pv::view::Signal; - + int i, j; QStyleOption o; o.initFrom(this); QPainter p(this); @@ -105,36 +105,35 @@ void Viewport::paintEvent(QPaintEvent *event) p.setRenderHint(QPainter::Antialiasing); if (_view.session().get_device()->mode == LOGIC) { - switch(_view.session().get_capture_state()) { - case SigSession::Init: - break; + switch(_view.session().get_capture_state()) { + case SigSession::Init: + break; - case SigSession::Stopped: - paintSignals(p); - break; + case SigSession::Stopped: + paintSignals(p); + break; - case SigSession::Running: - //p.setRenderHint(QPainter::Antialiasing); - paintProgress(p); - break; - } - } else if (_view.session().get_device()->mode == ANALOG) { + case SigSession::Running: + //p.setRenderHint(QPainter::Antialiasing); + paintProgress(p); + break; + } + } else { paintSignals(p); } p.setRenderHint(QPainter::Antialiasing, false); if (_view.get_signalHeight() != _curSignalHeight) _curSignalHeight = _view.get_signalHeight(); - const vector< shared_ptr<Signal> > sigs( + const vector< boost::shared_ptr<Signal> > sigs( _view.session().get_signals()); - BOOST_FOREACH(const shared_ptr<Signal> s, sigs) { + BOOST_FOREACH(const boost::shared_ptr<Signal> s, sigs) { assert(s); //paint_axis(p, y, left, right); p.setPen(Signal::dsGray); const double sigY = s->get_v_offset() - _view.v_offset(); - int i, j; if (s->get_type() == Signal::DS_ANALOG) { p.drawLine(0, sigY, width(), sigY); const double spanY = (s->get_signalHeight()) * 1.0f / NumSpanY; @@ -152,19 +151,47 @@ void Viewport::paintEvent(QPaintEvent *event) p.drawLine(0 + spanX * i, sigY, 0 + spanX * i, sigY - s->get_signalHeight()); } - } else { + } else if (s->get_type() == Signal::DS_LOGIC) { p.drawLine(0, sigY + 10, width(), sigY + 10); } } + if (_view.session().get_device()->mode == DSO) { + + p.setPen(Signal::dsGray); + p.setPen(Qt::DotLine); + + const double spanY =height() * 1.0f / 10; + for (i = 1; i < 11; i++) { + const double posY = spanY * i; + p.drawLine(0, posY, width(), posY); + const double miniSpanY = spanY / 5; + for (j = 1; j < 5; j++) { + p.drawLine(width() / 2.0f - 10, posY - miniSpanY * j, + width() / 2.0f + 10, posY - miniSpanY * j); + } + } + const double spanX = width() * 1.0f / 10; + for (i = 1; i < 11; i++) { + const double posX = spanX * i; + p.drawLine(posX, 0, + posX, height()); + const double miniSpanX = spanX / 5; + for (j = 1; j < 5; j++) { + p.drawLine(posX - miniSpanX * j, height() / 2.0f - 10, + posX - miniSpanX * j, height() / 2.0f + 10); + } + } + } + p.end(); } void Viewport::paintSignals(QPainter &p) { - const vector< shared_ptr<Signal> > sigs( + const vector< boost::shared_ptr<Signal> > sigs( _view.session().get_signals()); -// const vector< shared_ptr<Signal> > pro_sigs( +// const vector< boost::shared_ptr<Signal> > pro_sigs( // _view.session().get_pro_signals()); // Plot the signal const int v_offset = _view.v_offset(); @@ -181,13 +208,14 @@ void Viewport::paintSignals(QPainter &p) QPainter dbp(&pixmap); dbp.initFrom(this); p.setRenderHint(QPainter::Antialiasing, false); - BOOST_FOREACH(const shared_ptr<Signal> s, sigs) { + BOOST_FOREACH(const boost::shared_ptr<Signal> s, sigs) { assert(s); - s->paint(dbp, s->get_v_offset() - v_offset, 0, width(), - _view.scale(), _view.offset()); + if (s->get_active()) + s->paint(dbp, ((s->get_type() == Signal::DS_DSO) ? s->get_zeroPos() + height()*0.5 : s->get_v_offset() - v_offset), 0, width(), + _view.scale(), _view.offset()); } // p.setRenderHint(QPainter::Antialiasing); -// BOOST_FOREACH(const shared_ptr<Signal> s, pro_sigs) { +// BOOST_FOREACH(const boost::shared_ptr<Signal> s, pro_sigs) { // assert(s); // s->paint(dbp, s->get_v_offset() - v_offset, 0, width(), // _view.scale(), _view.offset()); @@ -196,6 +224,13 @@ void Viewport::paintSignals(QPainter &p) } p.drawPixmap(0, 0, pixmap); + // plot trig line in DSO mode + BOOST_FOREACH(const shared_ptr<Signal> s, sigs) { + assert(s); + if (s->get_active() && s->get_type() == Signal::DS_DSO) + s->paint_trig(p, 0, width(), qAbs(_mouse_point.y() - s->get_trig_vpos()) <= HitCursorMargin ); + } + // plot cursors if (_view.cursors_shown()) { list<Cursor*>::iterator i = _view.get_cursorList().begin(); @@ -364,6 +399,20 @@ void Viewport::mousePressEvent(QMouseEvent *event) // if (!_view.get_ruler()->get_grabbed_cursor()) { // _zoom_rect_visible = true; // } + + const vector< shared_ptr<Signal> > sigs(_view.session().get_signals()); + BOOST_FOREACH(const shared_ptr<Signal> s, sigs) { + assert(s); + if (s->get_active() && + s->get_type() == Signal::DS_DSO && + qAbs(_mouse_point.y() - s->get_trig_vpos()) <= HitCursorMargin) { + if (_drag_sig) + _drag_sig.reset(); + else + _drag_sig = s; + break; + } + } update(); } } @@ -371,7 +420,7 @@ void Viewport::mousePressEvent(QMouseEvent *event) void Viewport::mouseMoveEvent(QMouseEvent *event) { assert(event); - + _mouse_point = event->pos(); if (event->buttons() & Qt::RightButton) { _zoom_rect = QRectF(_mouse_down_point, event->pos()); _zoom_rect_visible = true; @@ -382,16 +431,35 @@ void Viewport::mouseMoveEvent(QMouseEvent *event) _mouse_down_offset + (_mouse_down_point - event->pos()).x() * _view.scale()); - measure(); } if (!(event->buttons() || Qt::NoButton)) { + if (_drag_sig) { + uint16_t trig_value = 0; + int vpos = _mouse_point.y(); + if (vpos < 0) + vpos = 0; + else if (vpos > height()) + vpos = height(); + _drag_sig->set_trig_vpos(vpos); + + const vector< shared_ptr<Signal> > sigs(_view.session().get_signals()); + BOOST_FOREACH(const shared_ptr<Signal> s, sigs) { + assert(s); + if (s->get_active() && + s->get_type() == Signal::DS_DSO) { + trig_value += (((uint16_t)(255 - s->get_trig_vpos()*1.0/height()*255)) << 8*s->get_index()); + } + } + sr_config_set(_view.session().get_device(), + SR_CONF_TRIGGER_VALUE, g_variant_new_uint16(trig_value)); + } + TimeMarker* grabbed_marker = _view.get_ruler()->get_grabbed_cursor(); if (_view.cursors_shown() && grabbed_marker) { grabbed_marker->set_time(_view.offset() + _view.hover_point().x() * _view.scale()); } - measure(); } @@ -445,6 +513,7 @@ void Viewport::wheelEvent(QWheelEvent *event) void Viewport::leaveEvent(QEvent *) { _measure_shown = false; + _mouse_point = QPoint(-1, -1); //_view.show_cursors(false); update(); } @@ -471,8 +540,8 @@ void Viewport::set_receive_len(quint64 length) void Viewport::measure() { - const vector< shared_ptr<Signal> > sigs(_view.session().get_signals()); - BOOST_FOREACH(const shared_ptr<Signal> s, sigs) { + const vector< boost::shared_ptr<Signal> > sigs(_view.session().get_signals()); + BOOST_FOREACH(const boost::shared_ptr<Signal> s, sigs) { assert(s); const int curY = _view.hover_point().y(); const double curX = _view.hover_point().x(); |