]> sigrok.org Git - pulseview.git/blobdiff - pv/toolbars/mainbar.cpp
MainWindow: Added initial import menu with no options
[pulseview.git] / pv / toolbars / mainbar.cpp
index 68f36ba367a7720eabd367d20e68f2bcfa2297c5..8c2be4686b29075711e1c1a5926855518f8aed8f 100644 (file)
@@ -38,6 +38,7 @@
 #include <pv/popups/channels.hpp>
 #include <pv/util.hpp>
 #include <pv/widgets/exportmenu.hpp>
+#include <pv/widgets/importmenu.hpp>
 
 #include <libsigrokcxx/libsigrokcxx.hpp>
 
@@ -54,6 +55,7 @@ using std::vector;
 using sigrok::Capability;
 using sigrok::ConfigKey;
 using sigrok::Error;
+using sigrok::InputFormat;
 
 namespace pv {
 namespace toolbars {
@@ -88,6 +90,21 @@ MainBar::MainBar(Session &session, MainWindow &main_window) :
        setFloatable(false);
        setContextMenuPolicy(Qt::PreventContextMenu);
 
+       // Open button
+       QToolButton *const open_button = new QToolButton(this);
+
+       widgets::ImportMenu *import_menu = new widgets::ImportMenu(this,
+               session.device_manager().context(),
+               main_window.action_open());
+       connect(import_menu,
+               SIGNAL(format_selected(std::shared_ptr<sigrok::InputFormat>)),
+               &main_window_,
+               SLOT(import_file(std::shared_ptr<sigrok::InputFormat>)));
+
+       open_button->setMenu(import_menu);
+       open_button->setDefaultAction(main_window.action_open());
+       open_button->setPopupMode(QToolButton::MenuButtonPopup);
+
        // Save button
        QToolButton *const save_button = new QToolButton(this);
 
@@ -133,7 +150,7 @@ MainBar::MainBar(Session &session, MainWindow &main_window) :
                QIcon(":/icons/menu.svg")));
 
        // Setup the toolbar
-       addAction(main_window.action_open());
+       addWidget(open_button);
        addWidget(save_button);
        addSeparator();
        addAction(main_window.action_view_zoom_in());
@@ -216,6 +233,7 @@ void MainBar::update_sample_rate_selector()
        GVariant *gvar_list;
        const uint64_t *elements = NULL;
        gsize num_elements;
+       map< const ConfigKey*, std::set<Capability> > keys;
 
        if (updating_sample_rate_)
                return;
@@ -229,7 +247,11 @@ void MainBar::update_sample_rate_selector()
        updating_sample_rate_ = true;
 
        const shared_ptr<sigrok::Device> sr_dev = device->device();
-       const auto keys = sr_dev->config_keys(ConfigKey::DEVICE_OPTIONS);
+
+       try {
+               keys = sr_dev->config_keys(ConfigKey::DEVICE_OPTIONS);
+       } catch (Error) {}
+
        const auto iter = keys.find(ConfigKey::SAMPLERATE);
        if (iter != keys.end() &&
                (*iter).second.find(sigrok::LIST) != (*iter).second.end()) {