diff -r 49c70dcc3f17 -r c863538fcbb6 hgcacheproxymodel/src/hgcacheproxymodel.cpp --- a/hgcacheproxymodel/src/hgcacheproxymodel.cpp Fri May 14 16:57:01 2010 +0300 +++ b/hgcacheproxymodel/src/hgcacheproxymodel.cpp Thu May 27 13:59:05 2010 +0300 @@ -13,7 +13,7 @@ * * Description: * -* Version : %version: 7 % +* Version : %version: 10 % */ #include #include @@ -251,9 +251,9 @@ void HgCacheProxyModel::sort(int column, Qt::SortOrder order) { mSupressBM = true; - cleanupForBMReset(); + sourceModelAboutToBeReset(); mSortFilterProxyModel->sort(column, order); - resetBM(); + sourceModelReset(); } QModelIndex HgCacheProxyModel::buddy(const QModelIndex &index) const @@ -282,9 +282,9 @@ { if (sortCaseSensitivity() != cs){ mSupressBM = true; - cleanupForBMReset(); + sourceModelAboutToBeReset(); mSortFilterProxyModel->setSortCaseSensitivity(cs); - resetBM(); + sourceModelReset(); } } @@ -297,9 +297,9 @@ { if (isSortLocaleAware() != on){ mSupressBM = true; - cleanupForBMReset(); + sourceModelAboutToBeReset(); mSortFilterProxyModel->setSortLocaleAware(on); - resetBM(); + sourceModelReset(); } } @@ -322,9 +322,9 @@ { if (dynamicSortFilter() != enable){ mSupressBM = true; - cleanupForBMReset(); + sourceModelAboutToBeReset(); mSortFilterProxyModel->setDynamicSortFilter(enable); - resetBM(); + sourceModelReset(); } } @@ -337,9 +337,9 @@ { if (sortRole() != role){ mSupressBM = true; - cleanupForBMReset(); + sourceModelAboutToBeReset(); mSortFilterProxyModel->setSortRole(role); - resetBM(); + sourceModelReset(); } } @@ -352,9 +352,9 @@ { if (filterRegExp() != regExp){ mSupressBM = true; - cleanupForBMReset(); + sourceModelAboutToBeReset(); mSortFilterProxyModel->setFilterRegExp(regExp); - resetBM(); + sourceModelReset(); } } @@ -367,9 +367,9 @@ { if (filterKeyColumn() != column){ mSupressBM = true; - cleanupForBMReset(); + sourceModelAboutToBeReset(); mSortFilterProxyModel->setFilterKeyColumn(column); - resetBM(); + sourceModelReset(); } } @@ -382,9 +382,9 @@ { if ( filterCaseSensitivity() != cs){ mSupressBM = true; - cleanupForBMReset(); + sourceModelAboutToBeReset(); mSortFilterProxyModel->setFilterCaseSensitivity(cs); - resetBM(); + sourceModelReset(); } } @@ -397,9 +397,9 @@ { if ( filterRole() != role ){ mSupressBM = true; - cleanupForBMReset(); + sourceModelAboutToBeReset(); mSortFilterProxyModel->setFilterRole(role); - resetBM(); + sourceModelReset(); } } @@ -452,7 +452,7 @@ list.append(idx); } } - if (mDataProviderModel) + if (mDataProviderModel && list.count()>0) mDataProviderModel->request(list, mSupressBM); TX_EXIT } @@ -482,20 +482,6 @@ return mSortFilterProxyModel->mapFromSource( mDataProviderModel->index(myIndex, 0) ).row(); } -void HgCacheProxyModel::cleanupForBMReset() -{ - releaseAll(); -} - -void HgCacheProxyModel::resetBM() -{ - if (mBufferManager){ - mCurrentPos = 0; - mBufferManager->resetBuffer( mCurrentPos, count() ); - } - mSupressBM = false; -} - void HgCacheProxyModel::releaseAll() { if ( mDataProviderModel ){ @@ -579,8 +565,9 @@ QModelIndex begin = index( topLeft.row(), topLeft.column() ); QModelIndex end = index( bottomRight.row(), bottomRight.column() ); - if (begin.isValid() && end.isValid() && !mSupressBM) + if (begin.isValid() && end.isValid() && !mSupressBM){ emit dataChanged(begin, end); + } TX_EXIT } @@ -640,7 +627,9 @@ TX_ENTRY if (mBufferManager && !mSupressBM){ beginInsertRows(parent, start, end); -// mBufferManager->aboutToInsertItems(start, end); + for ( int i=start; i <=end; i++){ + mBufferManager->aboutToInsertItem(i); + } } TX_EXIT } @@ -658,7 +647,9 @@ TX_ENTRY if (mBufferManager && !mSupressBM){ beginRemoveRows(parent, start, end); -// mBufferManager->aboutToRemoveItems(start, end); + for ( int i=start; i <=end; i++){ + mBufferManager->aboutToRemoveItem(i); + } } TX_EXIT } @@ -669,7 +660,9 @@ Q_UNUSED(parent); Q_UNUSED(end); if (mBufferManager && !mSupressBM){ - mBufferManager->itemCountChanged(start, false, count()); + for ( int i=start; i <=end; i++){ + mBufferManager->insertedItem(i); + } endInsertRows(); } TX_EXIT @@ -694,7 +687,9 @@ Q_UNUSED(parent); Q_UNUSED(end); if (mBufferManager && !mSupressBM){ - mBufferManager->itemCountChanged(start, true, count()); + for ( int i=start; i <=end; i++){ + mBufferManager->removedItem(i); + } endRemoveRows(); } TX_EXIT @@ -713,8 +708,9 @@ end = index(mapFromDataProviderIndex(to),0); } - if (begin.isValid() && end.isValid() && !mSupressBM) + if (begin.isValid() && end.isValid() && !mSupressBM){ emit dataChanged(begin, end ); + } } //eof