TabularDecView: Model fixes
authorSoeren Apel <soeren@apelpie.net>
Mon, 8 Jun 2020 19:44:27 +0000 (21:44 +0200)
committerSoeren Apel <soeren@apelpie.net>
Mon, 8 Jun 2020 19:44:27 +0000 (21:44 +0200)
pv/views/tabular_decoder/model.cpp
pv/views/tabular_decoder/view.cpp

index 3733e13828afdd8b06775744cc7a8215fe05b582..110cfd62b98d2280acea700a1ce130a50eb5f5a3 100644 (file)
@@ -213,6 +213,8 @@ int AnnotationCollectionModel::columnCount(const QModelIndex& parent_idx) const
 
 void AnnotationCollectionModel::set_signal_and_segment(data::DecodeSignal* signal, uint32_t current_segment)
 {
+       layoutAboutToBeChanged();
+
        if (!signal) {
                all_annotations_ = nullptr;
                dataset_ = nullptr;
@@ -262,6 +264,8 @@ void AnnotationCollectionModel::set_signal_and_segment(data::DecodeSignal* signa
 
 void AnnotationCollectionModel::set_hide_hidden(bool hide_hidden)
 {
+       layoutAboutToBeChanged();
+
        hide_hidden_ = hide_hidden;
 
        if (hide_hidden_) {
@@ -335,10 +339,8 @@ QModelIndex AnnotationCollectionModel::update_highlighted_rows(QModelIndex first
                } while (index != last);
        }
 
-       if (has_highlight || had_highlight_before_) {
+       if (has_highlight || had_highlight_before_)
                dataChanged(first, last);
-               layoutChanged();
-       }
 
        had_highlight_before_ = has_highlight;
 
@@ -350,6 +352,8 @@ void AnnotationCollectionModel::on_annotation_visibility_changed()
        if (!hide_hidden_)
                return;
 
+       layoutAboutToBeChanged();
+
        update_annotations_without_hidden();
 
        if (dataset_)
index 14ae50a2941e8d56d8a532bd1505b566f67921b4..4715b4a90b5070444238779e682f42a4dc98eb7e 100644 (file)
@@ -599,7 +599,10 @@ void View::on_table_item_clicked(const QModelIndex& index)
 
 void View::on_table_item_double_clicked(const QModelIndex& index)
 {
-       const Annotation* ann = static_cast<const Annotation*>(index.internalPointer());
+       const QModelIndex src_idx = filter_proxy_model_->mapToSource(index);
+
+       const Annotation* ann = static_cast<const Annotation*>(src_idx.internalPointer());
+       assert(ann);
 
        shared_ptr<views::ViewBase> main_view = session_.main_view();
 
@@ -613,7 +616,8 @@ void View::on_table_header_requested(const QPoint& pos)
        for (int i = 0; i < table_view_->horizontalHeader()->count(); i++) {
                int column = table_view_->horizontalHeader()->logicalIndex(i);
 
-               const QString title = model_->headerData(column, Qt::Horizontal, Qt::DisplayRole).toString();
+               const QString title =
+                       filter_proxy_model_->headerData(column, Qt::Horizontal, Qt::DisplayRole).toString();
                QAction* action = new QAction(title, this);
 
                action->setCheckable(true);
@@ -671,6 +675,9 @@ void View::on_metadata_object_changed(MetadataObject* obj,
                                const QModelIndex idx = filter_proxy_model_->mapFromSource(first_highlighted_idx);
                                table_view_->scrollTo(idx, QAbstractItemView::EnsureVisible);
                        }
+
+                       // Force repaint, otherwise the table doesn't immediately update for some reason
+                       table_view_->viewport()->update();
                }
        }
 }