X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fview.hpp;h=0ba23bb6cb4d8af09e48b3637a4a38b9b6e4ff85;hp=a351fd9306332f0169e917c16c6bbf2246a07368;hb=db29815836442ac83d453b3de2bf1755e9fd89f0;hpb=d0c0573b3ee694827a747727f862c5f91736ca05 diff --git a/pv/views/trace/view.hpp b/pv/views/trace/view.hpp index a351fd93..0ba23bb6 100644 --- a/pv/views/trace/view.hpp +++ b/pv/views/trace/view.hpp @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -64,12 +65,10 @@ namespace views { namespace trace { -class CursorHeader; class DecodeTrace; class Header; class Ruler; class Signal; -class Trace; class Viewport; class TriggerMarker; @@ -101,12 +100,20 @@ private: 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(); - Session& session(); - const Session& session() const; + 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(); // 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. @@ -125,6 +132,8 @@ public: virtual void remove_decode_signal(shared_ptr signal); #endif + shared_ptr get_signal_under_mouse_cursor() const; + /** * Returns the view of the owner. */ @@ -139,6 +148,8 @@ public: const Viewport* viewport() const; + const Ruler* ruler() const; + virtual void save_settings(QSettings &settings) const; virtual void restore_settings(QSettings &settings); @@ -165,10 +176,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. */ @@ -179,6 +192,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. */ @@ -228,8 +251,6 @@ public: void zoom_fit(bool gui_state); - void zoom_one_to_one(); - /** * Sets the scale and offset. * @param scale The new view scale in seconds per pixel. @@ -242,25 +263,9 @@ public: pair get_time_extents() const; /** - * Enables or disables coloured trace backgrounds. If they're not - * coloured then they will use alternating colors. - */ - void enable_coloured_bg(bool state); - - /** - * Returns true if the trace background should be drawn with a coloured background. + * Returns true if the trace background should be drawn with a colored background. */ - bool coloured_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); + bool colored_bg() const; /** * Returns true if cursors are displayed. false otherwise. @@ -272,6 +277,11 @@ public: */ void show_cursors(bool show = true); + /** + * Sets the cursors to the given offsets. You will 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. */ @@ -285,7 +295,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. @@ -298,13 +308,25 @@ 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 + * is useful for e.g. the "snap to edge" functionality. + * + * @param p The current position of the mouse cursor + * @return The sample number of the nearest level change or -1 if none + */ + int64_t get_nearest_level_change(const QPoint &p); void restack_all_trace_tree_items(); + int header_width() const; + 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(); @@ -337,6 +359,9 @@ Q_SIGNALS: /// @param mode is a value of Trace::SegmentDisplayMode void segment_display_mode_changed(int mode, bool segment_selectable); + /// Emitted when the cursors are shown/hidden + void cursor_state_changed(bool show); + public Q_SLOTS: void trigger_event(int segment_id, util::Timestamp location); @@ -387,6 +412,8 @@ private: bool eventFilter(QObject *object, QEvent *event); + virtual void contextMenuEvent(QContextMenuEvent *event); + void resizeEvent(QResizeEvent *event); void update_hover_point(); @@ -402,6 +429,11 @@ 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(); @@ -466,6 +498,10 @@ 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_; + unordered_set< shared_ptr > signals_; #ifdef ENABLE_DECODE @@ -484,13 +520,15 @@ 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_; bool updating_scroll_; bool settings_restored_; bool header_was_shrunk_; bool sticky_scrolling_; - bool coloured_bg_; + bool colored_bg_; bool always_zoom_to_fit_; pv::util::Timestamp tick_period_; @@ -507,7 +545,10 @@ private: vector< shared_ptr > trigger_markers_; + QWidget* hover_widget_; QPoint hover_point_; + shared_ptr signal_under_mouse_cursor_; + uint16_t snap_distance_; unsigned int sticky_events_; QTimer lazy_event_handler_;