]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/standardbar.cpp
Rework new segment notification mechanism
[pulseview.git] / pv / views / trace / standardbar.cpp
index 1a77edaa7594f7546a6d582114e44b78435f84e0..d773a5c1367df44113d9392ef8e44a2e4a53a38a 100644 (file)
 #include <QMessageBox>
 
 #include "standardbar.hpp"
+#include "view.hpp"
 
 #include <pv/mainwindow.hpp>
-#include <pv/view/view.hpp>
 
-using pv::views::TraceView::View;
+using pv::views::trace::View;
 
 namespace pv {
 namespace views {
@@ -42,7 +42,8 @@ StandardBar::StandardBar(Session &session, QWidget *parent,
        action_view_zoom_out_(new QAction(this)),
        action_view_zoom_fit_(new QAction(this)),
        action_view_zoom_one_to_one_(new QAction(this)),
-       action_view_show_cursors_(new QAction(this))
+       action_view_show_cursors_(new QAction(this)),
+       segment_selector_(new QSpinBox(this))
 {
        setObjectName(QString::fromUtf8("StandardBar"));
 
@@ -78,13 +79,19 @@ StandardBar::StandardBar(Session &session, QWidget *parent,
                this, SLOT(on_actionViewZoomOneToOne_triggered()));
 
        action_view_show_cursors_->setCheckable(true);
-       action_view_show_cursors_->setIcon(QIcon::fromTheme("show-cursors",
-               QIcon(":/icons/show-cursors.svg")));
+       action_view_show_cursors_->setIcon(QIcon(":/icons/show-cursors.svg"));
        action_view_show_cursors_->setShortcut(QKeySequence(Qt::Key_C));
        connect(action_view_show_cursors_, SIGNAL(triggered(bool)),
                this, SLOT(on_actionViewShowCursors_triggered()));
        action_view_show_cursors_->setText(tr("Show &Cursors"));
 
+       segment_selector_->setMinimum(1);
+       segment_selector_->hide();
+       connect(&session_, SIGNAL(new_segment(int)),
+               this, SLOT(on_new_segment(int)));
+       connect(segment_selector_, SIGNAL(valueChanged(int)),
+               view_, SLOT(on_segment_changed(int)));
+
        connect(view_, SIGNAL(always_zoom_to_fit_changed(bool)),
                this, SLOT(on_always_zoom_to_fit_changed(bool)));
 
@@ -106,6 +113,18 @@ void StandardBar::add_toolbar_widgets()
        addAction(action_view_zoom_one_to_one_);
        addSeparator();
        addAction(action_view_show_cursors_);
+       multi_segment_actions_.push_back(addSeparator());
+       multi_segment_actions_.push_back(addWidget(segment_selector_));
+       addSeparator();
+
+       // Hide the multi-segment UI until we know that there are multiple segments
+       show_multi_segment_ui(false);
+}
+
+void StandardBar::show_multi_segment_ui(const bool state)
+{
+       for (QAction* action : multi_segment_actions_)
+               action->setVisible(state);
 }
 
 QAction* StandardBar::action_view_zoom_in() const
@@ -167,6 +186,15 @@ void StandardBar::on_always_zoom_to_fit_changed(bool state)
        action_view_zoom_fit_->setChecked(state);
 }
 
+void StandardBar::on_new_segment(int new_segment_id)
+{
+       if (new_segment_id > 1) {
+               show_multi_segment_ui(true);
+               segment_selector_->setMaximum(new_segment_id);
+       } else
+               show_multi_segment_ui(false);
+}
+
 } // namespace trace
 } // namespace views
 } // namespace pv