1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-04 15:45:25 +02:00

[167620] improve performance of large select

This commit is contained in:
David McKnight 2006-12-12 21:35:06 +00:00
parent 67077ca826
commit cea85b4644
3 changed files with 148 additions and 35 deletions

View file

@ -38,10 +38,12 @@ import org.eclipse.jface.action.Separator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.rse.core.SystemBasePlugin;
import org.eclipse.rse.core.filters.ISystemFilterReference;
import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.model.ISystemContainer;
import org.eclipse.rse.core.model.ISystemMessageObject;
import org.eclipse.rse.core.model.ISystemRegistry;
import org.eclipse.rse.core.model.ISystemResourceSet;
@ -121,6 +123,7 @@ import org.eclipse.rse.ui.view.ISystemEditableRemoteObject;
import org.eclipse.rse.ui.view.ISystemMementoConstants;
import org.eclipse.rse.ui.view.ISystemPropertyConstants;
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
import org.eclipse.rse.ui.view.ISystemTree;
import org.eclipse.rse.ui.view.ISystemViewDropDestination;
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
import org.eclipse.rse.ui.view.SystemDNDTransferRunnable;
@ -236,7 +239,7 @@ public class SystemViewRemoteFileAdapter
*/
public void setFilterString(String filterString)
{
if (filesOnly && (filterString != null) && (filterString.indexOf("/ns") == -1))
if (filesOnly && (filterString != null) && (filterString.indexOf("/ns") == -1)) //$NON-NLS-1$
filterString = filterString + " /ns";
else if (foldersOnly && (filterString != null) && (filterString.indexOf("/nf") == -1))
filterString = filterString + " /nf";
@ -1064,6 +1067,26 @@ public class SystemViewRemoteFileAdapter
{
return getPropertyValue(key, true);
}
public Object getPropertyValue(Object key)
{
String name = (String)key;
if (name.equals(P_NBRCHILDREN))
{
IRemoteFile file = (IRemoteFile) propertySourceInput;
if (file instanceof ISystemContainer)
{
ISystemContainer container = (ISystemContainer)file;
Object[] contents = container.getContents(RemoteChildrenContentsType.getInstance());
if (contents == null)
return "0";
else
return Integer.toString(contents.length);
}
}
return super.getPropertyValue(key);
}
/**
* Returns the current value for the named property.

View file

@ -1398,33 +1398,39 @@ public class SystemView extends TreeViewer implements ISystemTree, ISystemResour
protected Item[] sortSelection(Widget parentItem, Item[] oldResult) {
Item[] newResult = new Item[oldResult.length];
for (int i = 0; i < oldResult.length; i++) {
Item first = removeFirstItem(parentItem, oldResult);
Item[] children = null;
if (parentItem instanceof Item) {
if (oldResult == null)
children = getItems((Item) parentItem);
else
children = oldResult;
} else
children = getChildren(parentItem);
/*
for (int i = 0; i < oldResult.length; i++)
{
Item first = removeFirstItem(oldResult, children);
newResult[i] = first;
}
return newResult;
*/
return oldResult;
}
protected Item removeFirstItem(Widget parentItem, Item[] items) {
protected Item removeFirstItem(Item[] items, Item[] children) {
int firstIndex = 0;
Item firstItem = null;
int firstItemPosition = 0;
Item[] children = null;
if (parentItem instanceof Item) {
if (items == null)
children = getItems((Item) parentItem);
else
children = items;
} else
children = getChildren(parentItem);
if (items != null)
{
for (int i = 0; i < items.length; i++) {
if (items[i] != null) {
if (items[i] != null)
{
Item current = items[i];
int position = getTreeItemPosition(parentItem, current, children);
int position = getTreeItemPosition(current, children);
if (firstItem == null || position < firstItemPosition) {
firstItem = current;
@ -1479,7 +1485,7 @@ public class SystemView extends TreeViewer implements ISystemTree, ISystemResour
for (int idx = 0; idx < src.length; idx++)
{
oldPositions[idx] = getTreeItemPosition(parentItem, oldItems[idx], children) + 1;
oldPositions[idx] = getTreeItemPosition(oldItems[idx], children) + 1;
}
if (delta > 0) // moving down, process backwards
@ -1522,7 +1528,7 @@ public class SystemView extends TreeViewer implements ISystemTree, ISystemResour
/**
* Get the position of a tree item within its parent
*/
protected int getTreeItemPosition(Widget parentItem, Item childItem, Item[] children) {
protected int getTreeItemPosition(Item childItem, Item[] children) {
int pos = -1;
for (int idx = 0; (pos == -1) && (idx < children.length); idx++) {
if (children[idx] == childItem) pos = idx;
@ -3748,7 +3754,7 @@ public class SystemView extends TreeViewer implements ISystemTree, ISystemResour
children = getChildren(parentItem);
for (int idx = 0; idx < src.length; idx++) {
oldPositions[idx] = getTreeItemPosition(parentItem, oldItems[idx], children) + 1;
oldPositions[idx] = getTreeItemPosition(oldItems[idx], children) + 1;
//logDebugMsg("::: Old position : " + oldPositions[idx]);
}
@ -5005,6 +5011,45 @@ public class SystemView extends TreeViewer implements ISystemTree, ISystemResour
return getItemCount((Control) w);
}
protected Widget doFindItem(Object element) {
// compare with root
Object root = getRoot();
if (root == null) {
return null;
}
Item[] items = getChildren(getControl());
if (items != null) {
for (int i = 0; i < items.length; i++) {
Widget o = findExactItem(items[i], element);
if (o != null) {
return o;
}
}
}
return null;
}
private Widget findExactItem(Item parent, Object element) {
// compare with node
Object data = parent.getData();
if (data != null) {
if (data == element) {
return parent;
}
}
// recurse over children
Item[] items = getChildren(parent);
for (int i = 0; i < items.length; i++) {
Item item = items[i];
Widget o = findExactItem(item, element);
if (o != null) {
return o;
}
}
return null;
}
/**
* Return the tree item of the first selected object
*/

View file

@ -1398,33 +1398,39 @@ public class SystemView extends TreeViewer implements ISystemTree, ISystemResour
protected Item[] sortSelection(Widget parentItem, Item[] oldResult) {
Item[] newResult = new Item[oldResult.length];
for (int i = 0; i < oldResult.length; i++) {
Item first = removeFirstItem(parentItem, oldResult);
Item[] children = null;
if (parentItem instanceof Item) {
if (oldResult == null)
children = getItems((Item) parentItem);
else
children = oldResult;
} else
children = getChildren(parentItem);
/*
for (int i = 0; i < oldResult.length; i++)
{
Item first = removeFirstItem(oldResult, children);
newResult[i] = first;
}
return newResult;
*/
return oldResult;
}
protected Item removeFirstItem(Widget parentItem, Item[] items) {
protected Item removeFirstItem(Item[] items, Item[] children) {
int firstIndex = 0;
Item firstItem = null;
int firstItemPosition = 0;
Item[] children = null;
if (parentItem instanceof Item) {
if (items == null)
children = getItems((Item) parentItem);
else
children = items;
} else
children = getChildren(parentItem);
if (items != null)
{
for (int i = 0; i < items.length; i++) {
if (items[i] != null) {
if (items[i] != null)
{
Item current = items[i];
int position = getTreeItemPosition(parentItem, current, children);
int position = getTreeItemPosition(current, children);
if (firstItem == null || position < firstItemPosition) {
firstItem = current;
@ -1479,7 +1485,7 @@ public class SystemView extends TreeViewer implements ISystemTree, ISystemResour
for (int idx = 0; idx < src.length; idx++)
{
oldPositions[idx] = getTreeItemPosition(parentItem, oldItems[idx], children) + 1;
oldPositions[idx] = getTreeItemPosition(oldItems[idx], children) + 1;
}
if (delta > 0) // moving down, process backwards
@ -1522,7 +1528,7 @@ public class SystemView extends TreeViewer implements ISystemTree, ISystemResour
/**
* Get the position of a tree item within its parent
*/
protected int getTreeItemPosition(Widget parentItem, Item childItem, Item[] children) {
protected int getTreeItemPosition(Item childItem, Item[] children) {
int pos = -1;
for (int idx = 0; (pos == -1) && (idx < children.length); idx++) {
if (children[idx] == childItem) pos = idx;
@ -3748,7 +3754,7 @@ public class SystemView extends TreeViewer implements ISystemTree, ISystemResour
children = getChildren(parentItem);
for (int idx = 0; idx < src.length; idx++) {
oldPositions[idx] = getTreeItemPosition(parentItem, oldItems[idx], children) + 1;
oldPositions[idx] = getTreeItemPosition(oldItems[idx], children) + 1;
//logDebugMsg("::: Old position : " + oldPositions[idx]);
}
@ -5005,6 +5011,45 @@ public class SystemView extends TreeViewer implements ISystemTree, ISystemResour
return getItemCount((Control) w);
}
protected Widget doFindItem(Object element) {
// compare with root
Object root = getRoot();
if (root == null) {
return null;
}
Item[] items = getChildren(getControl());
if (items != null) {
for (int i = 0; i < items.length; i++) {
Widget o = findExactItem(items[i], element);
if (o != null) {
return o;
}
}
}
return null;
}
private Widget findExactItem(Item parent, Object element) {
// compare with node
Object data = parent.getData();
if (data != null) {
if (data == element) {
return parent;
}
}
// recurse over children
Item[] items = getChildren(parent);
for (int i = 0; i < items.length; i++) {
Item item = items[i];
Widget o = findExactItem(item, element);
if (o != null) {
return o;
}
}
return null;
}
/**
* Return the tree item of the first selected object
*/