X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fview%2Fcursorheader.cpp;h=f79a5785d558f56b54a60b37605614d08f9b16c9;hb=65c34596346fbf7d25fe2065728b86c207018586;hp=076b2a7fc2ecd677ea12b99e16d08f7f3f1c2910;hpb=5c5ce7574062e0d3ad4f7d9dde70b482315d54fb;p=pulseview.git diff --git a/pv/view/cursorheader.cpp b/pv/view/cursorheader.cpp index 076b2a7f..f79a5785 100644 --- a/pv/view/cursorheader.cpp +++ b/pv/view/cursorheader.cpp @@ -47,7 +47,6 @@ int CursorHeader::calculateTextHeight() CursorHeader::CursorHeader(View &parent) : MarginWidget(parent), - dragging_(false), textHeight_(calculateTextHeight()) { setMouseTracking(true); @@ -76,13 +75,16 @@ void CursorHeader::paintEvent(QPaintEvent*) // would be clipped away. const QRect r = rect().adjusted(0, 0, 0, -BaselineOffset); - // Draw the cursors - if (view_.cursors_shown()) - view_.cursors()->draw_markers(p, r); + // Draw the items + const vector< shared_ptr > items(view_.time_items()); + for (auto &m : items) + m->paint_label(p, r); } void CursorHeader::mouseMoveEvent(QMouseEvent *e) { + mouse_point_ = e->pos(); + if (!(e->buttons() & Qt::LeftButton)) return; @@ -90,11 +92,15 @@ void CursorHeader::mouseMoveEvent(QMouseEvent *e) QApplication::startDragDistance()) return; + // Do the drag dragging_ = true; - if (shared_ptr m = grabbed_marker_.lock()) - m->set_time(view_.offset() + - ((double)e->x() + 0.5) * view_.scale()); + const int delta = e->pos().x() - mouse_down_point_.x(); + const vector< shared_ptr > items(view_.time_items()); + for (auto &i : items) + if (i->dragging()) + i->set_time(view_.offset() + + (i->drag_point().x() + delta) * view_.scale()); } void CursorHeader::mousePressEvent(QMouseEvent *e) @@ -102,22 +108,21 @@ void CursorHeader::mousePressEvent(QMouseEvent *e) if (e->buttons() & Qt::LeftButton) { mouse_down_point_ = e->pos(); - grabbed_marker_.reset(); + mouse_down_item_.reset(); clear_selection(); - if (view_.cursors_shown()) { - shared_ptr cursors(view_.cursors()); - if (cursors->first()->get_label_rect( - rect()).contains(e->pos())) - grabbed_marker_ = cursors->first(); - else if (cursors->second()->get_label_rect( - rect()).contains(e->pos())) - grabbed_marker_ = cursors->second(); - } + const vector< shared_ptr > items(view_.time_items()); + for (auto &i : items) + if (i && i->label_rect(rect()).contains(e->pos())) { + mouse_down_item_ = i; + break; + } - if (shared_ptr m = grabbed_marker_.lock()) - m->select(); + if (mouse_down_item_) { + mouse_down_item_->select(); + mouse_down_item_->drag(); + } selection_changed(); } @@ -127,16 +132,28 @@ void CursorHeader::mouseReleaseEvent(QMouseEvent *) { using pv::widgets::Popup; - if (!dragging_) - if (shared_ptr m = grabbed_marker_.lock()) { - Popup *const p = m->create_popup(&view_); - const QPoint arrpos(m->get_x(), height() - BaselineOffset); + if (!dragging_ && mouse_down_item_) { + Popup *const p = mouse_down_item_->create_popup(&view_); + if (p) { + const QPoint arrpos(mouse_down_item_->get_x(), + height() - BaselineOffset); p->set_position(mapToGlobal(arrpos), Popup::Bottom); p->show(); } + } dragging_ = false; - grabbed_marker_.reset(); + mouse_down_item_.reset(); + + const vector< shared_ptr > items(view_.time_items()); + for (auto &i : items) + i->drag_release(); +} + +void CursorHeader::leaveEvent(QEvent*) +{ + mouse_point_ = QPoint(-1, -1); + update(); } } // namespace view