X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fview.hpp;h=7fef8419e625232b7013eb4e4e84a7bbcae60af0;hp=e66f7d0e8bd8a35f6d6bcb5aa4b0a830d83ea9ee;hb=HEAD;hpb=fe68068b2f8f3ae69b762636e91de91e8996aa11 diff --git a/pv/views/trace/view.hpp b/pv/views/trace/view.hpp index e66f7d0e..7fef8419 100644 --- a/pv/views/trace/view.hpp +++ b/pv/views/trace/view.hpp @@ -17,17 +17,18 @@ * along with this program; if not, see . */ -#ifndef PULSEVIEW_PV_VIEWS_TRACEVIEW_VIEW_HPP -#define PULSEVIEW_PV_VIEWS_TRACEVIEW_VIEW_HPP +#ifndef PULSEVIEW_PV_VIEWS_TRACE_VIEW_HPP +#define PULSEVIEW_PV_VIEWS_TRACE_VIEW_HPP #include #include #include +#include #include -#include #include #include +#include #include #include @@ -42,8 +43,7 @@ #include "tracetreeitemowner.hpp" using std::list; -using std::unordered_map; -using std::unordered_set; +using std::map; using std::set; using std::shared_ptr; using std::vector; @@ -95,31 +95,36 @@ private: static const pv::util::Timestamp MinScale; static const int MaxScrollValue; + static const int ViewScrollMargin; static const int ScaleUnits[3]; public: - explicit View(Session &session, bool is_main_view=false, QWidget *parent = nullptr); + explicit View(Session &session, bool is_main_view=false, QMainWindow *parent = nullptr); ~View(); + virtual ViewType get_type() const; + /** * Resets the view to its default state after construction. It does however * not reset the signal bases or any other connections with the session. */ virtual void reset_view_state(); - Session& session(); - const Session& session() const; + Session& session(); // This method is needed for TraceTreeItemOwner, not ViewBase + const Session& session() const; // This method is needed for TraceTreeItemOwner, not ViewBase /** * Returns the signals contained in this view. */ - unordered_set< shared_ptr > signals() const; + vector< shared_ptr > signals() const; - virtual void clear_signals(); + shared_ptr get_signal_by_signalbase(shared_ptr base) const; - void add_signal(const shared_ptr signal); + virtual void clear_signalbases(); + virtual void add_signalbase(const shared_ptr signalbase); + virtual void remove_signalbase(const shared_ptr signalbase); #ifdef ENABLE_DECODE virtual void clear_decode_signals(); @@ -129,6 +134,8 @@ public: virtual void remove_decode_signal(shared_ptr signal); #endif + void remove_trace(shared_ptr trace); + shared_ptr get_signal_under_mouse_cursor() const; /** @@ -142,13 +149,13 @@ public: virtual const View* view() const; Viewport* viewport(); - const Viewport* viewport() const; + QAbstractScrollArea* scrollarea() const; + const Ruler* ruler() const; virtual void save_settings(QSettings &settings) const; - virtual void restore_settings(QSettings &settings); /** @@ -177,6 +184,8 @@ public: void reset_zero_position(); + pv::util::Timestamp zero_offset() const; + /** * Returns the vertical scroll offset. */ @@ -187,6 +196,16 @@ public: */ void set_v_offset(int offset); + /** + * Sets the visual h-offset. + */ + void set_h_offset(int offset); + + /** + * Gets the length of the horizontal scrollbar. + */ + int get_h_scrollbar_maximum() const; + /** * Returns the SI prefix to apply to the graticule time markings. */ @@ -236,6 +255,8 @@ public: void zoom_fit(bool gui_state); + virtual void focus_on_range(uint64_t start_sample, uint64_t end_sample); + /** * Sets the scale and offset. * @param scale The new view scale in seconds per pixel. @@ -243,33 +264,17 @@ public: */ void set_scale_offset(double scale, const pv::util::Timestamp& offset); - set< shared_ptr > get_visible_data() const; + vector< shared_ptr > get_visible_data() const; pair get_time_extents() const; - /** - * Enables or disables colored trace backgrounds. If they're not - * colored then they will use alternating colors. - */ - void enable_colored_bg(bool state); - /** * Returns true if the trace background should be drawn with a colored background. */ bool colored_bg() const; /** - * Enable or disable showing sampling points. - */ - void enable_show_sampling_points(bool state); - - /** - * Enable or disable showing the analog minor grid. - */ - void enable_show_analog_minor_grid(bool state); - - /** - * Returns true if cursors are displayed. false otherwise. + * Returns true if cursors are displayed, false otherwise. */ bool cursors_shown() const; @@ -278,10 +283,17 @@ public: */ void show_cursors(bool show = true); + /** + * Sets the cursors to the given offsets. + * You still have to call show_cursors() separately. + */ + void set_cursors(pv::util::Timestamp& first, pv::util::Timestamp& second); + /** * Moves the cursors to a convenient position in the view. + * You still have to call show_cursors() separately. */ - void centre_cursors(); + void center_cursors(); /** * Returns a reference to the pair of cursors. @@ -291,7 +303,7 @@ public: /** * Adds a new flag at a specified time. */ - void add_flag(const pv::util::Timestamp& time); + shared_ptr add_flag(const pv::util::Timestamp& time); /** * Removes a flag from the list. @@ -381,9 +393,7 @@ private: void adjust_top_margin(); void update_scroll(); - void reset_scroll(); - void set_scroll_default(); void determine_if_header_was_shrunk(); @@ -394,14 +404,12 @@ private: TraceTreeItemOwner* find_prevalent_trace_group( const shared_ptr &group, - const unordered_map, - shared_ptr > &signal_map); + const map, shared_ptr > &signal_map); static vector< shared_ptr > extract_new_traces_for_channels( const vector< shared_ptr > &channels, - const unordered_map, - shared_ptr > &signal_map, + const map, shared_ptr > &signal_map, set< shared_ptr > &add_list); void determine_time_unit(); @@ -412,6 +420,7 @@ private: void resizeEvent(QResizeEvent *event); + void update_view_range_metaobject() const; void update_hover_point(); public: @@ -421,13 +430,19 @@ public: void extents_changed(bool horz, bool vert); private Q_SLOTS: - void on_signal_name_changed(); void on_splitter_moved(); + void on_zoom_in_shortcut_triggered(); + void on_zoom_out_shortcut_triggered(); + void on_scroll_to_start_shortcut_triggered(); + void on_scroll_to_end_shortcut_triggered(); + void h_scroll_value_changed(int value); void v_scroll_value_changed(); + void on_grab_ruler(int ruler_id); + void signals_changed(); void capture_state_updated(int state); @@ -437,6 +452,8 @@ private Q_SLOTS: void on_settingViewTriggerIsZeroTime_changed(const QVariant new_value); + void on_create_marker_here(); + virtual void perform_delayed_view_update(); void process_sticky_events(); @@ -489,7 +506,14 @@ private: Header *header_; QSplitter *splitter_; - unordered_set< shared_ptr > signals_; + QShortcut *zoom_in_shortcut_, *zoom_in_shortcut_2_; + QShortcut *zoom_out_shortcut_, *zoom_out_shortcut_2_; + QShortcut *home_shortcut_, *end_shortcut_; + QShortcut *grab_ruler_left_shortcut_, *grab_ruler_right_shortcut_; + QShortcut *cancel_grab_shortcut_; + + mutable mutex signal_mutex_; + vector< shared_ptr > signals_; #ifdef ENABLE_DECODE vector< shared_ptr > decode_traces_; @@ -509,9 +533,11 @@ private: pv::util::Timestamp ruler_offset_; /// The offset of the zero point in seconds. pv::util::Timestamp zero_offset_; + /// Shows whether the user set a custom zero offset that we should keep + bool custom_zero_offset_set_; bool updating_scroll_; - bool settings_restored_; + bool restoring_state_; bool header_was_shrunk_; bool sticky_scrolling_; @@ -533,6 +559,7 @@ private: vector< shared_ptr > trigger_markers_; QWidget* hover_widget_; + TimeMarker* grabbed_widget_; QPoint hover_point_; shared_ptr signal_under_mouse_cursor_; uint16_t snap_distance_; @@ -543,22 +570,19 @@ private: // 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() + // The v offset to restore. See View::eventFilter() int saved_v_offset_; // These are used to determine whether the view was altered after acq started double scale_at_acq_start_; pv::util::Timestamp offset_at_acq_start_; - // Used to suppress performing a "zoom to fit" when the session stops. This - // is needed when the view's settings are restored before acquisition ends. - // In that case we want to keep the restored settings, not have a "zoom to fit" - // mess them up. - bool suppress_zoom_to_fit_after_acq_; + // X coordinate of mouse cursor where the user clicked to open a context menu + uint32_t context_menu_x_pos_; }; } // namespace trace } // namespace views } // namespace pv -#endif // PULSEVIEW_PV_VIEWS_TRACEVIEW_VIEW_HPP +#endif // PULSEVIEW_PV_VIEWS_TRACE_VIEW_HPP