X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fheader.cpp;h=3530d891b5f7edf6bde111c70f7202ab2849e718;hb=b434cbaf3208c2037fd5f86001b367b46ba926ba;hp=766347d5272a09962de138584a57e97cbf479ffa;hpb=bb4a0e8e0b337988264e43a368b6ce5950d2d6cd;p=pulseview.git diff --git a/pv/view/header.cpp b/pv/view/header.cpp index 766347d..3530d89 100644 --- a/pv/view/header.cpp +++ b/pv/view/header.cpp @@ -94,6 +94,24 @@ shared_ptr Header::get_mouse_over_item(const QPoint &pt) return shared_ptr(); } +void Header::drag_items(const QPoint &delta) +{ + RowItemOwner *item_owner = nullptr; + for (std::shared_ptr r : view_) + if (r->dragging()) { + item_owner = r->owner(); + r->drag_by(delta); + + // Ensure the trace is selected + r->select(); + } + + item_owner->restack_items(); + for (const auto &r : *item_owner) + r->animate_to_layout_v_offset(); + signals_moved(); +} + void Header::paintEvent(QPaintEvent*) { // The trace labels are not drawn with the arrows exactly on the @@ -123,92 +141,6 @@ void Header::paintEvent(QPaintEvent*) painter.end(); } -void Header::mouseLeftReleaseEvent(QMouseEvent *event) -{ - assert(event); - - const bool ctrl_pressed = - QApplication::keyboardModifiers() & Qt::ControlModifier; - - // Unselect everything if control is not pressed - const shared_ptr mouse_over = - get_mouse_over_item(event->pos()); - - for (auto &r : view_) - r->drag_release(); - - if (dragging_) - view_.restack_all_row_items(); - else - { - if (!ctrl_pressed) { - for (shared_ptr r : view_) - if (mouse_down_item_ != r) - r->select(false); - - if (mouse_down_item_) - show_popup(mouse_down_item_); - } - } - - dragging_ = false; -} - -void Header::mouseReleaseEvent(QMouseEvent *event) -{ - assert(event); - if (event->button() & Qt::LeftButton) - mouseLeftReleaseEvent(event); - - mouse_down_item_ = nullptr; -} - -void Header::mouseMoveEvent(QMouseEvent *event) -{ - assert(event); - mouse_point_ = event->pos(); - - if (!(event->buttons() & Qt::LeftButton)) - return; - - if ((event->pos() - mouse_down_point_).manhattanLength() < - QApplication::startDragDistance()) - return; - - // Check all the drag items share a common owner - RowItemOwner *item_owner = nullptr; - for (shared_ptr r : view_) - if (r->dragging()) { - if (!item_owner) - item_owner = r->owner(); - else if(item_owner != r->owner()) - return; - } - - if (!item_owner) - return; - - // Do the drag - dragging_ = true; - - const QPoint delta = event->pos() - mouse_down_point_; - - for (std::shared_ptr r : view_) - if (r->dragging()) { - r->drag_by(delta); - - // Ensure the trace is selected - r->select(); - } - - item_owner->restack_items(); - for (const auto &r : *item_owner) - r->animate_to_layout_v_offset(); - signals_moved(); - - update(); -} - void Header::contextMenuEvent(QContextMenuEvent *event) { const shared_ptr r = get_mouse_over_item(mouse_point_);