summaryrefslogtreecommitdiff
path: root/DSLogic-gui/pv/view/viewport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'DSLogic-gui/pv/view/viewport.cpp')
-rw-r--r--DSLogic-gui/pv/view/viewport.cpp129
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();