]> sigrok.org Git - pulseview.git/blobdiff - pv/toolbars/samplingbar.cpp
icons: Added menu icon
[pulseview.git] / pv / toolbars / samplingbar.cpp
index ddca7b5961a8145155c2a64ab0f9f6df0e1fea33..710f3128af727cf4ef51ce90178d6efaa94f3ab6 100644 (file)
@@ -30,6 +30,7 @@
 #include "samplingbar.hpp"
 
 #include <pv/devicemanager.hpp>
+#include <pv/mainwindow.hpp>
 #include <pv/popups/deviceoptions.hpp>
 #include <pv/popups/channels.hpp>
 #include <pv/util.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(Session &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),
@@ -86,7 +88,7 @@ SamplingBar::SamplingBar(SigSession &session, QWidget *parent) :
 
        sample_count_.show_min_max_step(0, UINT64_MAX, 1);
 
-       set_capture_state(pv::SigSession::Stopped);
+       set_capture_state(pv::Session::Stopped);
 
        configure_button_.setIcon(QIcon::fromTheme("configure",
                QIcon(":/icons/configure.png")));
@@ -109,7 +111,7 @@ SamplingBar::SamplingBar(SigSession &session, QWidget *parent) :
 }
 
 void SamplingBar::set_device_list(
-       const std::list< std::pair<std::shared_ptr<sigrok::Device>, std::string> > &devices,
+       const std::list< std::shared_ptr<sigrok::Device> > &devices,
        shared_ptr<Device> selected)
 {
        int selected_index = -1;
@@ -120,12 +122,12 @@ void SamplingBar::set_device_list(
 
        device_selector_.clear();
 
-       for (auto entry : devices) {
-               auto device = entry.first;
-               auto display_name = entry.second;
-
+       for (auto device : devices) {
                assert(device);
 
+               string display_name =
+                       session_.device_manager().get_display_name(device);
+
                if (selected == device)
                        selected_index = device_selector_.count();
 
@@ -151,11 +153,11 @@ shared_ptr<Device> SamplingBar::get_selected_device() const
        return device_selector_.itemData(index).value<shared_ptr<Device>>();
 }
 
-void SamplingBar::set_capture_state(pv::SigSession::capture_state state)
+void SamplingBar::set_capture_state(pv::Session::capture_state state)
 {
        const QIcon *icons[] = {&icon_grey_, &icon_red_, &icon_green_};
        run_stop_button_.setIcon(*icons[state]);
-       run_stop_button_.setText((state == pv::SigSession::Stopped) ?
+       run_stop_button_.setText((state == pv::Session::Stopped) ?
                tr("Run") : tr("Stop"));
        run_stop_button_.setShortcut(QKeySequence(Qt::Key_Space));
 }
@@ -181,8 +183,17 @@ void SamplingBar::update_sample_rate_selector()
        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);
-       } else {
+               const auto keys = device->config_keys(
+                       ConfigKey::DEVICE_OPTIONS);
+               try {
+                       gvar_dict = device->config_list(ConfigKey::SAMPLERATE);
+               } catch(const sigrok::Error &e) {
+                       // Failed to enunmerate samplerate
+                       (void)e;
+               }
+       }
+
+       if (!gvar_dict) {
                sample_rate_.show_none();
                updating_sample_rate_ = false;
                return;
@@ -282,9 +293,16 @@ void SamplingBar::update_sample_count_selector()
        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);
+               try {
+                       auto gvar =
+                               device->config_list(ConfigKey::LIMIT_SAMPLES);
+                       if (gvar)
+                               g_variant_get(gvar.gobj(), "(tt)",
+                                       &min_sample_count, &max_sample_count);
+               } catch(const sigrok::Error &e) {
+                       // Failed to query sample limit
+                       (void)e;
+               }
        }
 
        min_sample_count = min(max(min_sample_count, MinSampleCount),
@@ -430,7 +448,7 @@ void SamplingBar::on_device_selected()
        if (!device)
                return;
 
-       session_.set_device(device);
+       main_window_.select_device(device);
 
        update_device_config_widgets();
 }
@@ -449,7 +467,7 @@ void SamplingBar::on_run_stop()
 {
        commit_sample_count();
        commit_sample_rate();   
-       run_stop();
+       main_window_.run_stop();
 }
 
 void SamplingBar::on_config_changed()