X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fview.hpp;h=bf8b64325feef171b3c7fb17b01dff461985284f;hb=6381b375ae391a79ab50f1f5dcbe0014ff9bd46c;hp=4bde31d6dd17e3f6a5dd417a3397ebb98a3ded77;hpb=f6b6c9bf50999dc99f9517318ffd3114cae4960f;p=pulseview.git diff --git a/pv/views/trace/view.hpp b/pv/views/trace/view.hpp index 4bde31d6..bf8b6432 100644 --- a/pv/views/trace/view.hpp +++ b/pv/views/trace/view.hpp @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -95,28 +96,33 @@ 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; + shared_ptr get_signal_by_signalbase(shared_ptr base) const; + virtual void clear_signals(); void add_signal(const shared_ptr signal); @@ -142,9 +148,12 @@ 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); @@ -171,10 +180,12 @@ public: */ const pv::util::Timestamp& ruler_offset() const; - void set_zero_position(pv::util::Timestamp& position); + void set_zero_position(const pv::util::Timestamp& position); void reset_zero_position(); + pv::util::Timestamp zero_offset() const; + /** * Returns the vertical scroll offset. */ @@ -185,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. */ @@ -245,29 +266,13 @@ public: 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; @@ -276,10 +281,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. @@ -289,7 +301,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. @@ -302,6 +314,7 @@ public: vector< shared_ptr > flags() const; const QPoint& hover_point() const; + const QWidget* hover_widget() const; /** * Determines the closest level change (i.e. edge) to a given point, which @@ -319,7 +332,7 @@ public: void on_setting_changed(const QString &key, const QVariant &value); Q_SIGNALS: - void hover_point_changed(const QPoint &hp); + void hover_point_changed(const QWidget* widget, const QPoint &hp); void selection_changed(); @@ -418,13 +431,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); @@ -486,6 +505,12 @@ private: Header *header_; QSplitter *splitter_; + 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_; + unordered_set< shared_ptr > signals_; #ifdef ENABLE_DECODE @@ -504,6 +529,10 @@ private: pv::util::Timestamp offset_; /// The ruler version of the time offset in seconds. 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_; @@ -527,6 +556,8 @@ 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_;