X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Fdecoder_binary%2Fview.cpp;h=05d5ed4612c9ba7b5897ca67076b04f9f42d4ca8;hb=978dbc9a3e3c4bf8b42f00a269d04d0dca62b1a5;hp=797321fc2a67f7665275bf3316fb1a44097dde93;hpb=24d69d27584c7adec70bc0d6db764a3db04fce3c;p=pulseview.git diff --git a/pv/views/decoder_binary/view.cpp b/pv/views/decoder_binary/view.cpp index 797321fc..05d5ed46 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_); @@ -120,7 +120,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 +129,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; @@ -371,8 +379,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 +474,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_)