X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Ftoolbars%2Fmainbar.cpp;h=85e55fb3b17aa3194ae481c0b5fde9a1f1c20ceb;hp=16888624bc2f124030005fc481ae6838f5adbba5;hb=97378470ded88af84edaa0f1063d10d834475665;hpb=bc4b9ccfc78d9d0987525360fa6d93bed681951a diff --git a/pv/toolbars/mainbar.cpp b/pv/toolbars/mainbar.cpp index 1688862..85e55fb 100644 --- a/pv/toolbars/mainbar.cpp +++ b/pv/toolbars/mainbar.cpp @@ -35,7 +35,6 @@ #include -#include #include #include #include @@ -51,7 +50,7 @@ #include #include #ifdef ENABLE_DECODE -#include +#include #endif #include @@ -93,6 +92,8 @@ MainBar::MainBar(Session &session, QWidget *parent, pv::views::trace::View *view action_open_(new QAction(this)), action_save_as_(new QAction(this)), action_save_selection_as_(new QAction(this)), + action_restore_setup_(new QAction(this)), + action_save_setup_(new QAction(this)), action_connect_(new QAction(this)), open_button_(new QToolButton()), save_button_(new QToolButton()), @@ -107,8 +108,7 @@ MainBar::MainBar(Session &session, QWidget *parent, pv::views::trace::View *view updating_sample_count_(false), sample_count_supported_(false) #ifdef ENABLE_DECODE - , add_decoder_button_(new QToolButton()), - menu_decoders_add_(new pv::widgets::DecoderMenu(this, true)) + , add_decoder_button_(new QToolButton()) #endif { setObjectName(QString::fromUtf8("MainBar")); @@ -129,6 +129,10 @@ MainBar::MainBar(Session &session, QWidget *parent, pv::views::trace::View *view connect(action_open_, SIGNAL(triggered(bool)), this, SLOT(on_actionOpen_triggered())); + action_restore_setup_->setText(tr("Restore Session Setu&p...")); + connect(action_restore_setup_, SIGNAL(triggered(bool)), + this, SLOT(on_actionRestoreSetup_triggered())); + action_save_as_->setText(tr("&Save As...")); action_save_as_->setIcon(QIcon::fromTheme("document-save-as", QIcon(":/icons/document-save-as.png"))); @@ -143,6 +147,10 @@ MainBar::MainBar(Session &session, QWidget *parent, pv::views::trace::View *view connect(action_save_selection_as_, SIGNAL(triggered(bool)), this, SLOT(on_actionSaveSelectionAs_triggered())); + action_save_setup_->setText(tr("Save Session Setu&p...")); + connect(action_save_setup_, SIGNAL(triggered(bool)), + this, SLOT(on_actionSaveSetup_triggered())); + widgets::ExportMenu *menu_file_export = new widgets::ExportMenu(this, session.device_manager().context()); menu_file_export->setTitle(tr("&Export")); @@ -160,8 +168,15 @@ MainBar::MainBar(Session &session, QWidget *parent, pv::views::trace::View *view this, SLOT(on_actionConnect_triggered())); // Open button + vector open_actions; + open_actions.push_back(action_open_); + QAction* separator_o = new QAction(this); + separator_o->setSeparator(true); + open_actions.push_back(separator_o); + open_actions.push_back(action_restore_setup_); + widgets::ImportMenu *import_menu = new widgets::ImportMenu(this, - session.device_manager().context(), action_open_); + session.device_manager().context(), open_actions); connect(import_menu, SIGNAL(format_selected(shared_ptr)), this, SLOT(import_file(shared_ptr))); @@ -170,12 +185,16 @@ MainBar::MainBar(Session &session, QWidget *parent, pv::views::trace::View *view open_button_->setPopupMode(QToolButton::MenuButtonPopup); // Save button - vector open_actions; - open_actions.push_back(action_save_as_); - open_actions.push_back(action_save_selection_as_); + vector save_actions; + save_actions.push_back(action_save_as_); + save_actions.push_back(action_save_selection_as_); + QAction* separator_s = new QAction(this); + separator_s->setSeparator(true); + save_actions.push_back(separator_s); + save_actions.push_back(action_save_setup_); widgets::ExportMenu *export_menu = new widgets::ExportMenu(this, - session.device_manager().context(), open_actions); + session.device_manager().context(), save_actions); connect(export_menu, SIGNAL(format_selected(shared_ptr)), this, SLOT(export_file(shared_ptr))); @@ -189,14 +208,12 @@ MainBar::MainBar(Session &session, QWidget *parent, pv::views::trace::View *view // Setup the decoder button #ifdef ENABLE_DECODE - menu_decoders_add_->setTitle(tr("&Add")); - connect(menu_decoders_add_, SIGNAL(decoder_selected(srd_decoder*)), - this, SLOT(add_decoder(srd_decoder*))); - 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")); + add_decoder_button_->setToolTip(tr("Add protocol decoder")); + + connect(add_decoder_button_, SIGNAL(clicked()), + this, SLOT(on_add_decoder_clicked())); #endif connect(&sample_count_, SIGNAL(value_changed()), @@ -302,17 +319,21 @@ void MainBar::update_sample_rate_selector() const shared_ptr sr_dev = device->device(); - try { - auto gvar = sr_dev->config_get(ConfigKey::EXTERNAL_CLOCK); - if (gvar.gobj()) { - bool value = Glib::VariantBase::cast_dynamic>( - gvar).get(); - sample_rate_.allow_user_entered_values(value); + sample_rate_.allow_user_entered_values(false); + if (sr_dev->config_check(ConfigKey::EXTERNAL_CLOCK, Capability::GET)) { + try { + auto gvar = sr_dev->config_get(ConfigKey::EXTERNAL_CLOCK); + if (gvar.gobj()) { + bool value = Glib::VariantBase::cast_dynamic>( + gvar).get(); + sample_rate_.allow_user_entered_values(value); + } + } catch (Error& error) { + // Do nothing } - } catch (Error& error) { - // Do nothing } + if (sr_dev->config_check(ConfigKey::SAMPLERATE, Capability::LIST)) { try { gvar_dict = sr_dev->config_list(ConfigKey::SAMPLERATE); @@ -380,7 +401,7 @@ void MainBar::update_sample_rate_selector_value() sample_rate_.set_value(samplerate); updating_sample_rate_ = false; } catch (Error& error) { - qDebug() << tr("Failed to get value of sample rate:") << error.what(); + qDebug() << tr("Failed to get sample rate:") << error.what(); } } @@ -505,8 +526,6 @@ void MainBar::commit_sample_rate() const shared_ptr sr_dev = device->device(); sample_rate = sample_rate_.value(); - if (sample_rate == 0) - return; try { sr_dev->config_set(ConfigKey::SAMPLERATE, @@ -554,25 +573,12 @@ void MainBar::commit_sample_count() void MainBar::show_session_error(const QString text, const QString info_text) { QMessageBox msg(this); - msg.setText(text); - msg.setInformativeText(info_text); + msg.setText(text + "\n\n" + info_text); msg.setStandardButtons(QMessageBox::Ok); msg.setIcon(QMessageBox::Warning); msg.exec(); } -void MainBar::add_decoder(srd_decoder *decoder) -{ -#ifdef ENABLE_DECODE - assert(decoder); - shared_ptr signal = session_.add_decode_signal(); - if (signal) - signal->stack_decoder(decoder); -#else - (void)decoder; -#endif -} - void MainBar::export_file(shared_ptr format, bool selection_only) { using pv::dialogs::StoreProgress; @@ -603,9 +609,9 @@ void MainBar::export_file(shared_ptr format, bool selection_only) const pv::util::Timestamp& end_time = trace_view->cursors()->second()->time(); const uint64_t start_sample = (uint64_t)max( - (double)0, start_time.convert_to() * samplerate); + 0.0, start_time.convert_to() * samplerate); const uint64_t end_sample = (uint64_t)max( - (double)0, end_time.convert_to() * samplerate); + 0.0, end_time.convert_to() * samplerate); if ((start_sample == 0) && (end_sample == 0)) { // Both cursors are negative and were clamped to 0 @@ -782,6 +788,40 @@ void MainBar::on_actionSaveSelectionAs_triggered() export_file(session_.device_manager().context()->output_formats()["srzip"], true); } +void MainBar::on_actionSaveSetup_triggered() +{ + QSettings settings; + const QString dir = settings.value(SettingSaveDirectory).toString(); + + const QString file_name = QFileDialog::getSaveFileName( + this, tr("Save File"), dir, tr( + "PulseView Session Setups (*.pvs);;" + "All Files (*)")); + + if (file_name.isEmpty()) + return; + + QSettings settings_storage(file_name, QSettings::IniFormat); + session_.save_setup(settings_storage); +} + +void MainBar::on_actionRestoreSetup_triggered() +{ + QSettings settings; + const QString dir = settings.value(SettingSaveDirectory).toString(); + + const QString file_name = QFileDialog::getOpenFileName( + this, tr("Open File"), dir, tr( + "PulseView Session Setups (*.pvs);;" + "All Files (*)")); + + if (file_name.isEmpty()) + return; + + QSettings settings_storage(file_name, QSettings::IniFormat); + session_.restore_setup(settings_storage); +} + void MainBar::on_actionConnect_triggered() { // Stop any currently running capture session @@ -797,6 +837,11 @@ void MainBar::on_actionConnect_triggered() update_device_list(); } +void MainBar::on_add_decoder_clicked() +{ + show_decoder_selector(&session_); +} + void MainBar::add_toolbar_widgets() { addAction(action_new_view_);