]> sigrok.org Git - pulseview.git/blobdiff - pv/toolbars/mainbar.cpp
Improve icon/theme handling.
[pulseview.git] / pv / toolbars / mainbar.cpp
index 05952e0f94d87c897dd461b2e034dc62b8bbda12..a3b722cc3dcfa041f6bc913c451d6f4e4fec8410 100644 (file)
@@ -43,8 +43,8 @@
 #include <pv/dialogs/inputoutputoptions.hpp>
 #include <pv/dialogs/storeprogress.hpp>
 #include <pv/mainwindow.hpp>
-#include <pv/popups/deviceoptions.hpp>
 #include <pv/popups/channels.hpp>
+#include <pv/popups/deviceoptions.hpp>
 #include <pv/util.hpp>
 #include <pv/view/view.hpp>
 #include <pv/widgets/exportmenu.hpp>
 #include <libsigrokcxx/libsigrokcxx.hpp>
 
 using std::back_inserter;
-using std::cerr;
 using std::copy;
-using std::endl;
 using std::list;
+using std::make_pair;
 using std::map;
 using std::max;
 using std::min;
+using std::pair;
+using std::set;
 using std::shared_ptr;
 using std::string;
 using std::vector;
@@ -145,15 +146,15 @@ MainBar::MainBar(Session &session, QWidget *parent,
                session.device_manager().context());
        menu_file_export->setTitle(tr("&Export"));
        connect(menu_file_export,
-               SIGNAL(format_selected(std::shared_ptr<sigrok::OutputFormat>)),
-               this, SLOT(export_file(std::shared_ptr<sigrok::OutputFormat>)));
+               SIGNAL(format_selected(shared_ptr<sigrok::OutputFormat>)),
+               this, SLOT(export_file(shared_ptr<sigrok::OutputFormat>)));
 
        widgets::ImportMenu *menu_file_import = new widgets::ImportMenu(this,
                session.device_manager().context());
        menu_file_import->setTitle(tr("&Import"));
        connect(menu_file_import,
-               SIGNAL(format_selected(std::shared_ptr<sigrok::InputFormat>)),
-               this, SLOT(import_file(std::shared_ptr<sigrok::InputFormat>)));
+               SIGNAL(format_selected(shared_ptr<sigrok::InputFormat>)),
+               this, SLOT(import_file(shared_ptr<sigrok::InputFormat>)));
 
        action_connect_->setText(tr("&Connect to Device..."));
        connect(action_connect_, SIGNAL(triggered(bool)),
@@ -163,9 +164,9 @@ MainBar::MainBar(Session &session, QWidget *parent,
        widgets::ImportMenu *import_menu = new widgets::ImportMenu(this,
                session.device_manager().context(), action_open_);
        connect(import_menu,
-               SIGNAL(format_selected(std::shared_ptr<sigrok::InputFormat>)),
+               SIGNAL(format_selected(shared_ptr<sigrok::InputFormat>)),
                this,
-               SLOT(import_file(std::shared_ptr<sigrok::InputFormat>)));
+               SLOT(import_file(shared_ptr<sigrok::InputFormat>)));
 
        open_button_->setMenu(import_menu);
        open_button_->setDefaultAction(action_open_);
@@ -180,9 +181,9 @@ MainBar::MainBar(Session &session, QWidget *parent,
                session.device_manager().context(),
                open_actions);
        connect(export_menu,
-               SIGNAL(format_selected(std::shared_ptr<sigrok::OutputFormat>)),
+               SIGNAL(format_selected(shared_ptr<sigrok::OutputFormat>)),
                this,
-               SLOT(export_file(std::shared_ptr<sigrok::OutputFormat>)));
+               SLOT(export_file(shared_ptr<sigrok::OutputFormat>)));
 
        save_button_->setMenu(export_menu);
        save_button_->setDefaultAction(action_save_as_);
