]> sigrok.org Git - pulseview.git/commitdiff
Add "start acquisition for all devices" option
authorSoeren Apel <redacted>
Fri, 13 Nov 2020 20:53:40 +0000 (21:53 +0100)
committerSoeren Apel <redacted>
Fri, 13 Nov 2020 20:56:22 +0000 (21:56 +0100)
pv/dialogs/settings.cpp
pv/dialogs/settings.hpp
pv/globalsettings.cpp
pv/globalsettings.hpp
pv/mainwindow.cpp

index efe854af4efea9c916153a419b86a47d197992bb..b07a63696fb4b11d3c6c69cbf8b5beb79d7da60d 100644 (file)
@@ -276,6 +276,11 @@ QWidget *Settings::get_general_settings_form(QWidget *parent) const
                SLOT(on_general_save_with_setup_changed(int)));
        general_layout->addRow(tr("Save session &setup along with .sr file"), cb);
 
+       cb = create_checkbox(GlobalSettings::Key_General_StartAllSessions,
+               SLOT(on_general_start_all_sessions_changed(int)));
+       general_layout->addRow(tr("Start acquisition for all open sessions when clicking 'Run'"), cb);
+
+
        return form;
 }
 
@@ -679,6 +684,12 @@ void Settings::on_general_save_with_setup_changed(int state)
        settings.setValue(GlobalSettings::Key_General_SaveWithSetup, state ? true : false);
 }
 
+void Settings::on_general_start_all_sessions_changed(int state)
+{
+       GlobalSettings settings;
+       settings.setValue(GlobalSettings::Key_General_StartAllSessions, state ? true : false);
+}
+
 void Settings::on_view_zoomToFitDuringAcq_changed(int state)
 {
        GlobalSettings settings;
index 18920b814e3b1511a547e1658a8f4c84cda4d2ab..d419350c6821c592251a9175878f666be57f0edf 100644 (file)
@@ -62,6 +62,7 @@ private Q_SLOTS:
        void on_general_theme_changed(int value);
        void on_general_style_changed(int value);
        void on_general_save_with_setup_changed(int state);
+       void on_general_start_all_sessions_changed(int state);
        void on_view_zoomToFitDuringAcq_changed(int state);
        void on_view_zoomToFitAfterAcq_changed(int state);
        void on_view_triggerIsZero_changed(int state);
index ca649befad8f318dab49f90e2ef73ad766756625..4fa9bc334d27e4e470ca30afe0ae0d52715da9e9 100644 (file)
@@ -52,6 +52,7 @@ const QString GlobalSettings::Key_General_Language = "General_Language";
 const QString GlobalSettings::Key_General_Theme = "General_Theme";
 const QString GlobalSettings::Key_General_Style = "General_Style";
 const QString GlobalSettings::Key_General_SaveWithSetup = "General_SaveWithSetup";
+const QString GlobalSettings::Key_General_StartAllSessions = "General_StartAllSessions";
 const QString GlobalSettings::Key_View_ZoomToFitDuringAcq = "View_ZoomToFitDuringAcq";
 const QString GlobalSettings::Key_View_ZoomToFitAfterAcq = "View_ZoomToFitAfterAcq";
 const QString GlobalSettings::Key_View_TriggerIsZeroTime = "View_TriggerIsZeroTime";
index e41c2ea9ed6a8b8d88b537f7bbae33bcc07f418d..2b8bf17f5fba3dca6fa47a4872626d3b22dfb055 100644 (file)
@@ -57,6 +57,7 @@ public:
        static const QString Key_General_Theme;
        static const QString Key_General_Style;
        static const QString Key_General_SaveWithSetup;
+       static const QString Key_General_StartAllSessions;
        static const QString Key_View_ZoomToFitDuringAcq;
        static const QString Key_View_ZoomToFitAfterAcq;
        static const QString Key_View_TriggerIsZeroTime;
index 6749b5f0343517a6c0afb467f8907f7878dcd38f..8e3cb9d1085f9c72588c519dc74e9e5bbb8b8179 100644 (file)
@@ -661,20 +661,51 @@ bool MainWindow::restoreState(const QByteArray &state, int version)
 
 void MainWindow::on_run_stop_clicked()
 {
-       shared_ptr<Session> session = last_focused_session_;
+       GlobalSettings settings;
+       bool all_sessions = settings.value(GlobalSettings::Key_General_StartAllSessions).toBool();
 
-       if (!session)
-               return;
+       if (all_sessions)
+       {
+               vector< shared_ptr<Session> > hw_sessions;
+
+               // Make a list of all sessions where a hardware device is used
+               for (shared_ptr<Session> s : sessions_) {
+                       shared_ptr<devices::HardwareDevice> 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<Session> &s)
+                               { return (s->get_capture_state() == Session::AwaitingTrigger) ||
+                                               (s->get_capture_state() == Session::Running); });
+
+               for (shared_ptr<Session> 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> 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;
+               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;
+               }
        }
 }