X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Ftoolbars%2Fmainbar.cpp;h=0bf2270259b8f58138da8fb89bf19c605f0b6192;hb=449aec3cba1974d34a9c9a66b3cf8fc5208b62f4;hp=9c5049dd8aa92d291e9c8b0e5b1e92b823685262;hpb=a6ed12bfdfe8588565456d04824011c66863914c;p=pulseview.git diff --git a/pv/toolbars/mainbar.cpp b/pv/toolbars/mainbar.cpp index 9c5049d..0bf2270 100644 --- a/pv/toolbars/mainbar.cpp +++ b/pv/toolbars/mainbar.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include @@ -54,6 +55,7 @@ using std::vector; using sigrok::Capability; using sigrok::ConfigKey; using sigrok::Error; +using sigrok::InputFormat; namespace pv { namespace toolbars { @@ -69,8 +71,9 @@ MainBar::MainBar(Session &session, MainWindow &main_window) : device_selector_(this, session.device_manager(), main_window.action_connect()), configure_button_(this), - configure_button_action_(NULL), + configure_button_action_(nullptr), channels_button_(this), + channels_button_action_(nullptr), sample_count_(" samples", this), sample_rate_("Hz", this), updating_sample_rate_(false), @@ -80,6 +83,7 @@ MainBar::MainBar(Session &session, MainWindow &main_window) : icon_green_(":/icons/status-green.svg"), icon_grey_(":/icons/status-grey.svg"), run_stop_button_(this), + run_stop_button_action_(nullptr), menu_button_(this) { setObjectName(QString::fromUtf8("MainBar")); @@ -88,6 +92,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)), + &main_window_, + SLOT(import_file(std::shared_ptr))); + + 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 +152,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()); @@ -165,10 +184,10 @@ MainBar::MainBar(Session &session, MainWindow &main_window) : addWidget(&device_selector_); configure_button_action_ = addWidget(&configure_button_); - addWidget(&channels_button_); + channels_button_action_ = addWidget(&channels_button_); addWidget(&sample_count_); addWidget(&sample_rate_); - addWidget(&run_stop_button_); + run_stop_button_action_ = addWidget(&run_stop_button_); #ifdef ENABLE_DECODE addSeparator(); addWidget(add_decoder_button); @@ -194,7 +213,6 @@ void MainBar::update_device_list() if (std::find(devs.begin(), devs.end(), selected_device) == devs.end()) devs.push_back(selected_device); - assert(selected_device); device_selector_.set_device_list(devs, selected_device); update_device_config_widgets(); @@ -214,12 +232,14 @@ void MainBar::update_sample_rate_selector() { Glib::VariantContainerBase gvar_dict; GVariant *gvar_list; - const uint64_t *elements = NULL; + const uint64_t *elements = nullptr; gsize num_elements; map< const ConfigKey*, std::set > keys; - if (updating_sample_rate_) + if (updating_sample_rate_) { + sample_rate_.show_none(); return; + } const shared_ptr device = device_selector_.selected_device(); @@ -388,8 +408,16 @@ void MainBar::update_device_config_widgets() const shared_ptr device = device_selector_.selected_device(); - if (!device) + + // Hide the widgets if no device is selected + channels_button_action_->setVisible(!!device); + run_stop_button_action_->setVisible(!!device); + if (!device) { + configure_button_action_->setVisible(false); + sample_count_.show_none(); + sample_rate_.show_none(); return; + } const shared_ptr sr_dev = device->device(); if (!sr_dev) @@ -446,9 +474,6 @@ void MainBar::commit_sample_count() { uint64_t sample_count = 0; - if (updating_sample_count_) - return; - const shared_ptr device = device_selector_.selected_device(); if (!device) @@ -457,31 +482,23 @@ void MainBar::commit_sample_count() const shared_ptr sr_dev = device->device(); sample_count = sample_count_.value(); - - // Set the sample count - assert(!updating_sample_count_); - updating_sample_count_ = true; if (sample_count_supported_) { try { sr_dev->config_set(ConfigKey::LIMIT_SAMPLES, Glib::Variant::create(sample_count)); - on_config_changed(); + update_sample_count_selector(); } catch (Error error) { qDebug() << "Failed to configure sample count."; return; } } - updating_sample_count_ = false; } void MainBar::commit_sample_rate() { uint64_t sample_rate = 0; - if (updating_sample_rate_) - return; - const shared_ptr device = device_selector_.selected_device(); if (!device) @@ -493,18 +510,14 @@ void MainBar::commit_sample_rate() if (sample_rate == 0) return; - // Set the samplerate - assert(!updating_sample_rate_); - updating_sample_rate_ = true; try { sr_dev->config_set(ConfigKey::SAMPLERATE, Glib::Variant::create(sample_rate)); - on_config_changed(); + update_sample_rate_selector(); } catch (Error error) { qDebug() << "Failed to configure samplerate."; return; } - updating_sample_rate_ = false; } void MainBar::on_device_selected() @@ -520,12 +533,14 @@ void MainBar::on_device_selected() void MainBar::on_sample_count_changed() { - commit_sample_count(); + if (!updating_sample_count_) + commit_sample_count(); } void MainBar::on_sample_rate_changed() { - commit_sample_rate(); + if (!updating_sample_rate_) + commit_sample_rate(); } void MainBar::on_run_stop() @@ -538,9 +553,7 @@ void MainBar::on_run_stop() void MainBar::on_config_changed() { commit_sample_count(); - update_sample_count_selector(); commit_sample_rate(); - update_sample_rate_selector(); } bool MainBar::eventFilter(QObject *watched, QEvent *event)