]> sigrok.org Git - pulseview.git/blobdiff - pv/toolbars/samplingbar.cpp
SamplingBar: Added reference to MainWindow for run_stop
[pulseview.git] / pv / toolbars / samplingbar.cpp
index 13c57d6cbb8f342aa9c1a43f96ef92ec9bf85e1b..2002dd237b4f88ce3dd5edb012ae6a1ee81b6c01 100644 (file)
 #include <QHelpEvent>
 #include <QToolTip>
 
-#include "samplingbar.h"
+#include "samplingbar.hpp"
 
-#include <pv/devicemanager.h>
-#include <pv/popups/deviceoptions.h>
-#include <pv/popups/channels.h>
-#include <pv/util.h>
+#include <pv/devicemanager.hpp>
+#include <pv/mainwindow.hpp>
+#include <pv/popups/deviceoptions.hpp>
+#include <pv/popups/channels.hpp>
+#include <pv/util.hpp>
 
 #include <libsigrok/libsigrok.hpp>
 
@@ -55,9 +56,10 @@ const uint64_t SamplingBar::MinSampleCount = 100ULL;
 const uint64_t SamplingBar::MaxSampleCount = 1000000000000ULL;
 const uint64_t SamplingBar::DefaultSampleCount = 1000000;
 
-SamplingBar::SamplingBar(SigSession &session, QWidget *parent) :
-       QToolBar("Sampling Bar", parent),
+SamplingBar::SamplingBar(SigSession &session, MainWindow &main_window) :
+       QToolBar("Sampling Bar", &main_window),
        session_(session),
+       main_window_(main_window),
        device_selector_(this),
        updating_device_selector_(false),
        configure_button_(this),
@@ -177,9 +179,12 @@ void SamplingBar::update_sample_rate_selector()
        assert(!updating_sample_rate_);
        updating_sample_rate_ = true;
 
-       try {
+       const auto keys = device->config_keys(ConfigKey::DEVICE_OPTIONS);
+       const auto iter = keys.find(ConfigKey::SAMPLERATE);
+       if (iter != keys.end() &&
+               (*iter).second.find(sigrok::LIST) != (*iter).second.end()) {
                gvar_dict = device->config_list(ConfigKey::SAMPLERATE);
-       } catch (Error error) {
+       } else {
                sample_rate_.show_none();
                updating_sample_rate_ = false;
                return;
@@ -261,40 +266,45 @@ void SamplingBar::update_sample_count_selector()
        assert(!updating_sample_count_);
        updating_sample_count_ = true;
 
-       if (sample_count_supported_)
+       if (!sample_count_supported_)
        {
-               uint64_t sample_count = sample_count_.value();
-               uint64_t min_sample_count = 0;
-               uint64_t max_sample_count = MaxSampleCount;
+               sample_count_.show_none();
+               updating_sample_count_ = false;
+               return;
+       }
 
-               if (sample_count == 0)
-                       sample_count = DefaultSampleCount;
+       uint64_t sample_count = sample_count_.value();
+       uint64_t min_sample_count = 0;
+       uint64_t max_sample_count = MaxSampleCount;
 
-               try {
-                       auto gvar = device->config_list(ConfigKey::LIMIT_SAMPLES);
-                       g_variant_get(gvar.gobj(), "(tt)",
-                               &min_sample_count, &max_sample_count);
-               } catch (Error error) {}
+       if (sample_count == 0)
+               sample_count = DefaultSampleCount;
 
-               min_sample_count = min(max(min_sample_count, MinSampleCount),
-                       max_sample_count);
+       const auto keys = device->config_keys(ConfigKey::DEVICE_OPTIONS);
+       const auto iter = keys.find(ConfigKey::LIMIT_SAMPLES);
+       if (iter != keys.end() &&
+               (*iter).second.find(sigrok::LIST) != (*iter).second.end()) {
+               auto gvar = device->config_list(ConfigKey::LIMIT_SAMPLES);
+               g_variant_get(gvar.gobj(), "(tt)",
+                       &min_sample_count, &max_sample_count);
+       }
 
-               sample_count_.show_125_list(
-                       min_sample_count, max_sample_count);
+       min_sample_count = min(max(min_sample_count, MinSampleCount),
+               max_sample_count);
 
-               try {
-                       auto gvar = device->config_get(ConfigKey::LIMIT_SAMPLES);
-                       sample_count = g_variant_get_uint64(gvar.gobj());
-                       if (sample_count == 0)
-                               sample_count = DefaultSampleCount;
-                       sample_count = min(max(sample_count, MinSampleCount),
-                               max_sample_count);
-               } catch (Error error) {}
-
-               sample_count_.set_value(sample_count);
-       }
-       else
-               sample_count_.show_none();
+       sample_count_.show_125_list(
+               min_sample_count, max_sample_count);
+
+       try {
+               auto gvar = device->config_get(ConfigKey::LIMIT_SAMPLES);
+               sample_count = g_variant_get_uint64(gvar.gobj());
+               if (sample_count == 0)
+                       sample_count = DefaultSampleCount;
+               sample_count = min(max(sample_count, MinSampleCount),
+                       max_sample_count);
+       } catch (Error error) {}
+
+       sample_count_.set_value(sample_count);
 
        updating_sample_count_ = false;
 }
@@ -441,7 +451,7 @@ void SamplingBar::on_run_stop()
 {
        commit_sample_count();
        commit_sample_rate();   
-       run_stop();
+       main_window_.run_stop();
 }
 
 void SamplingBar::on_config_changed()