X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fview%2Fselectableitem.h;h=d815bc7007507a2bbdb2d58fc675221cd5918cb0;hb=f0c0b38f812bfbb2bb1978d40e2ce93f1da3f89d;hp=4bbd1f6993d6813ed6f7016b5029bdf083b46549;hpb=e0e90d8091d3e4f20c03de6015bcedc5e4568567;p=pulseview.git diff --git a/pv/view/selectableitem.h b/pv/view/selectableitem.h index 4bbd1f69..d815bc70 100644 --- a/pv/view/selectableitem.h +++ b/pv/view/selectableitem.h @@ -23,13 +23,82 @@ #include +#include + 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