### Eclipse Workspace Patch 1.0 #P org.eclipse.jface Index: src/org/eclipse/jface/viewers/TableViewer.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/viewers/TableViewer.java,v retrieving revision 1.61 diff -u -r1.61 TableViewer.java --- src/org/eclipse/jface/viewers/TableViewer.java 17 Aug 2006 19:34:41 -0000 1.61 +++ src/org/eclipse/jface/viewers/TableViewer.java 22 Aug 2006 22:04:34 -0000 @@ -13,6 +13,7 @@ package org.eclipse.jface.viewers; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -143,18 +144,80 @@ */ public void notVisibleAdded(Object element, int index) { - int requiredCount = index + 1; + int requiredCount = getTable().getItemCount() + 1; - if (requiredCount > getTable().getItemCount()) { - getTable().setItemCount(requiredCount); - Object[] newCache = new Object[requiredCount]; - System.arraycopy(cachedElements, 0, newCache, 0, - cachedElements.length); - cachedElements = newCache; + Object[] newCache = new Object[requiredCount]; + System.arraycopy(cachedElements, 0, newCache, 0, index); + if (index < cachedElements.length) { + System.arraycopy(cachedElements, index, newCache, index + 1, cachedElements.length - index); } + newCache[index] = element; + cachedElements = newCache; - cachedElements[index] = element; + getTable().setItemCount(requiredCount); + } + + /** + * The elements with the given indices need to be removed from the cache. + * @param indices + */ + public void removeIndices(int[] indices) { + if (indices.length==1) { + removeIndicesFromTo(indices[0], indices[0]); + } + int requiredCount = getTable().getItemCount() - indices.length; + + Arrays.sort(indices); + Object[] newCache = new Object[requiredCount]; + int indexInNewCache = 0; + int nextToSkip = 0; + for (int i=0; i