X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=34938e7364cb5d827670558d903be0f6426fe0c0;hb=3ce5dd9a981d128085dc5ea507dd7157a87be4cb;hp=ea9f01af7fd13f6ca056ef7dfe37333b158cbb9d;hpb=121307b3c50d981638cbe1e33ba5410bb2b11dd1;p=pulseview.git diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index ea9f01af..34938e73 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -53,6 +53,7 @@ #ifdef ENABLE_DECODE #include "subwindows/decoder_selector/subwindow.hpp" #include "views/decoder_binary/view.hpp" +#include "views/tabular_decoder/view.hpp" #endif #include @@ -164,6 +165,8 @@ shared_ptr MainWindow::add_view(views::ViewType type, #ifdef ENABLE_DECODE if (type == views::ViewTypeDecoderBinary) v = make_shared(session, false, dock_main); + if (type == views::ViewTypeTabularDecoder) + v = make_shared(session, false, dock_main); #endif if (!v) @@ -330,8 +333,8 @@ shared_ptr MainWindow::add_session() shared_ptr session = make_shared(device_manager_, name); - connect(session.get(), SIGNAL(add_view(views::ViewType, Session*)), - this, SLOT(on_add_view(views::ViewType, Session*))); + connect(session.get(), SIGNAL(add_view(ViewType, Session*)), + this, SLOT(on_add_view(ViewType, Session*))); connect(session.get(), SIGNAL(name_changed()), this, SLOT(on_session_name_changed())); connect(session.get(), SIGNAL(device_changed()), @@ -656,6 +659,56 @@ bool MainWindow::restoreState(const QByteArray &state, int version) return false; } +void MainWindow::on_run_stop_clicked() +{ + GlobalSettings settings; + bool all_sessions = settings.value(GlobalSettings::Key_General_StartAllSessions).toBool(); + + if (all_sessions) + { + vector< shared_ptr > hw_sessions; + + // Make a list of all sessions where a hardware device is used + for (const shared_ptr& s : sessions_) { + shared_ptr hw_device = + dynamic_pointer_cast< devices::HardwareDevice >(s->device()); + if (!hw_device) + continue; + hw_sessions.push_back(s); + } + + // Stop all acquisitions if there are any running ones, start all otherwise + bool any_running = any_of(hw_sessions.begin(), hw_sessions.end(), + [](const shared_ptr &s) + { return (s->get_capture_state() == Session::AwaitingTrigger) || + (s->get_capture_state() == Session::Running); }); + + for (shared_ptr s : hw_sessions) + if (any_running) + s->stop_capture(); + else + s->start_capture([&](QString message) { + show_session_error("Capture failed", message); }); + } else { + + shared_ptr session = last_focused_session_; + + if (!session) + return; + + switch (session->get_capture_state()) { + case Session::Stopped: + session->start_capture([&](QString message) { + show_session_error("Capture failed", message); }); + break; + case Session::AwaitingTrigger: + case Session::Running: + session->stop_capture(); + break; + } + } +} + void MainWindow::on_add_view(views::ViewType type, Session *session) { // We get a pointer and need a reference @@ -706,25 +759,6 @@ void MainWindow::on_new_session_clicked() add_session(); } -void MainWindow::on_run_stop_clicked() -{ - shared_ptr session = last_focused_session_; - - if (!session) - return; - - switch (session->get_capture_state()) { - case Session::Stopped: - session->start_capture([&](QString message) { - show_session_error("Capture failed", message); }); - break; - case Session::AwaitingTrigger: - case Session::Running: - session->stop_capture(); - break; - } -} - void MainWindow::on_settings_clicked() { dialogs::Settings dlg(device_manager_); @@ -878,6 +912,8 @@ void MainWindow::on_show_decoder_selector(Session *session) for (shared_ptr& s : sessions_) if (s.get() == session) add_subwindow(subwindows::SubWindowTypeDecoderSelector, *s); +#else + (void)session; #endif }