]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/view.cpp
Implement annotation export from the DecodeTrace context menu
[pulseview.git] / pv / views / trace / view.cpp
index 96b17fdaf25a9a791bf675e97c387b985d849b69..1e4f07aa3ddab2fa3f0861881c5b50709e1e75f7 100644 (file)
@@ -38,6 +38,7 @@
 #include <QApplication>
 #include <QEvent>
 #include <QFontMetrics>
+#include <QMenu>
 #include <QMouseEvent>
 #include <QScrollBar>
 #include <QVBoxLayout>
@@ -385,7 +386,7 @@ void View::restore_settings(QSettings &settings)
                        boost::archive::text_iarchive ia(ss);
                        ia >> boost::serialization::make_nvp("ruler_shift", shift);
                        ruler_shift_ = shift;
-               } catch (boost::archive::archive_exception) {
+               } catch (boost::archive::archive_exception&) {
                        qDebug() << "Could not restore the view ruler shift";
                }
        }
@@ -400,7 +401,7 @@ void View::restore_settings(QSettings &settings)
                        ia >> boost::serialization::make_nvp("offset", offset);
                        // This also updates ruler_offset_
                        set_offset(offset);
-               } catch (boost::archive::archive_exception) {
+               } catch (boost::archive::archive_exception&) {
                        qDebug() << "Could not restore the view offset";
                }
        }
@@ -1053,8 +1054,10 @@ void View::update_scroll()
                vscrollbar->setRange(extents.first - areaSize.height(),
                        extents.second);
 
-       if (scroll_needs_defaults_)
+       if (scroll_needs_defaults_) {
                set_scroll_default();
+               scroll_needs_defaults_ = false;
+       }
 }
 
 void View::reset_scroll()
@@ -1249,6 +1252,19 @@ bool View::eventFilter(QObject *object, QEvent *event)
        return QObject::eventFilter(object, event);
 }
 
+void View::contextMenuEvent(QContextMenuEvent *event)
+{
+       QPoint pos = event->pos() - QPoint(0, ruler_->sizeHint().height());
+
+       const shared_ptr<ViewItem> r = viewport_->get_mouse_over_item(pos);
+       if (!r)
+               return;
+
+       QMenu *menu = r->create_view_context_menu(this, pos);
+       if (menu)
+               menu->exec(event->globalPos());
+}
+
 void View::resizeEvent(QResizeEvent* event)
 {
        // Only adjust the top margin if we shrunk vertically
@@ -1295,6 +1311,7 @@ void View::extents_changed(bool horz, bool vert)
                (horz ? TraceTreeItemHExtentsChanged : 0) |
                (vert ? TraceTreeItemVExtentsChanged : 0);
 
+       lazy_event_handler_.stop();
        lazy_event_handler_.start();
 }