X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;ds=sidebyside;f=pv%2Fview%2Fview.hpp;h=e083fa13fdc1899d31da1ad6fe5978ebc2bb5483;hb=6f925ba9d6faf1077b73c5a5808259576081716a;hp=95e518a274db8c11314ca22808bbea6fd0831108;hpb=af503b104d890a357c736c678bb00296d889c090;p=pulseview.git
diff --git a/pv/view/view.hpp b/pv/view/view.hpp
index 95e518a..e083fa1 100644
--- a/pv/view/view.hpp
+++ b/pv/view/view.hpp
@@ -14,12 +14,11 @@
* 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, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ * along with this program; if not, see .
*/
-#ifndef PULSEVIEW_PV_VIEW_VIEW_HPP
-#define PULSEVIEW_PV_VIEW_VIEW_HPP
+#ifndef PULSEVIEW_PV_VIEWS_TRACEVIEW_VIEW_HPP
+#define PULSEVIEW_PV_VIEWS_TRACEVIEW_VIEW_HPP
#include
@@ -34,12 +33,20 @@
#include
#include
+#include
#include
#include "cursorpair.hpp"
#include "flag.hpp"
#include "tracetreeitemowner.hpp"
+using std::list;
+using std::unordered_map;
+using std::unordered_set;
+using std::set;
+using std::shared_ptr;
+using std::vector;
+
namespace sigrok {
class ChannelGroup;
}
@@ -48,15 +55,29 @@ namespace pv {
class Session;
-namespace view {
+namespace views {
+
+namespace TraceView {
class CursorHeader;
+class DecodeTrace;
class Header;
class Ruler;
+class Signal;
class Trace;
class Viewport;
+class TriggerMarker;
+
+class CustomAbstractScrollArea : public QAbstractScrollArea {
+ Q_OBJECT
+
+public:
+ CustomAbstractScrollArea(QWidget *parent = 0);
+ void setViewportMargins(int left, int top, int right, int bottom);
+ bool viewportEvent(QEvent *event);
+};
-class View : public QAbstractScrollArea, public TraceTreeItemOwner {
+class View : public ViewBase, public TraceTreeItemOwner {
Q_OBJECT
private:
@@ -75,29 +96,50 @@ private:
static const int ScaleUnits[3];
public:
- explicit View(Session &session, QWidget *parent = 0);
+ explicit View(Session &session, bool is_main_view=false, QWidget *parent = 0);
Session& session();
const Session& session() const;
+ /**
+ * Returns the signals contained in this view.
+ */
+ unordered_set< shared_ptr > signals() const;
+
+ virtual void clear_signals();
+
+ virtual void add_signal(const shared_ptr signal);
+
+#ifdef ENABLE_DECODE
+ virtual void clear_decode_signals();
+
+ virtual void add_decode_signal(shared_ptr signalbase);
+
+ virtual void remove_decode_signal(shared_ptr signalbase);
+#endif
+
/**
* Returns the view of the owner.
*/
- virtual pv::view::View* view();
+ virtual View* view();
/**
* Returns the view of the owner.
*/
- virtual const pv::view::View* view() const;
+ virtual const View* view() const;
Viewport* viewport();
const Viewport* viewport() const;
+ virtual void save_settings(QSettings &settings) const;
+
+ virtual void restore_settings(QSettings &settings);
+
/**
* Gets a list of time markers.
*/
- std::vector< std::shared_ptr > time_items() const;
+ vector< shared_ptr > time_items() const;
/**
* Returns the view time scale in seconds per pixel.
@@ -159,16 +201,20 @@ public:
*/
void set_scale_offset(double scale, const pv::util::Timestamp& offset);
- std::set< std::shared_ptr >
- get_visible_data() const;
+ set< shared_ptr > get_visible_data() const;
- std::pair get_time_extents() const;
+ pair get_time_extents() const;
/**
- * Enables or disables sticky scrolling, i.e. the view always shows
- * the most recent samples when capturing data.
+ * Enables or disables coloured trace backgrounds. If they're not
+ * coloured then they will use alternating colors.
*/
- void enable_sticky_scrolling(bool state);
+ void enable_coloured_bg(bool state);
+
+ /**
+ * Enable or disable showing sampling points.
+ */
+ void enable_show_sampling_points(bool state);
/**
* Returns true if cursors are displayed. false otherwise.
@@ -188,7 +234,7 @@ public:
/**
* Returns a reference to the pair of cursors.
*/
- std::shared_ptr cursors() const;
+ shared_ptr cursors() const;
/**
* Adds a new flag at a specified time.
@@ -198,17 +244,15 @@ public:
/**
* Removes a flag from the list.
*/
- void remove_flag(std::shared_ptr flag);
+ void remove_flag(shared_ptr flag);
/**
* Gets the list of flags.
*/
- std::vector< std::shared_ptr > flags() const;
+ vector< shared_ptr > flags() const;
const QPoint& hover_point() const;
- void update_viewport();
-
void restack_all_trace_tree_items();
Q_SIGNALS:
@@ -238,6 +282,9 @@ Q_SIGNALS:
/// Emitted when the time_unit changed.
void time_unit_changed();
+public Q_SLOTS:
+ void trigger_event(util::Timestamp location);
+
private:
void get_scroll_layout(double &length, pv::util::Timestamp &offset) const;
@@ -257,42 +304,29 @@ private:
void update_scroll();
- void update_layout();
+ void reset_scroll();
- /**
- * Satisifies TraceTreeItem functionality.
- * @param p the QPainter to paint into.
- * @param rect the rectangle of the header area.
- * @param hover true if the label is being hovered over by the mouse.
- */
- void paint_label(QPainter &p, const QRect &rect, bool hover);
+ void set_scroll_default();
- /**
- * Computes the outline rectangle of a label.
- * @param rect the rectangle of the header area.
- * @return Returns the rectangle of the signal label.
- */
- QRectF label_rect(const QRectF &rect);
+ void update_layout();
TraceTreeItemOwner* find_prevalent_trace_group(
- const std::shared_ptr &group,
- const std::unordered_map,
- std::shared_ptr > &signal_map);
+ const shared_ptr &group,
+ const unordered_map,
+ shared_ptr > &signal_map);
- static std::vector< std::shared_ptr >
+ static vector< shared_ptr >
extract_new_traces_for_channels(
- const std::vector< std::shared_ptr > &channels,
- const std::unordered_map,
- std::shared_ptr > &signal_map,
- std::set< std::shared_ptr > &add_list);
+ const vector< shared_ptr > &channels,
+ const unordered_map,
+ shared_ptr > &signal_map,
+ set< shared_ptr > &add_list);
void determine_time_unit();
bool eventFilter(QObject *object, QEvent *event);
- bool viewportEvent(QEvent *e);
-
- void resizeEvent(QResizeEvent *e);
+ void resizeEvent(QResizeEvent *event);
public:
void row_item_appearance_changed(bool label, bool content);
@@ -352,12 +386,18 @@ private Q_SLOTS:
void set_time_unit(pv::util::TimeUnit time_unit);
private:
- Session &session_;
-
Viewport *viewport_;
Ruler *ruler_;
Header *header_;
+ unordered_set< shared_ptr > signals_;
+
+#ifdef ENABLE_DECODE
+ vector< shared_ptr > decode_traces_;
+#endif
+
+ CustomAbstractScrollArea scrollarea_;
+
/// The view time scale in seconds per pixel.
double scale_;
@@ -366,6 +406,7 @@ private:
bool updating_scroll_;
bool sticky_scrolling_;
+ bool coloured_bg_;
bool always_zoom_to_fit_;
QTimer delayed_view_updater_;
@@ -375,18 +416,29 @@ private:
util::TimeUnit time_unit_;
bool show_cursors_;
- std::shared_ptr cursors_;
+ shared_ptr cursors_;
- std::list< std::shared_ptr > flags_;
+ list< shared_ptr > flags_;
char next_flag_text_;
+ vector< shared_ptr > trigger_markers_;
+
QPoint hover_point_;
unsigned int sticky_events_;
QTimer lazy_event_handler_;
+
+ // This is true when the defaults couldn't be set due to insufficient info
+ bool scroll_needs_defaults_;
+
+ // A nonzero value indicates the v offset to restore. See View::resizeEvent()
+ int saved_v_offset_;
+
+ bool size_finalized_;
};
-} // namespace view
+} // namespace TraceView
+} // namespace views
} // namespace pv
-#endif // PULSEVIEW_PV_VIEW_VIEW_HPP
+#endif // PULSEVIEW_PV_VIEWS_TRACEVIEW_VIEW_HPP