X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fview.hpp;h=7e1122a44aaabab919aa64783eff1d707ef6ee19;hp=9529e7a3fee25a3c057a76c5c1c76a5ebc0c4d08;hb=581724de334181fc5338f1efa87954264cf90520;hpb=451dc5f33fbc4f559881acdf338c476a976fcbf2;ds=sidebyside diff --git a/pv/views/trace/view.hpp b/pv/views/trace/view.hpp index 9529e7a3..7e1122a4 100644 --- a/pv/views/trace/view.hpp +++ b/pv/views/trace/view.hpp @@ -31,8 +31,9 @@ #include #include -#include +#include #include +#include #include #include "cursorpair.hpp" @@ -63,12 +64,10 @@ namespace views { namespace trace { -class CursorHeader; class DecodeTrace; class Header; class Ruler; class Signal; -class Trace; class Viewport; class TriggerMarker; @@ -81,7 +80,7 @@ public: bool viewportEvent(QEvent *event); }; -class View : public ViewBase, public TraceTreeItemOwner +class View : public ViewBase, public TraceTreeItemOwner, public GlobalSettingsInterface { Q_OBJECT @@ -102,6 +101,14 @@ private: public: explicit View(Session &session, bool is_main_view=false, QWidget *parent = nullptr); + ~View(); + + /** + * 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; @@ -122,6 +129,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. */ @@ -136,6 +145,8 @@ public: const Viewport* viewport() const; + const Ruler* ruler() const; + virtual void save_settings(QSettings &settings) const; virtual void restore_settings(QSettings &settings); @@ -225,8 +236,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. @@ -239,15 +248,15 @@ public: pair get_time_extents() const; /** - * Enables or disables coloured trace backgrounds. If they're not - * coloured then they will use alternating colors. + * Enables or disables colored trace backgrounds. If they're not + * colored then they will use alternating colors. */ - void enable_coloured_bg(bool state); + void enable_colored_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; + bool colored_bg() const; /** * Enable or disable showing sampling points. @@ -295,11 +304,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(); @@ -332,6 +355,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); @@ -382,6 +408,8 @@ private: bool eventFilter(QObject *object, QEvent *event); + virtual void contextMenuEvent(QContextMenuEvent *event); + void resizeEvent(QResizeEvent *event); void update_hover_point(); @@ -485,7 +513,7 @@ private: bool header_was_shrunk_; bool sticky_scrolling_; - bool coloured_bg_; + bool colored_bg_; bool always_zoom_to_fit_; pv::util::Timestamp tick_period_; @@ -502,7 +530,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_;