Make member variable underscores a suffix instead of a prefix
[pulseview.git] / pv / view / rowitem.h
index fb09edaa3cc76b52e00f3bca94c613efc7de8fbe..db6e580d0a221c44e848a6f527c45036cb9e6b2e 100644 (file)
 #ifndef PULSEVIEW_PV_VIEW_HEADERITEM_H
 #define PULSEVIEW_PV_VIEW_HEADERITEM_H
 
+#include <memory>
+
+#include <QPropertyAnimation>
+
 #include "selectableitem.h"
 
 namespace pv {
@@ -28,8 +32,14 @@ namespace view {
 
 class RowItemOwner;
 
-class RowItem : public SelectableItem
+class RowItem : public SelectableItem,
+       public std::enable_shared_from_this<pv::view::RowItem>
 {
+       Q_OBJECT
+       Q_PROPERTY(int visual_v_offset
+               READ visual_v_offset
+               WRITE set_visual_v_offset)
+
 public:
        /**
         * Constructor.
@@ -44,12 +54,33 @@ public:
        /**
         * Gets the vertical layout offset of this signal.
         */
-       int v_offset() const;
+       int layout_v_offset() const;
 
        /**
         * Sets the vertical layout offset of this signal.
         */
-       void set_v_offset(int v_offset);
+       void set_layout_v_offset(int v_offset);
+
+       /**
+        * Gets the vertical visual offset of this signal.
+        */
+       int visual_v_offset() const;
+
+       /**
+        * Sets the vertical visual offset of this signal.
+        */
+       void set_visual_v_offset(int v_offset);
+
+       /**
+        * Sets the visual and layout offset of this signal.
+        */
+       void force_to_v_offset(int v_offset);
+
+       /**
+        * Begins an animation that will animate the visual offset toward
+        * the layout offset.
+        */
+       void animate_to_layout_v_offset();
 
        /**
         * Gets the owner this trace in the view trace hierachy.
@@ -63,9 +94,20 @@ public:
        void set_owner(pv::view::RowItemOwner *owner);
 
        /**
-        * Gets the y-offset of the axis.
+        * Gets the visual y-offset of the axis.
         */
-       int get_y() const;
+       int get_visual_y() const;
+
+       /**
+        * Gets the drag point of the row item.
+        */
+       QPoint point() const;
+
+       /**
+        * Computes the vertical extents of the contents of this row item.
+        * @return A pair containing the minimum and maximum y-values.
+        */
+       virtual std::pair<int, int> v_extents() const = 0;
 
        /**
         * Paints the background layer of the trace with a QPainter
@@ -106,15 +148,19 @@ public:
         *      area.
         * @return Returns the rectangle of the signal label.
         */
-       virtual QRectF label_rect(int right) = 0;
+       virtual QRectF label_rect(int right) const = 0;
 
 public:
        virtual void hover_point_changed();
 
 protected:
-       pv::view::RowItemOwner *_owner;
+       pv::view::RowItemOwner *owner_;
+
+       int layout_v_offset_;
+       int visual_v_offset_;
 
-       int _v_offset;
+private:
+       QPropertyAnimation v_offset_animation_;
 };
 
 } // namespace view