@@ -198,10 +199,10 @@ MainBar::MainBar(Session &session, QWidget *parent,
        connect(menu_decoders_add_, SIGNAL(decoder_selected(srd_decoder*)),
                this, SLOT(add_decoder(srd_decoder*)));
 
-       add_decoder_button_->setIcon(QIcon::fromTheme("add-decoder",
-               QIcon(":/icons/add-decoder.svg")));
+       add_decoder_button_->setIcon(QIcon(":/icons/add-decoder.svg"));
        add_decoder_button_->setPopupMode(QToolButton::InstantPopup);
        add_decoder_button_->setMenu(menu_decoders_add_);
+       add_decoder_button_->setToolTip(tr("Add low-level, non-stacked protocol decoder"));
 #endif
 
        connect(&sample_count_, SIGNAL(value_changed()),
@@ -214,12 +215,11 @@ MainBar::MainBar(Session &session, QWidget *parent,
        set_capture_state(pv::Session::Stopped);
 
        configure_button_.setToolTip(tr("Configure Device"));
-       configure_button_.setIcon(QIcon::fromTheme("configure",
-               QIcon(":/icons/configure.png")));
+       configure_button_.setIcon(QIcon::fromTheme("preferences-system",
+               QIcon(":/icons/preferences-system.png")));
 
        channels_button_.setToolTip(tr("Configure Channels"));
-       channels_button_.setIcon(QIcon::fromTheme("channels",
-               QIcon(":/icons/channels.svg")));
+       channels_button_.setIcon(QIcon(":/icons/channels.svg"));
 
        add_toolbar_widgets();
 
@@ -250,7 +250,6 @@ void MainBar::update_device_list()
        update_device_config_widgets();
 }
 
-
 void MainBar::set_capture_state(pv::Session::capture_state state)
 {
        bool ui_enabled = (state == pv::Session::Stopped) ? true : false;
@@ -293,7 +292,7 @@ void MainBar::update_sample_rate_selector()
        GVariant *gvar_list;
        const uint64_t *elements = nullptr;
        gsize num_elements;
-       map< const ConfigKey*, std::set<Capability> > keys;
+       map< const ConfigKey*, set<Capability> > keys;
 
        if (updating_sample_rate_) {
                sample_rate_.show_none();
@@ -403,9 +402,12 @@ void MainBar::update_sample_count_selector()
        uint64_t sample_count = sample_count_.value();
        uint64_t min_sample_count = 0;
        uint64_t max_sample_count = MaxSampleCount;
+       bool default_count_set = false;
 
-       if (sample_count == 0)
+       if (sample_count == 0) {
                sample_count = DefaultSampleCount;
+               default_count_set = true;
+       }
 
        if (sr_dev->config_check(ConfigKey::LIMIT_SAMPLES, Capability::LIST)) {
                auto gvar = sr_dev->config_list(ConfigKey::LIMIT_SAMPLES);
@@ -417,14 +419,15 @@ void MainBar::update_sample_count_selector()
        min_sample_count = min(max(min_sample_count, MinSampleCount),
                max_sample_count);
 
-       sample_count_.show_125_list(
-               min_sample_count, max_sample_count);
+       sample_count_.show_125_list(min_sample_count, max_sample_count);
 
        if (sr_dev->config_check(ConfigKey::LIMIT_SAMPLES, Capability::GET)) {
                auto gvar = sr_dev->config_get(ConfigKey::LIMIT_SAMPLES);
                sample_count = g_variant_get_uint64(gvar.gobj());
-               if (sample_count == 0)
+               if (sample_count == 0) {
                        sample_count = DefaultSampleCount;
+                       default_count_set = true;
+               }
                sample_count = min(max(sample_count, MinSampleCount),
                        max_sample_count);
        }
@@ -432,6 +435,10 @@ void MainBar::update_sample_count_selector()
        sample_count_.set_value(sample_count);
 
        updating_sample_count_ = false;
+
+       // If we show the default rate then make sure the device uses the same
+       if (default_count_set)
+               commit_sample_count();
 }
 
 void MainBar::update_device_config_widgets()
@@ -572,8 +579,7 @@ void MainBar::add_decoder(srd_decoder *decoder)
 #endif
 }
 
-void MainBar::export_file(shared_ptr<OutputFormat> format,
-       bool selection_only)
+void MainBar::export_file(shared_ptr<OutputFormat> format, bool selection_only)
 {
        using pv::dialogs::StoreProgress;
 
@@ -583,7 +589,7 @@ void MainBar::export_file(shared_ptr<OutputFormat> format,
        QSettings settings;
        const QString dir = settings.value(SettingSaveDirectory).toString();
 
-       std::pair<uint64_t, uint64_t> sample_range;
+       pair<uint64_t, uint64_t> sample_range;
 
        // Selection only? Verify that the cursors are active and fetch their values
        if (selection_only) {
@@ -602,13 +608,14 @@ void MainBar::export_file(shared_ptr<OutputFormat> format,
                const pv::util::Timestamp& start_time = trace_view->cursors()->first()->time();
                const pv::util::Timestamp& end_time = trace_view->cursors()->second()->time();
 
-               const uint64_t start_sample =
-                       std::max((double)0, start_time.convert_to<double>() * samplerate);
-               const uint64_t end_sample = end_time.convert_to<double>() * samplerate;
+               const uint64_t start_sample = (uint64_t)max(
+                       (double)0, start_time.convert_to<double>() * samplerate);
+               const uint64_t end_sample = (uint64_t)max(
+                       (double)0, end_time.convert_to<double>() * samplerate);
 
-               sample_range = std::make_pair(start_sample, end_sample);
+               sample_range = make_pair(start_sample, end_sample);
        } else {
-               sample_range = std::make_pair(0, 0);
+               sample_range = make_pair(0, 0);
        }
 
        // Construct the filter
@@ -731,7 +738,7 @@ void MainBar::on_sample_rate_changed()
 void MainBar::on_config_changed()
 {
        commit_sample_count();
-       commit_sample_rate();   
+       commit_sample_rate();
 }
 
 void MainBar::on_actionNewView_triggered()