#ifndef PULSEVIEW_PV_VIEW_HEADERITEM_H
#define PULSEVIEW_PV_VIEW_HEADERITEM_H
+#include <memory>
+
+#include <QPropertyAnimation>
+
#include "selectableitem.h"
namespace pv {
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.
/**
* 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.
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
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