]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/flag.cpp
Fix #1457 by adding markers, cursors and zero offset to session setup
[pulseview.git] / pv / views / trace / flag.cpp
index 97b21be232888dc909fc36b4df9c573005815f39..b0518b646d87c493d8c13de606570f8dccf92522 100644 (file)
@@ -59,22 +59,34 @@ bool Flag::enabled() const
 
 QString Flag::get_text() const
 {
-       const shared_ptr<TimeItem> 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<TimeItem> 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;
+}
+
+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<TimeItem> 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<TimeItem> 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();
@@ -85,17 +97,20 @@ QRectF Flag::label_rect(const QRectF &rect) const
                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 +143,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 +164,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