X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Fdecoder_binary%2Fview.cpp;h=b5daaf0f84ef472dd7586cb9ab423a13cec6f156;hp=5f55b19104d9449e12fc4556861c7546f04be46c;hb=HEAD;hpb=121307b3c50d981638cbe1e33ba5410bb2b11dd1 diff --git a/pv/views/decoder_binary/view.cpp b/pv/views/decoder_binary/view.cpp index 5f55b191..6e61fa3a 100644 --- a/pv/views/decoder_binary/view.cpp +++ b/pv/views/decoder_binary/view.cpp @@ -90,7 +90,7 @@ View::View(Session &session, bool is_main_view, QMainWindow *parent) : toolbar->addWidget(save_button_); // Add format types - format_selector_->addItem(tr("Hexdump"), qVariantFromValue(QString("text/hexdump"))); + format_selector_->addItem(tr("Hexdump"), QVariant(QString("text/hexdump"))); // Add widget stack root_layout->addWidget(stacked_widget_); @@ -110,7 +110,11 @@ View::View(Session &session, bool is_main_view, QMainWindow *parent) : save_action_->setText(tr("&Save...")); save_action_->setIcon(QIcon::fromTheme("document-save-as", QIcon(":/icons/document-save-as.png"))); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + save_action_->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_S)); +#else save_action_->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); +#endif connect(save_action_, SIGNAL(triggered(bool)), this, SLOT(on_actionSave_triggered())); @@ -120,7 +124,7 @@ View::View(Session &session, bool is_main_view, QMainWindow *parent) : for (int i = 0; i < SaveTypeCount; i++) { QAction *const action = save_menu->addAction(tr(SaveTypeNames[i])); - action->setData(qVariantFromValue(i)); + action->setData(QVariant::fromValue(i)); } save_button_->setMenu(save_menu); @@ -129,9 +133,17 @@ View::View(Session &session, bool is_main_view, QMainWindow *parent) : parent->setSizePolicy(hex_view_->sizePolicy()); // TODO Must be updated when selected widget changes + // Set up metadata event handler + session_.metadata_obj_manager()->add_observer(this); + reset_view_state(); } +View::~View() +{ + session_.metadata_obj_manager()->remove_observer(this); +} + ViewType View::get_type() const { return ViewTypeDecoderBinary; @@ -206,14 +218,14 @@ void View::remove_decode_signal(shared_ptr signal) void View::save_settings(QSettings &settings) const { - (void)settings; + ViewBase::save_settings(settings); } void View::restore_settings(QSettings &settings) { // Note: It is assumed that this function is only called once, // immediately after restoring a previous session. - (void)settings; + ViewBase::restore_settings(settings); } void View::reset_data() @@ -319,10 +331,18 @@ void View::save_data_as_hex_dump(bool with_offset, bool with_ascii) const while (offset < selection.second) { size_t end = std::min((uint64_t)(selection.second), offset + n); offset = hex_view_->create_hex_line(offset, end, &s, with_offset, with_ascii); +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + out_stream << s << Qt::endl; +#else out_stream << s << endl; +#endif } +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + out_stream << Qt::endl; +#else out_stream << endl; +#endif if (out_stream.status() != QTextStream::Ok) { QMessageBox msg(parent_); @@ -371,8 +391,9 @@ void View::on_selected_class_changed(int index) { bin_class_id_ = class_selector_->itemData(index).value(); - binary_data_exists_ = - signal_->get_binary_data_chunk_count(current_segment_, decoder_, bin_class_id_); + binary_data_exists_ = (signal_) ? + signal_->get_binary_data_chunk_count(current_segment_, decoder_, bin_class_id_) : + false; update_data(); } @@ -465,6 +486,25 @@ void View::on_actionSave_triggered(QAction* action) } } +void View::on_metadata_object_changed(MetadataObject* obj, + MetadataValueType value_type) +{ + // Check if we need to update the model's data range. We only work on the + // end sample value because the start sample value is updated first and + // we need both + if ((obj->type() == MetadataObjMainViewRange) && + (value_type == MetadataValueEndSample)) { + + int64_t start_sample = obj->value(MetadataValueStartSample).toLongLong(); + int64_t end_sample = obj->value(MetadataValueEndSample).toLongLong(); + + hex_view_->set_visible_sample_range(start_sample, end_sample); + } + + if (obj->type() == MetadataObjMousePos) + hex_view_->set_highlighted_data_sample(obj->value(MetadataValueStartSample).toLongLong()); +} + void View::perform_delayed_view_update() { if (signal_ && !binary_data_exists_)