X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftabular_decoder%2Fmodel.cpp;h=def753b2fa44b99f8e71d1db508ed103d25b422d;hp=110cfd62b98d2280acea700a1ce130a50eb5f5a3;hb=HEAD;hpb=49a0a40345eb84be2c953c5f83cd0c9ccada6360 diff --git a/pv/views/tabular_decoder/model.cpp b/pv/views/tabular_decoder/model.cpp index 110cfd62..def753b2 100644 --- a/pv/views/tabular_decoder/model.cpp +++ b/pv/views/tabular_decoder/model.cpp @@ -164,8 +164,11 @@ uint8_t AnnotationCollectionModel::first_hidden_column() const QVariant AnnotationCollectionModel::headerData(int section, Qt::Orientation orientation, int role) const { + if ((section < 0) || (section >= (int)header_data_.size())) + return QVariant(); + if ((orientation == Qt::Horizontal) && (role == Qt::DisplayRole)) - return header_data_.at(section); + return header_data_[section]; return QVariant(); } @@ -225,7 +228,9 @@ void AnnotationCollectionModel::set_signal_and_segment(data::DecodeSignal* signa return; } - disconnect(this, SLOT(on_annotation_visibility_changed())); + if (signal_) + for (const shared_ptr& dec : signal_->decoder_stack()) + disconnect(dec.get(), nullptr, this, SLOT(on_annotation_visibility_changed())); all_annotations_ = signal->get_all_annotations_by_segment(current_segment); signal_ = signal; @@ -234,9 +239,10 @@ void AnnotationCollectionModel::set_signal_and_segment(data::DecodeSignal* signa connect(dec.get(), SIGNAL(annotation_visibility_changed()), this, SLOT(on_annotation_visibility_changed())); - if (hide_hidden_) + if (hide_hidden_) { update_annotations_without_hidden(); - else + dataset_ = &all_annotations_without_hidden_; + } else dataset_ = all_annotations_; if (!dataset_ || dataset_->empty()) { @@ -324,9 +330,9 @@ QModelIndex AnnotationCollectionModel::update_highlighted_rows(QModelIndex first // we would need to highlight - only then do we do so QModelIndex index = first; do { - const Annotation* ann = - static_cast(index.internalPointer()); - assert(ann); + const Annotation* ann = static_cast(index.internalPointer()); + if (!ann) // Can happen if the table is being modified at this exact time + return result; if (((int64_t)ann->start_sample() <= sample_num) && ((int64_t)ann->end_sample() >= sample_num)) {