]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/cursorpair.hpp
Make cursor pair drop precision when too small
[pulseview.git] / pv / views / trace / cursorpair.hpp
index 12a9d7ff7a7344b0154a30f8a61e2e078e6cb989..1dc66a32b8eef8bd622c199e75f9ddf09872dd65 100644 (file)
 #define PULSEVIEW_PV_VIEWS_TRACEVIEW_CURSORPAIR_HPP
 
 #include "cursor.hpp"
+#include "pv/globalsettings.hpp"
 
 #include <memory>
 
+#include <QColor>
 #include <QPainter>
+#include <QRect>
 
 using std::pair;
 using std::shared_ptr;
@@ -35,11 +38,14 @@ namespace pv {
 namespace views {
 namespace trace {
 
-class CursorPair : public TimeItem
+class View;
+
+class CursorPair : public TimeItem, public GlobalSettingsInterface
 {
+       Q_OBJECT
+
 private:
        static const int DeltaPadding;
-       static const QColor ViewportFillColor;
 
 public:
        /**
@@ -48,7 +54,8 @@ public:
         */
        CursorPair(View &view);
 
-public:
+       ~CursorPair();
+
        /**
         * Returns true if the item is visible and enabled.
         */
@@ -75,7 +82,6 @@ public:
 
        pv::widgets::Popup* create_popup(QWidget *parent) override;
 
-public:
        QRectF label_rect(const QRectF &rect) const override;
 
        /**
@@ -96,16 +102,23 @@ public:
        /**
         * Constructs the string to display.
         */
-       QString format_string();
-
-       void compute_text_size(QPainter &p);
+       QString format_string(qreal max_width = 0, std::function<qreal(const QString&)> query_size
+                       = [](const QString& s) -> qreal { Q_UNUSED(s); return 0; });
 
        pair<float, float> get_cursor_offsets() const;
 
+       virtual void on_setting_changed(const QString &key, const QVariant &value) override;
+
+public Q_SLOTS:
+       void on_hover_point_changed(const QWidget* widget, const QPoint &hp);
+
 private:
        shared_ptr<Cursor> first_, second_;
+       QColor fill_color_;
 
        QSizeF text_size_;
+       QRectF label_area_;
+       bool label_incomplete_;
 };
 
 } // namespace trace