X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fflag.cpp;h=c356b15bf62bba31341b0f22f8a24a2ed5813dd1;hb=HEAD;hp=97b21be232888dc909fc36b4df9c573005815f39;hpb=710c2a1896fbac968c82f2d1257aaabd10a48cc8;p=pulseview.git diff --git a/pv/views/trace/flag.cpp b/pv/views/trace/flag.cpp index 97b21be2..c356b15b 100644 --- a/pv/views/trace/flag.cpp +++ b/pv/views/trace/flag.cpp @@ -57,45 +57,72 @@ bool Flag::enabled() const return true; } -QString Flag::get_text() const +/** + * Returns the text used to display this flag item. This is not necessarily the + * name that the user has given it. + */ +QString Flag::get_display_text() const { - const shared_ptr ref_item = view_.get_reference_time_item(); - if (ref_item == nullptr || ref_item.get() == this) { - return text_; - } else { - return Ruler::format_time_with_distance( + QString s; + + const shared_ptr ref_item = view_.ruler()->get_reference_item(); + + if (!ref_item || (ref_item.get() == this)) + s = text_; + else + s = Ruler::format_time_with_distance( ref_item->time(), ref_item->delta(time_), view_.tick_prefix(), view_.time_unit(), view_.tick_precision()); - } + + return s; +} + +/** + * Returns the text of this flag item, i.e. the user-editable name. + */ +QString Flag::get_text() const +{ + return text_; +} + +void Flag::set_text(const QString &text) +{ + text_ = text; + view_.time_item_appearance_changed(true, false); } QRectF Flag::label_rect(const QRectF &rect) const { - const shared_ptr ref_item = view_.get_reference_time_item(); - if (ref_item == nullptr || ref_item.get() == this) { - return TimeMarker::label_rect(rect); + QRectF r; + + const shared_ptr ref_item = view_.ruler()->get_reference_item(); + if (!ref_item || (ref_item.get() == this)) { + r = TimeMarker::label_rect(rect); } else { // TODO: Remove code duplication between here and cursor.cpp const float x = get_x(); QFontMetrics m(QApplication::font()); - QSize text_size = m.boundingRect(get_text()).size(); + QSize text_size = m.boundingRect(get_display_text()).size(); const QSizeF label_size( text_size.width() + LabelPadding.width() * 2, text_size.height() + LabelPadding.height() * 2); - const float top = rect.height() - label_size.height() - - TimeMarker::ArrowSize - 0.5f; + const float height = label_size.height(); + const float top = + rect.height() - label_size.height() - TimeMarker::ArrowSize - 0.5f; const pv::util::Timestamp& delta = ref_item->delta(time_); if (delta >= 0) - return QRectF(x, top, label_size.width(), height); + r = QRectF(x, top, label_size.width(), height); else - return QRectF(x - label_size.width(), top, label_size.width(), height); + r = QRectF(x - label_size.width(), top, label_size.width(), height); } + + return r; } pv::widgets::Popup* Flag::create_popup(QWidget *parent) @@ -128,6 +155,12 @@ QMenu* Flag::create_header_context_menu(QWidget *parent) connect(del, SIGNAL(triggered()), this, SLOT(on_delete())); menu->addAction(del); + QAction *const snap_disable = new QAction(tr("Disable snapping"), this); + snap_disable->setCheckable(true); + snap_disable->setChecked(snapping_disabled_); + connect(snap_disable, &QAction::toggled, this, [=](bool checked){snapping_disabled_ = checked;}); + menu->addAction(snap_disable); + return menu; } @@ -143,8 +176,7 @@ void Flag::on_delete() void Flag::on_text_changed(const QString &text) { - text_ = text; - view_.time_item_appearance_changed(true, false); + set_text(text); } } // namespace trace