#include <list>
+#include <QPen>
+
class QAction;
+class QMenu;
+class QWidget;
namespace pv {
+
+namespace widgets {
+class Popup;
+}
+
namespace view {
-class SelectableItem
+class SelectableItem : public QObject
{
+ Q_OBJECT
+
+private:
+ static const int HighlightRadius;
+
+public:
+ SelectableItem();
+
+public:
+ /**
+ * Returns true if the item has been selected by the user.
+ */
+ bool selected() const;
+
+ /**
+ * Selects or deselects the signal.
+ */
+ void select(bool select = true);
+
+ /**
+ * Returns true if the item is being dragged.
+ */
+ bool dragging() const;
+
+ /**
+ * Retunrns the current drag point.
+ */
+ QPoint drag_point() const;
+
+ /**
+ * Sets this item into the dragged state.
+ */
+ void drag();
+
+ /**
+ * Sets this item into the un-dragged state.
+ */
+ void drag_release();
+
+ /**
+ * Get the drag point.
+ */
+ virtual QPoint point() const = 0;
+
+public:
+ virtual QMenu* create_context_menu(QWidget *parent);
+
+ virtual pv::widgets::Popup* create_popup(QWidget *parent) = 0;
+
+ virtual void delete_pressed();
+
+protected:
+ static QPen highlight_pen();
+
+protected:
+ QWidget *_context_parent;
+
+private:
+ bool _selected;
+ QPoint _drag_point;
};
} // namespace view