Removing the "resetInternalData" slot in QAbstractProxyModel
authorGabriel de Dietrich <gabriel.dietrich-de@nokia.com>
Tue, 26 Apr 2011 14:20:39 +0000 (16:20 +0200)
committerOlivier Goffart <olivier.goffart@nokia.com>
Tue, 10 May 2011 10:54:49 +0000 (12:54 +0200)
This reverts commits 0916a68056154ecb60e4ea2c79726ab2e49b1532 and
6f1384fcbeea993d5be47590c696de60215b7608.

This effectively reverts most of MR 694.

Reviewed-by: Olivier
(cherry picked from commit 06e104b9c305d3db0dd1848e6e633ee3888fd1de)

doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp
src/gui/itemviews/qabstractproxymodel.cpp
src/gui/itemviews/qabstractproxymodel.h
tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp

index cf40f9a..5919c01 100644 (file)
@@ -86,38 +86,3 @@ beginMoveRows(parent, 2, 2, parent, 0);
 //! [9]
 beginMoveRows(parent, 2, 2, parent, 4);
 //! [9]
-
-
-//! [10]
-class CustomDataProxy : public QSortFilterProxyModel
-{
-    Q_OBJECT
-public:
-    CustomDataProxy(QObject *parent)
-      : QSortFilterProxyModel(parent)
-    {
-    }
-
-    ...
-
-    QVariant data(const QModelIndex &index, int role)
-    {
-        if (role != Qt::BackgroundRole)
-            return QSortFilterProxyModel::data(index, role);
-
-        if (m_customData.contains(index.row()))
-            return m_customData.value(index.row());
-        return QSortFilterProxyModel::data(index, role);
-    }
-
-private slots:
-    void resetInternalData()
-    {
-        m_customData.clear();
-    }
-
-private:
-  QHash<int, QVariant> m_customData;
-};
-//! [10]
-
index 34ca7df..82b6c8d 100644 (file)
@@ -121,15 +121,12 @@ QAbstractProxyModel::~QAbstractProxyModel()
 void QAbstractProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
 {
     Q_D(QAbstractProxyModel);
-    if (d->model) {
+    if (d->model)
         disconnect(d->model, SIGNAL(destroyed()), this, SLOT(_q_sourceModelDestroyed()));
-        disconnect(d->model, SIGNAL(modelReset()), this, SLOT(resetInternalData()));
-    }
 
     if (sourceModel) {
         d->model = sourceModel;
         connect(d->model, SIGNAL(destroyed()), this, SLOT(_q_sourceModelDestroyed()));
-        connect(d->model, SIGNAL(modelReset()), this, SLOT(resetInternalData()));
     } else {
         d->model = QAbstractItemModelPrivate::staticEmptyModel();
     }
@@ -383,25 +380,6 @@ Qt::DropActions QAbstractProxyModel::supportedDropActions() const
     return d->model->supportedDropActions();
 }
 
-/*
-    \since 4.8
-
-    This slot is called just after the internal data of a model is cleared
-    while it is being reset.
-
-    This slot is provided the convenience of subclasses of concrete proxy
-    models, such as subclasses of QSortFilterProxyModel which maintain extra
-    data.
-
-    \snippet doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp 10
-
-    \sa modelAboutToBeReset(), modelReset()
-*/
-void QAbstractProxyModel::resetInternalData()
-{
-
-}
-
 QT_END_NAMESPACE
 
 #include "moc_qabstractproxymodel.cpp"
index 6e485ae..4f3bc18 100644 (file)
@@ -95,9 +95,6 @@ public:
     QStringList mimeTypes() const;
     Qt::DropActions supportedDropActions() const;
 
-protected Q_SLOTS:
-    void resetInternalData();
-
 protected:
     QAbstractProxyModel(QAbstractProxyModelPrivate &, QObject *parent);
 
index d26f0cd..8e7f393 100644 (file)
@@ -149,7 +149,6 @@ private slots:
 
     void testMultipleProxiesWithSelection();
     void mapSelectionFromSource();
-    void testResetInternalData();
     void filteredColumns();
 
 protected:
@@ -3183,142 +3182,6 @@ void tst_QSortFilterProxyModel::taskQTBUG_10287_unnecessaryMapCreation()
     // No assert failure, it passes.
 }
 
