X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fsignal.h;h=eeef55389eb79384f5f84ccaa9542bb631b28999;hb=c0f868521a211747f89ef217ae63404f373d952b;hp=8adee96f9ae765b07d296d7b8b504e260df59578;hpb=8d634081d8b0cc741dd34d8c646474ff6754aea8;p=pulseview.git diff --git a/pv/view/signal.h b/pv/view/signal.h index 8adee96..eeef553 100644 --- a/pv/view/signal.h +++ b/pv/view/signal.h @@ -24,24 +24,40 @@ #include #include +#include #include +#include #include #include +#include #include +#include + +#include "selectableitem.h" + namespace pv { -namespace view { +class SigSession; + +namespace data { class SignalData; +} -class Signal +namespace view { + +class Signal : public SelectableItem { + Q_OBJECT + private: static const int LabelHitPadding; + static const QPen SignalAxisPen; + protected: - Signal(QString name); + Signal(pv::SigSession &session, const sr_probe *const probe); public: /** @@ -64,33 +80,62 @@ public: */ void set_colour(QColor colour); + /** + * Gets the vertical layout offset of this signal. + */ + int get_v_offset() const; + + /** + * Sets the vertical layout offset of this signal. + */ + void set_v_offset(int v_offset); + /** * Paints the signal with a QPainter * @param p the QPainter to paint into. - * @param rect the rectangular area to draw the trace into. + * @param y the y-coordinate to draw the signal at + * @param left the x-coordinate of the left edge of the signal + * @param right the x-coordinate of the right edge of the signal * @param scale the scale in seconds per pixel. * @param offset the time to show at the left hand edge of * the view in seconds. **/ - virtual void paint(QPainter &p, const QRect &rect, double scale, - double offset) = 0; - + virtual void paint(QPainter &p, int y, int left, int right, + double scale, double offset) = 0; /** * Paints the signal label into a QGLWidget. * @param p the QPainter to paint into. - * @param rect the rectangular area to draw the label into. + * @param y the y-coordinate of the signal. + * @param right the x-coordinate of the right edge of the header + * area. * @param hover true if the label is being hovered over by the mouse. */ - virtual void paint_label(QPainter &p, const QRect &rect, + virtual void paint_label(QPainter &p, int y, int right, bool hover); /** * Determines if a point is in the header label rect. - * @param rect the rectangular area to draw the label into. + * @param y the y-coordinate of the signal. + * @param left the x-coordinate of the left edge of the header + * area. + * @param right the x-coordinate of the right edge of the header + * area. * @param point the point to test. */ - bool pt_in_label_rect(const QRect &rect, const QPoint &point); + bool pt_in_label_rect(int y, int left, int right, + const QPoint &point); + +protected: + + /** + * Paints a zero axis across the viewport. + * @param p the QPainter to paint into. + * @param y the y-offset of the axis. + * @param left the x-coordinate of the left edge of the view. + * @param right the x-coordinate of the right edge of the view. + */ + void paint_axis(QPainter &p, int y, int left, int right); private: @@ -102,23 +147,32 @@ private: /** * Computes the outline rectangle of a label. * @param p the QPainter to lay out text with. - * @param rect The rectangle of the signal header. + * @param y the y-coordinate of the signal. + * @param right the x-coordinate of the right edge of the header + * area. * @return Returns the rectangle of the signal label. */ - QRectF get_label_rect(const QRect &rect); + QRectF get_label_rect(int y, int right); -protected: - /** - * When painting into the rectangle, calculate the y - * offset of the zero point. - **/ - virtual int get_nominal_offset(const QRect &rect) const = 0; +private slots: + void on_text_changed(const QString &text); + +signals: + void text_changed(); protected: + pv::SigSession &_session; + const sr_probe *const _probe; + QString _name; QColor _colour; + int _v_offset; QSizeF _text_size; + + QWidgetAction _name_action; + QComboBox _name_widget; + bool _updating_name_widget; }; } // namespace view