[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.4/kdelibs/kdeui/itemviews
From:       Stephen Kelly <steveire () gmail ! com>
Date:       2010-02-05 14:47:06
Message-ID: 1265381226.645307.11636.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1085604 by skelly:

Backport the bugfixed selection proxy model from trunk.

 M  +26 -13    kselectionproxymodel.cpp  


--- branches/KDE/4.4/kdelibs/kdeui/itemviews/kselectionproxymodel.cpp \
#1085603:1085604 @@ -304,9 +304,6 @@
 {
   Q_Q(KSelectionProxyModel);
 
-  if (!m_selectionModel->hasSelection())
-    return;
-
   // Deselecting an index in the selectionModel will cause it to
   // be removed from m_rootIndexList, so we don't need to clear
   // the list here manually.
@@ -325,13 +322,12 @@
 {
   Q_Q(KSelectionProxyModel);
 
-  if (!m_selectionModel->hasSelection())
-    return;
-
   // No need to try to refill this. When the model is reset it doesn't have a \
meaningful selection anymore,  // but when it gets one we'll be notified anyway.
   resetInternalData();
+  m_selectionModel->clearSelection();
   m_resetting = false;
+  createProxyChain();
   q->endResetModel();
 }
 
@@ -372,11 +368,14 @@
     parentPosition--;
 
     parentAbove = m_rootIndexList.at(parentPosition);
+    Q_ASSERT(parentAbove.isValid());
 
     int rows = q->sourceModel()->rowCount(parentAbove);
     if ( rows > 0 )
     {
-      QModelIndex proxyChildAbove = q->mapFromSource(q->sourceModel()->index(rows - \
1, 0, parentAbove)); +      QModelIndex sourceIndexAbove = \
q->sourceModel()->index(rows - 1, 0, parentAbove); +      \
Q_ASSERT(sourceIndexAbove.isValid()); +      QModelIndex proxyChildAbove = \
q->mapFromSource(sourceIndexAbove);  Q_ASSERT(proxyChildAbove.isValid());
       return proxyChildAbove.row() + 1;
     }
@@ -618,6 +617,7 @@
     {
       // The easy case.
       bool allowMove = q->beginMoveRows(q->mapFromSource(srcParent), srcStart, \
srcEnd, q->mapFromSource(destParent), destRow); +      Q_UNUSED( allowMove ); // \
prevent warning in release builds.  Q_ASSERT( allowMove );
     } else {
       // source is in the proxy, but dest isn't.
@@ -1112,17 +1112,16 @@
           q->beginInsertRows(QModelIndex(), startRow, startRow + rowCount - 1);
         Q_ASSERT(newIndex.isValid());
         m_rootIndexList.insert(rootListRow, newIndex);
+        emit q->rootIndexAdded(newIndex);
         if (!m_resetting)
         {
-          emit q->rootIndexAdded(newIndex);
           q->endInsertRows();
         }
       } else {
         // Even if the newindex doesn't have any children to put into the model yet,
         // We still need to make sure it's future children are inserted into the \
model.  m_rootIndexList.insert(rootListRow, newIndex);
-        if (!m_resetting)
-          emit q->rootIndexAdded(newIndex);
+        emit q->rootIndexAdded(newIndex);
       }
     } else {
       QModelIndexList list = toNonPersistent(m_rootIndexList);
@@ -1132,9 +1131,9 @@
         q->beginInsertRows(QModelIndex(), row, row);
       Q_ASSERT(newIndex.isValid());
       m_rootIndexList.insert(row, newIndex);
+      emit q->rootIndexAdded(newIndex);
       if (!m_resetting)
       {
-        emit q->rootIndexAdded(newIndex);
         q->endInsertRows();
       }
     }
@@ -1415,7 +1414,21 @@
       d->m_map.insert(sourceIndex.internalPointer(), \
                QPersistentModelIndex(sourceIndex));
       return createIndex( row, sourceIndex.column(), sourceIndex.internalPointer() \
);  }
-    return QModelIndex();
+    QModelIndex sourceParent = sourceIndex.parent();
+    int parentRow = d->m_rootIndexList.indexOf( sourceParent );
+    if ( parentRow == -1 )
+      return QModelIndex();
+
+    int proxyRow = sourceIndex.row();
+    while (parentRow > 0)
+    {
+      --parentRow;
+      QModelIndex selectedIndexAbove = d->m_rootIndexList.at( parentRow );
+      proxyRow += sourceModel()->rowCount(selectedIndexAbove);
+    }
+
+    d->m_map.insert(sourceIndex.internalPointer(), \
QPersistentModelIndex(sourceIndex)); +    return createIndex( proxyRow, \
sourceIndex.column(), sourceIndex.internalPointer() );  } else if ( d->isInModel( \
sourceIndex ) )  {
     int targetRow = sourceIndex.row();
@@ -1662,7 +1675,7 @@
 
   QModelIndexList list;
   QModelIndex proxyIndex;
-  foreach(const QModelIndex idx, sourceModel()->match(mapToSource(start), role, \
value, hits, flags)) +  foreach(const QModelIndex &idx, \
sourceModel()->match(mapToSource(start), role, value, hits, flags))  {
     proxyIndex = mapFromSource(idx);
     if (proxyIndex.isValid())


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic