X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Flogicsignal.hpp;fp=pv%2Fviews%2Ftrace%2Flogicsignal.hpp;h=2f5c66baa219fb69dcb8e9e42e08de1c01ad1849;hp=0000000000000000000000000000000000000000;hb=1573bf16ba50d1c023ad3a9ce596f0ab6eaeacff;hpb=4c7a19d3d7049bcc9fb3185ce2bc91333a7ca9e1 diff --git a/pv/views/trace/logicsignal.hpp b/pv/views/trace/logicsignal.hpp new file mode 100644 index 0000000..2f5c66b --- /dev/null +++ b/pv/views/trace/logicsignal.hpp @@ -0,0 +1,155 @@ +/* + * This file is part of the PulseView project. + * + * Copyright (C) 2012 Joel Holdsworth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#ifndef PULSEVIEW_PV_VIEWS_TRACEVIEW_LOGICSIGNAL_HPP +#define PULSEVIEW_PV_VIEWS_TRACEVIEW_LOGICSIGNAL_HPP + +#include + +#include "signal.hpp" + +#include + +using std::pair; +using std::shared_ptr; +using std::vector; + +class QIcon; +class QToolBar; + +namespace sigrok { +class TriggerMatchType; +} + +namespace pv { + +namespace devices { +class Device; +} + +namespace data { +class Logic; +} + +namespace views { +namespace trace { + +class LogicSignal : public Signal +{ + Q_OBJECT + +public: + static const float Oversampling; + + static const QColor EdgeColour; + static const QColor HighColour; + static const QColor LowColour; + static const QColor SamplingPointColour; + + static const QColor SignalColours[10]; + + static QColor TriggerMarkerBackgroundColour; + static const int TriggerMarkerPadding; + static const char* TriggerMarkerIcons[8]; + + LogicSignal(pv::Session &session, + shared_ptr device, + shared_ptr base); + + virtual ~LogicSignal() = default; + + shared_ptr data() const; + + shared_ptr logic_data() const; + + /** + * Computes the vertical extents of the contents of this row item. + * @return A pair containing the minimum and maximum y-values. + */ + pair v_extents() const; + + /** + * Returns the offset to show the drag handle. + */ + int scale_handle_offset() const; + + /** + * Handles the scale handle being dragged to an offset. + * @param offset the offset the scale handle was dragged to. + */ + void scale_handle_dragged(int offset); + + /** + * Paints the mid-layer of the signal with a QPainter + * @param p the QPainter to paint into. + * @param pp the painting parameters object to paint with.. + */ + void paint_mid(QPainter &p, ViewItemPaintParams &pp); + + /** + * Paints the foreground layer of the signal with a QPainter + * @param p the QPainter to paint into. + * @param pp the painting parameters object to paint with. + */ + virtual void paint_fore(QPainter &p, ViewItemPaintParams &pp); + +private: + void paint_caps(QPainter &p, QLineF *const lines, + vector< pair > &edges, + bool level, double samples_per_pixel, double pixels_offset, + float x_offset, float y_offset); + + void init_trigger_actions(QWidget *parent); + + const vector get_trigger_types() const; + QAction* action_from_trigger_type(const sigrok::TriggerMatchType *type); + const sigrok::TriggerMatchType* trigger_type_from_action( + QAction *action); + void populate_popup_form(QWidget *parent, QFormLayout *form); + void modify_trigger(); + + static const QIcon* get_icon(const char *path); + static const QPixmap* get_pixmap(const char *path); + +private Q_SLOTS: + void on_trigger(); + +private: + int signal_height_; + + shared_ptr device_; + + const sigrok::TriggerMatchType *trigger_match_; + QToolBar *trigger_bar_; + QAction *trigger_none_; + QAction *trigger_rising_; + QAction *trigger_high_; + QAction *trigger_falling_; + QAction *trigger_low_; + QAction *trigger_change_; + + static QCache icon_cache_; + static QCache pixmap_cache_; +}; + +} // namespace trace +} // namespace views +} // namespace pv + +#endif // PULSEVIEW_PV_VIEWS_TRACEVIEW_LOGICSIGNAL_HPP