#ifndef PULSEVIEW_PV_VIEW_RULER_H
#define PULSEVIEW_PV_VIEW_RULER_H
-#include <QWidget>
+#include <memory>
+
+#include "marginwidget.h"
namespace pv {
namespace view {
-class View;
-
-class Ruler : public QWidget
+class Ruler : public MarginWidget
{
Q_OBJECT
private:
+ static const int RulerHeight;
static const int MinorTickSubdivision;
static const int ScaleUnits[3];
- static const QString SIPrefixes[9];
- static const int FirstSIPrefixPower;
-
static const int HoverArrowSize;
public:
Ruler(View &parent);
+ /**
+ * Find a tick spacing and number formatting that does not cause
+ * the values to collide.
+ * @param p A QPainter used to determine the needed space for the values.
+ * @param scale A pv::view::View's scale.
+ * @param offset A pv::view::View's offset.
+ *
+ * @return The tick period to use in 'first' and the prefix in 'second'.
+ */
+ static std::pair<double, unsigned int> calculate_tick_spacing(
+ QPainter& p, double scale, double offset);
+
+public:
+ QSize sizeHint() const;
+
private:
void paintEvent(QPaintEvent *event);
private:
- void draw_cursors(QPainter &p);
-
/**
* Draw a hover arrow under the cursor position.
*/
void draw_hover_mark(QPainter &p);
-private slots:
+private Q_SLOTS:
void hover_point_changed();
-
-private:
- View &_view;
};
} // namespace view