]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/decodetrace.cpp
Add generic "Create marker here" context menu entry
[pulseview.git] / pv / views / trace / decodetrace.cpp
index 574e9d1ae96b8891689c402548182cceae2b869d..1f9e4c4e1b9bd7e0e2af3dad77817b33fec7f1bc 100644 (file)
@@ -173,7 +173,7 @@ void DecodeTrace::paint_mid(QPainter &p, ViewItemPaintParams &pp)
 
        // Iterate through the rows
        int y = get_visual_y();
-       pair<uint64_t, uint64_t> sample_range = get_sample_range(pp.left(), pp.right());
+       pair<uint64_t, uint64_t> sample_range = get_view_sample_range(pp.left(), pp.right());
 
        // Just because the view says we see a certain sample range it
        // doesn't mean we have this many decoded samples, too, so crop
@@ -328,6 +328,23 @@ QMenu* DecodeTrace::create_header_context_menu(QWidget *parent)
 
 QMenu* DecodeTrace::create_view_context_menu(QWidget *parent, QPoint &click_pos)
 {
+       // Get entries from default menu before adding our own
+       QMenu *const menu = new QMenu(parent);
+
+       QMenu* default_menu = Trace::create_view_context_menu(parent, click_pos);
+       if (default_menu) {
+               for (QAction *action : default_menu->actions()) {
+                       menu->addAction(action);
+                       if (action->parent() == default_menu)
+                               action->setParent(menu);
+               }
+               delete default_menu;
+
+               // Add separator if needed
+               if (menu->actions().length() > 0)
+                       menu->addSeparator();
+       }
+
        try {
                selected_row_ = &visible_rows_[get_row_at_point(click_pos)];
        } catch (out_of_range&) {
@@ -336,11 +353,9 @@ QMenu* DecodeTrace::create_view_context_menu(QWidget *parent, QPoint &click_pos)
 
        // Default sample range is "from here"
        const pair<uint64_t, uint64_t> sample_range =
-               get_sample_range(click_pos.x(), click_pos.x() + 1);
+               get_view_sample_range(click_pos.x(), click_pos.x() + 1);
        selected_sample_range_ = make_pair(sample_range.first, numeric_limits<uint64_t>::max());
 
-       QMenu *const menu = new QMenu(parent);
-
        if (decode_signal_->is_paused()) {
                QAction *const resume =
                        new QAction(tr("Resume decoding"), this);
@@ -719,7 +734,7 @@ pair<double, double> DecodeTrace::get_pixels_offset_samples_per_pixel() const
        return make_pair(pixels_offset, samplerate * scale);
 }
 
-pair<uint64_t, uint64_t> DecodeTrace::get_sample_range(
+pair<uint64_t, uint64_t> DecodeTrace::get_view_sample_range(
        int x_start, int x_end) const
 {
        double samples_per_pixel, pixels_offset;
@@ -789,7 +804,7 @@ const QString DecodeTrace::get_annotation_at_point(const QPoint &point)
                return QString();
 
        const pair<uint64_t, uint64_t> sample_range =
-               get_sample_range(point.x(), point.x() + 1);
+               get_view_sample_range(point.x(), point.x() + 1);
        const int row = get_row_at_point(point);
        if (row < 0)
                return QString();