-/**
- * A proxy which changes the background color for items ending in 'y' or 'r'
- */
-class CustomDataProxy : public QSortFilterProxyModel
-{
-    Q_OBJECT
-
-public:
-    CustomDataProxy(QObject *parent = 0)
-        : QSortFilterProxyModel(parent)
-    {
-        setDynamicSortFilter(true);
-    }
-
-    void setSourceModel(QAbstractItemModel *sourceModel)
-    {
-        // It would be possible to use only the modelReset signal of the source model to clear
-        // the data in *this, however, this requires that the slot is connected
-        // before QSortFilterProxyModel::setSourceModel is called, and even then depends
-        // on the order of invokation of slots being the same as the order of connection.
-        // ie, not reliable.
-//         connect(sourceModel, SIGNAL(modelReset()), SLOT(resetInternalData()));
-        QSortFilterProxyModel::setSourceModel(sourceModel);
-        // Making the connect after the setSourceModel call clears the data too late.
-//         connect(sourceModel, SIGNAL(modelReset()), SLOT(resetInternalData()));
-
-        // This could be done in data(), but the point is to need to cache something in the proxy
-        // which needs to be cleared on reset.
-        for (int i = 0; i < sourceModel->rowCount(); ++i)
-        {
-            if (sourceModel->index(i, 0).data().toString().endsWith(QLatin1Char('y')))
-            {
-                m_backgroundColours.insert(i, Qt::blue);
-            } else if (sourceModel->index(i, 0).data().toString().endsWith(QLatin1Char('r')))
-            {
-                m_backgroundColours.insert(i, Qt::red);
-            }
-        }
-    }
-
-    QVariant data(const QModelIndex &index, int role) const
-    {
-        if (role != Qt::BackgroundRole)
-            return QSortFilterProxyModel::data(index, role);
-        return m_backgroundColours.value(index.row());
-    }
-
-private slots:
-  void resetInternalData()
-  {
-      m_backgroundColours.clear();
-  }
-
-private:
-    QHash<int, QColor> m_backgroundColours;
-};
-
-class ModelObserver : public QObject
-{
-    Q_OBJECT
-public:
-  ModelObserver(QAbstractItemModel *model, QObject *parent = 0)
-    : QObject(parent), m_model(model)
-  {
-    connect(m_model, SIGNAL(modelAboutToBeReset()), SLOT(modelAboutToBeReset()));
-    connect(m_model, SIGNAL(modelReset()), SLOT(modelReset()));
-  }
-
-public slots:
-  void modelAboutToBeReset()
-  {
-    int reds = 0, blues = 0;
-    for (int i = 0; i < m_model->rowCount(); ++i)
-    {
-      QColor color = m_model->index(i, 0).data(Qt::BackgroundRole).value<QColor>();
-      if (color == Qt::blue)
-        ++blues;
-      if (color == Qt::red)
-        ++reds;
-    }
-    QCOMPARE(blues, 11);
-    QCOMPARE(reds, 4);
-  }
-
-  void modelReset()
-  {
-    int reds = 0, blues = 0;
-    for (int i = 0; i < m_model->rowCount(); ++i)
-    {
-      QColor color = m_model->index(i, 0).data(Qt::BackgroundRole).value<QColor>();
-      if (color == Qt::blue)
-        ++blues;
-      if (color == Qt::red)
-        ++reds;
-    }
-    QCOMPARE(reds, 0);
-    QCOMPARE(blues, 0);
-  }
-
-private:
-  QAbstractItemModel * const m_model;
-
-};
-
-void tst_QSortFilterProxyModel::testResetInternalData()
-{
-
-    QStringListModel model(QStringList() << "Monday"
-                                         << "Tuesday"
-                                         << "Wednesday"
-                                         << "Thursday"
-                                         << "Friday"
-                                         << "January"
-                                         << "February"
-                                         << "March"
-                                         << "April"
-                                         << "May"
-                                         << "Saturday"
-                                         << "June"
-                                         << "Sunday"
-                                         << "July"
-                                         << "August"
-                                         << "September"
-                                         << "October"
-                                         << "November"
-                                         << "December");
-
-    CustomDataProxy proxy;
-    proxy.setSourceModel(&model);
-
-    ModelObserver observer(&proxy);
-
-    // Cause the source model to reset.
-    model.setStringList(QStringList() << "Spam" << "Eggs");
-}
-
 class FilteredColumnProxyModel : public QSortFilterProxyModel
 {
   Q_OBJECT