37 using std::shared_ptr;
48 first_(new
Cursor(view, 0.0)),
49 second_(new
Cursor(view, 1.0)),
50 label_incomplete_(true)
92 second_->set_time(time + delta);
107 if (other < second_->
time())
108 return other -
first_->time();
110 return other -
second_->time();
115 return first_->drag_point(rect);
126 QMenu *menu =
new QMenu(parent);
128 QAction *displayIntervalAction =
new QAction(tr(
"Display interval"),
this);
129 displayIntervalAction->setCheckable(
true);
131 menu->addAction(displayIntervalAction);
133 connect(displayIntervalAction, &QAction::toggled, displayIntervalAction,
140 QAction *displayFrequencyAction =
new QAction(tr(
"Display frequency"),
this);
141 displayFrequencyAction->setCheckable(
true);
143 menu->addAction(displayFrequencyAction);
145 connect(displayFrequencyAction, &QAction::toggled, displayFrequencyAction,
152 QAction *displaySamplesAction =
new QAction(tr(
"Display samples"),
this);
153 displaySamplesAction->setCheckable(
true);
155 menu->addAction(displaySamplesAction);
157 connect(displaySamplesAction, &QAction::toggled, displaySamplesAction,
171 const pair<float, float> normal_offsets(
172 (offsets.first < offsets.second) ? offsets :
173 make_pair(offsets.second, offsets.first));
175 const float height = label_size.height();
178 (
float)rect.width() + height);
180 return QRectF(left, rect.height() - label_size.height() -
182 right - left, height);
194 p.setPen(text_color);
197 const int radius = delta_rect.height() / 2;
198 QRectF text_rect(delta_rect.intersected(rect).adjusted(radius, 0, -radius, 0));
201 [&p](
const QString& s) ->
double {
return p.boundingRect(QRectF(), 0, s).width(); });
203 text_size_ = p.boundingRect(QRectF(), 0, text).size();
215 p.drawRoundedRect(delta_rect, radius, radius);
217 delta_rect.adjust(1, 1, -1, -1);
219 const int highlight_radius = delta_rect.height() / 2 - 2;
220 p.drawRoundedRect(delta_rect, highlight_radius, highlight_radius);
223 p.setPen(text_color);
224 p.drawText(text_rect, Qt::AlignCenter | Qt::AlignVCenter, text);
236 const int l = (int)
max(
min(offsets.first, offsets.second), 0.0f);
237 const int r = (int)
min(
max(offsets.first, offsets.second), (float)pp.
width());
239 p.drawRect(l, pp.
top(), r - l, pp.
height());
244 int time_precision = 12;
245 int freq_precision = 12;
250 if ((max_width <= 0) || (query_size(s) <= max_width)) {
258 while (time_precision > freq_precision) {
262 if (query_size(s) <= max_width)
267 while (time_precision > 0) {
272 if (query_size(s) <= max_width)
279 if (query_size(s) <= max_width)
291 return pair<float, float>(
first_->get_x(),
second_->get_x());
297 fill_color_ = QColor::fromRgba(value.value<uint32_t>());
320 QToolTip::hideText();
332 time_precision,
false);
341 freq_precision, (show_unit ?
"Hz" :
nullptr),
false);
342 s = QString(
"%1").arg(freq);
348 s = QString(
"%1 / %2").arg(s, time);
350 s = QString(
"%1").arg(time);
355 const QString samples = QString::number(
358 s = QString(
"%1 / %2").arg(s, samples);
360 s = QString(
"%1").arg(samples);
const Ruler * ruler() const
util::TimeUnit time_unit() const
pv::util::SIPrefix tick_prefix() const
void paint_back(QPainter &p, ViewItemPaintParams &pp) override
T value(details::expression_node< T > *n)
QString format_value_si(double v, SIPrefix prefix, unsigned precision, QString unit, bool sign)
pair< float, float > get_cursor_offsets() const
static const QString Key_View_CursorShowSamples
QString format_string(int max_width=0, std::function< double(const QString &)> query_size=[](const QString &s) -> double{(void) s;return 0;})
QRectF label_rect(const QRectF &rect) const override
virtual void hover_point_changed(const QPoint &hp)
T max(const T v0, const T v1)
static const QString Key_View_CursorFillColor
static const int DeltaPadding
virtual void on_setting_changed(const QString &key, const QVariant &value) override
static void remove_change_handler(GlobalSettingsInterface *cb)
static const QSizeF LabelPadding
double get_samplerate() const
shared_ptr< Cursor > first() const
void on_hover_point_changed(const QWidget *widget, const QPoint &hp)
void setValue(const QString &key, const QVariant &value)
T min(const T v0, const T v1)
void paint_label(QPainter &p, const QRect &rect, bool hover) override
bool cursors_shown() const
static const QString Key_View_CursorShowFrequency
QString format_string_sub(int time_precision, int freq_precision, bool show_unit=true)
shared_ptr< Cursor > first_
static QString format_time_with_distance(const pv::util::Timestamp &distance, const pv::util::Timestamp &t, pv::util::SIPrefix prefix=pv::util::SIPrefix::unspecified, pv::util::TimeUnit unit=pv::util::TimeUnit::Time, unsigned precision=0, bool sign=true)
static QColor select_text_color(QColor background)
float get_x() const override
bool enabled() const override
static const QString Key_View_CursorShowInterval
QMenu * create_header_context_menu(QWidget *parent) override
QPoint drag_point(const QRect &rect) const override
boost::multiprecision::number< boost::multiprecision::cpp_dec_float< 24 >, boost::multiprecision::et_off > Timestamp
Timestamp type providing yoctosecond resolution.
static const QColor FillColor
static const int ArrowSize
shared_ptr< Cursor > second_
shared_ptr< Cursor > second() const
void set_time(const pv::util::Timestamp &time) override
virtual const pv::util::Timestamp time() const override
pv::widgets::Popup * create_popup(QWidget *parent) override
static void add_change_handler(GlobalSettingsInterface *cb)
virtual const pv::util::Timestamp delta(const pv::util::Timestamp &other) const override