]> sigrok.org Git - pulseview.git/blobdiff - pv/views/decoder_output/view.cpp
Allow more than 256 binary output classes
[pulseview.git] / pv / views / decoder_output / view.cpp
index 052d716318c816d0d8392c4de11bdc46c54ccfcf..d8bbb03a0cbf8fb6fda68252bae79852bbc0f4f0 100644 (file)
@@ -58,8 +58,7 @@ View::View(Session &session, bool is_main_view, QMainWindow *parent) :
        class_selector_(new QComboBox()),
        stacked_widget_(new QStackedWidget()),
        hex_view_(new QHexView()),
-       signal_(nullptr),
-       merged_data_(new QByteArray())
+       signal_(nullptr)
 {
        QVBoxLayout *root_layout = new QVBoxLayout(this);
        root_layout->setContentsMargins(0, 0, 0, 0);
@@ -90,7 +89,9 @@ View::View(Session &session, bool is_main_view, QMainWindow *parent) :
        connect(class_selector_, SIGNAL(currentIndexChanged(int)),
                this, SLOT(on_selected_class_changed(int)));
 
-       hex_view_->setData(merged_data_);
+       // Configure widgets
+       decoder_selector_->setSizeAdjustPolicy(QComboBox::AdjustToContents);
+       class_selector_->setSizeAdjustPolicy(QComboBox::AdjustToContents);
 
        reset_view_state();
 }
@@ -188,23 +189,19 @@ void View::restore_settings(QSettings &settings)
 void View::update_data()
 {
        if (!signal_) {
-               merged_data_->clear();
+               hex_view_->clear();
                return;
        }
 
        if (signal_->get_binary_data_chunk_count(current_segment_, decoder_, bin_class_id_) == 0) {
-               merged_data_->clear();
+               hex_view_->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);
+       const DecodeBinaryClass* bin_class =
+               signal_->get_binary_data_class(current_segment_, decoder_, bin_class_id_);
 
-       merged_data_->resize(data.size());
-       memcpy(merged_data_->data(), data.data(), data.size());
-
-       hex_view_->setData(merged_data_);
+       hex_view_->setData(bin_class);
 }
 
 void View::on_selected_decoder_changed(int index)
@@ -226,8 +223,8 @@ void View::on_selected_decoder_changed(int index)
 
        if (signal_) {
                // Populate binary class selector
-               uint8_t bin_classes = decoder_->get_binary_class_count();
-               for (uint8_t i = 0; i < bin_classes; i++) {
+               uint32_t bin_classes = decoder_->get_binary_class_count();
+               for (uint32_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));
                }
@@ -241,7 +238,7 @@ void View::on_selected_decoder_changed(int index)
 
 void View::on_selected_class_changed(int index)
 {
-       bin_class_id_ = class_selector_->itemData(index).value<uint8_t>();
+       bin_class_id_ = class_selector_->itemData(index).value<uint32_t>();
 
        update_data();
 }