]> sigrok.org Git - pulseview.git/commitdiff
Fix item dragging
authorSoeren Apel <redacted>
Mon, 20 Aug 2018 19:19:18 +0000 (21:19 +0200)
committerUwe Hermann <redacted>
Tue, 21 Aug 2018 10:02:38 +0000 (12:02 +0200)
pv/views/trace/trace.cpp
pv/views/trace/trace.hpp
pv/views/trace/triggermarker.cpp
pv/views/trace/triggermarker.hpp
pv/views/trace/viewitem.cpp
pv/views/trace/viewitem.hpp
pv/views/trace/viewport.cpp
pv/views/trace/viewport.hpp
pv/views/trace/viewwidget.cpp
pv/views/trace/viewwidget.hpp

index fe5cc281d46984c27aa331910f84e926b11f2dee..8511f7507cdec68e759b9c32d5af33e8c958cccc 100644 (file)
@@ -87,11 +87,15 @@ bool Trace::is_selectable(QPoint pos) const
        return (pos.x() <= view->header_width());
 }
 
-bool Trace::is_draggable() const
+bool Trace::is_draggable(QPoint pos) const
 {
        // While the header label that belongs to this trace is draggable,
-       // the trace itself shall not be
-       return false;
+       // the trace itself shall not be. Hence we return true if the header
+       // was clicked and false if the trace area was clicked
+       const View *view = owner_->view();
+       assert(view);
+
+       return (pos.x() <= view->header_width());
 }
 
 void Trace::set_segment_display_mode(SegmentDisplayMode mode)
index 4124ece2e3705415fff359214d3184746293c124..0b4ecce49484af09e8b60938afc5c3069cb3d936 100644 (file)
@@ -110,7 +110,7 @@ public:
        /**
         * Returns true if the item may be dragged/moved.
         */
-       virtual bool is_draggable() const;
+       virtual bool is_draggable(QPoint pos) const;
 
        /**
         * Configures the segment display mode to use.
index 7ef5454a8a5ccb9aa3d64c500f0ca01f598e3368..3311f3502ba2d92540939a3ad9c5102550d07dda 100644 (file)
@@ -43,8 +43,9 @@ bool TriggerMarker::enabled() const
        return true;
 }
 
-bool TriggerMarker::is_draggable() const
+bool TriggerMarker::is_draggable(QPoint pos) const
 {
+       (void)pos;
        return false;
 }
 
index 9137f28c1f5b96886c032709bd6d3d32caf06580..a97fefb0d3faf8c571e347f6b7ddfa240c31af39 100644 (file)
@@ -22,6 +22,8 @@
 
 #include "timeitem.hpp"
 
+#include <QPoint>
+
 namespace pv {
 namespace views {
 namespace trace {
@@ -58,7 +60,7 @@ public:
        /**
          Returns true if the item may be dragged/moved.
         */
-       bool is_draggable() const override;
+       bool is_draggable(QPoint pos) const override;
 
        /**
         * Sets the time of the marker.
index 3627d8ca6f1bcefb160b84d609f0b0fae6c9564d..2dd8ade8c1fddb03c718c79179c4161c278dc461 100644 (file)
@@ -55,8 +55,9 @@ void ViewItem::select(bool select)
        selected_ = select;
 }
 
-bool ViewItem::is_draggable() const
+bool ViewItem::is_draggable(QPoint pos) const
 {
+       (void)pos;
        return true;
 }
 
@@ -67,8 +68,7 @@ bool ViewItem::dragging() const
 
 void ViewItem::drag()
 {
-       if (is_draggable())
-               drag_point_ = drag_point(QRect());
+       drag_point_ = drag_point(QRect());
 }
 
 void ViewItem::drag_release()
index 8421d8614914078fc61b7c3a26a3a647f57f99c4..53ed2a60cbe891c578ba30c65eb50adb5da34c48 100644 (file)
@@ -77,7 +77,7 @@ public:
        /**
         * Returns true if the item may be dragged/moved.
         */
-       virtual bool is_draggable() const;
+       virtual bool is_draggable(QPoint pos) const;
 
        /**
         * Returns true if the item is being dragged.
index e9a9df0c89b4fb4e934a24f33f0ac0f6c15df7eb..e5fb607639eac3b6ae7a2985c1c7735988c16f40 100644 (file)
@@ -64,9 +64,9 @@ shared_ptr<ViewItem> Viewport::get_mouse_over_item(const QPoint &pt)
        return nullptr;
 }
 
-void Viewport::item_hover(const shared_ptr<ViewItem> &item)
+void Viewport::item_hover(const shared_ptr<ViewItem> &item, QPoint pos)
 {
-       if (item && item->is_draggable())
+       if (item && item->is_draggable(pos))
                setCursor(dynamic_pointer_cast<RowItem>(item) ?
                        Qt::SizeVerCursor : Qt::SizeHorCursor);
        else
index a49084b43ebe901f6e9cd7bb6ab2ad199e41e580..1b77a0d0699e7264170f869f39097216d923103b 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <boost/optional.hpp>
 
+#include <QPoint>
 #include <QTimer>
 #include <QTouchEvent>
 
@@ -62,7 +63,7 @@ private:
         * @param item The item that is being hovered over, or @c nullptr
         * if no view item is being hovered over.
         */
-       void item_hover(const shared_ptr<ViewItem> &item);
+       void item_hover(const shared_ptr<ViewItem> &item, QPoint pos);
 
        /**
         * Sets this item into the dragged state.
index a14c4fd224395eb95bc8c46d97766051a7ec0e51..c3461614ab637db740659666482d6b12ee24445c 100644 (file)
@@ -50,9 +50,10 @@ void ViewWidget::clear_selection()
                i->select(false);
 }
 
-void ViewWidget::item_hover(const shared_ptr<ViewItem> &item)
+void ViewWidget::item_hover(const shared_ptr<ViewItem> &item, QPoint pos)
 {
        (void)item;
+       (void)pos;
 }
 
 void ViewWidget::item_clicked(const shared_ptr<ViewItem> &item)
@@ -180,7 +181,7 @@ void ViewWidget::mouse_left_press_event(QMouseEvent *event)
        bool item_dragged = false;
        const auto items = this->items();
        for (auto &i : items)
-               if (i->selected()) {
+               if (i->selected() && i->is_draggable(event->pos())) {
                        item_dragged = true;
                        i->drag();
                }
@@ -281,7 +282,7 @@ void ViewWidget::mouseMoveEvent(QMouseEvent *event)
        mouse_point_ = event->pos();
 
        if (!event->buttons())
-               item_hover(get_mouse_over_item(event->pos()));
+               item_hover(get_mouse_over_item(event->pos()), event->pos());
        else if (event->buttons() & Qt::LeftButton) {
                if (!item_dragging_) {
                        if ((event->pos() - mouse_down_point_).manhattanLength() <
index e4fb73c8255debedb73963acddc0984e635a0433..f4928e67f885bcd948c10ae0b72a7da03bff5d5b 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <memory>
 
+#include <QPoint>
 #include <QWidget>
 
 using std::shared_ptr;
@@ -49,7 +50,7 @@ protected:
         * if no view item is being hovered over.
         * @remarks the default implementation does nothing.
         */
-       virtual void item_hover(const shared_ptr<ViewItem> &item);
+       virtual void item_hover(const shared_ptr<ViewItem> &item, QPoint pos);
 
        /**
         * Indicates the event an a view item has been clicked.