X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fview.hpp;h=28c94e5285d1dfc6cc21c06daa618138f3723bc8;hp=fa54c068965d7245a17fb69fa3af308a03d50df9;hb=ffc00fdd5946593ad2a587078fd4ee9ba0a507ec;hpb=526c8c00a61aa5f6ac7e3ee56991db957b45828d diff --git a/pv/views/trace/view.hpp b/pv/views/trace/view.hpp index fa54c068..28c94e52 100644 --- a/pv/views/trace/view.hpp +++ b/pv/views/trace/view.hpp @@ -37,6 +37,7 @@ #include "cursorpair.hpp" #include "flag.hpp" +#include "trace.hpp" #include "tracetreeitemowner.hpp" using std::list; @@ -150,11 +151,17 @@ public: double scale() const; /** - * Returns the time offset of the left edge of the view in - * seconds. + * Returns the internal view version of the time offset of the left edge + * of the view in seconds. */ const pv::util::Timestamp& offset() const; + /** + * Returns the ruler version of the time offset of the left edge + * of the view in seconds. + */ + const pv::util::Timestamp& ruler_offset() const; + /** * Returns the vertical scroll offset. */ @@ -190,6 +197,20 @@ public: */ unsigned int depth() const; + /** + * Returns the currently displayed segment, starting at 0. + */ + uint32_t current_segment() const; + + /** + * Returns whether the currently shown segment can be influenced + * (selected) or not. + */ + bool segment_is_selectable() const; + + Trace::SegmentDisplayMode segment_display_mode() const; + void set_segment_display_mode(Trace::SegmentDisplayMode mode); + void zoom(double steps); void zoom(double steps, int offset); @@ -295,6 +316,13 @@ Q_SIGNALS: /// Emitted when the time_unit changed. void time_unit_changed(); + /// Emitted when the currently selected segment changed + void segment_changed(int segment_id); + + /// Emitted when the multi-segment display mode changed + /// @param mode is a value of Trace::SegmentDisplayMode + void segment_display_mode_changed(int mode, bool segment_selectable); + public Q_SLOTS: void trigger_event(util::Timestamp location); @@ -323,9 +351,9 @@ private: void set_scroll_default(); - bool header_was_shrunk() const; + void determine_if_header_was_shrunk(); - void expand_header_to_fit(); + void resize_header_to_fit(); void update_layout(); @@ -357,6 +385,7 @@ public: private Q_SLOTS: + void on_signal_name_changed(); void on_splitter_moved(); void h_scroll_value_changed(int value); @@ -365,6 +394,8 @@ private Q_SLOTS: void signals_changed(); void capture_state_updated(int state); + void on_new_segment(int new_segment_id); + void on_segment_completed(int new_segment_id); void on_segment_changed(int segment); virtual void perform_delayed_view_update(); @@ -372,7 +403,7 @@ private Q_SLOTS: void process_sticky_events(); /** - * Sets the 'offset_' member and emits the 'offset_changed' + * Sets the 'offset_' and ruler_offset_ members and emits the 'offset_changed' * signal if needed. */ void set_offset(const pv::util::Timestamp& offset); @@ -407,6 +438,11 @@ private Q_SLOTS: */ void set_time_unit(pv::util::TimeUnit time_unit); + /** + * Sets the current segment with the first segment starting at 0. + */ + void set_current_segment(uint32_t segment_id); + private: CustomScrollArea *scrollarea_; Viewport *viewport_; @@ -420,17 +456,22 @@ private: vector< shared_ptr > decode_traces_; #endif - /// The ID of the currently displayed segment - int current_segment_; + Trace::SegmentDisplayMode segment_display_mode_; + + /// Signals whether the user can change the currently shown segment. + bool segment_selectable_; /// The view time scale in seconds per pixel. double scale_; - /// The view time offset in seconds. + /// The internal view version of the time offset in seconds. pv::util::Timestamp offset_; + /// The ruler version of the time offset in seconds. + pv::util::Timestamp ruler_offset_; bool updating_scroll_; bool settings_restored_; + bool header_was_shrunk_; bool sticky_scrolling_; bool coloured_bg_;