+void View::update_data()
+{
+ if (!signal_) {
+ merged_data_->clear();
+ return;
+ }
+
+ if (signal_->get_binary_data_chunk_count(current_segment_, decoder_, bin_class_id_) == 0) {
+ merged_data_->clear();
+ return;
+ }
+
+ vector<uint8_t> data;
+ signal_->get_binary_data_chunks_merged(current_segment_, decoder_, bin_class_id_,
+ 0, numeric_limits<uint64_t>::max(), &data);
+
+ merged_data_->resize(data.size());
+ memcpy(merged_data_->data(), data.data(), data.size());
+
+ hex_view_->setData(merged_data_);
+}
+
+void View::on_selected_decoder_changed(int index)
+{
+ if (signal_)
+ disconnect(signal_, SIGNAL(new_binary_data(unsigned int, void*, unsigned int)));
+
+ decoder_ = (Decoder*)decoder_selector_->itemData(index).value<void*>();
+
+ // Find the signal that contains the selected decoder
+ signal_ = nullptr;
+
+ for (const shared_ptr<DecodeSignal>& ds : decode_signals_)
+ for (const shared_ptr<Decoder>& dec : ds->decoder_stack())
+ if (decoder_ == dec.get())
+ signal_ = ds.get();
+
+ class_selector_->clear();
+
+ if (signal_) {
+ // Populate binary class selector
+ uint8_t bin_classes = decoder_->get_binary_class_count();
+ for (uint8_t i = 0; i < bin_classes; i++) {
+ const data::decode::DecodeBinaryClassInfo* class_info = decoder_->get_binary_class(i);
+ class_selector_->addItem(class_info->name, QVariant::fromValue(i));
+ }
+
+ connect(signal_, SIGNAL(new_binary_data(unsigned int, void*, unsigned int)),
+ this, SLOT(on_new_binary_data(unsigned int, void*, unsigned int)));
+ }
+
+ update_data();
+}
+
+void View::on_selected_class_changed(int index)
+{
+ bin_class_id_ = class_selector_->itemData(index).value<uint8_t>();
+
+ update_data();
+}
+