From 9145c173d29cef3a1f2eb0ccc28a6288455a46b2 Mon Sep 17 00:00:00 2001 From: David Faure Date: Wed, 10 Jan 2018 18:08:57 +0100 Subject: [PATCH] KRearrangeColumnsProxyModel: fix crash when there's no source model --- autotests/krearrangecolumnsproxymodeltest.cpp | 10 ++++++++++ src/krearrangecolumnsproxymodel.cpp | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/autotests/krearrangecolumnsproxymodeltest.cpp b/autotests/krearrangecolumnsproxymodeltest.cpp index 7ff621f..a84c8a2 100644 --- a/autotests/krearrangecolumnsproxymodeltest.cpp +++ b/autotests/krearrangecolumnsproxymodeltest.cpp @@ -65,6 +65,16 @@ private Q_SLOTS: // showModel(&mod); } + void shouldShowNothingIfNoSourceModel() + { + // Given a rearrange-columns proxy with no source model + KRearrangeColumnsProxyModel pm; + + // Then the proxy should show nothing (no columns selected) + QCOMPARE(pm.rowCount(), 0); + QCOMPARE(pm.columnCount(), 0); + } + void shouldShowNothingIfNoColumnSelection() { // Given a rearrange-columns proxy diff --git a/src/krearrangecolumnsproxymodel.cpp b/src/krearrangecolumnsproxymodel.cpp index 5925809..3f5eede 100644 --- a/src/krearrangecolumnsproxymodel.cpp +++ b/src/krearrangecolumnsproxymodel.cpp @@ -44,12 +44,18 @@ void KRearrangeColumnsProxyModel::setSourceColumns(const QVector &columns) int KRearrangeColumnsProxyModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); + if (!sourceModel()) { + return 0; + } return d_ptr->m_sourceColumns.count(); } int KRearrangeColumnsProxyModel::rowCount(const QModelIndex &parent) const { Q_ASSERT(parent.isValid() ? parent.model() == this : true); + if (!sourceModel()) { + return 0; + } // The parent in the source model is on column 0, whatever swapping we are doing const QModelIndex sourceParent = mapToSource(parent).sibling(parent.row(), 0); return sourceModel()->rowCount(sourceParent);