1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-03 07:05:24 +02:00

Fix bug 149172 - RSE tree doesnt show same item in multiple filters

Fixed by Martin's suggestion (works!)
Perhaps it would suffice to override

  protected AbstractTreeViewer.usingElementMap() { return false; }

in SystemView. Since, if the mapping is not unique, an elementMap can not be
used.
This commit is contained in:
David McKnight 2006-07-14 16:49:44 +00:00
parent 1d74a82238
commit bbbce52535
2 changed files with 4 additions and 182 deletions

View file

@ -5890,96 +5890,7 @@ public class SystemView extends TreeViewer implements ISystemTree,
_setList.add(newSet);
return newSet;
}
protected void internalAdd(Widget widget, Object parentElementOrTreePath, Object[] childElements) {
Object parent;
TreePath path;
if (parentElementOrTreePath instanceof TreePath) {
path = (TreePath) parentElementOrTreePath;
parent = path.getLastSegment();
} else {
parent = parentElementOrTreePath;
path = null;
}
// optimization!
// if the widget is not expanded we just invalidate the subtree
if (widget instanceof Item) {
Item ti = (Item) widget;
if (!getExpanded(ti)) {
boolean needDummy = isExpandable(ti, path, parent);
boolean haveDummy = false;
// remove all children
Item[] items = getItems(ti);
for (int i = 0; i < items.length; i++) {
if (items[i].getData() != null) {
disassociate(items[i]);
items[i].dispose();
} else {
if (needDummy && !haveDummy) {
haveDummy = true;
} else {
items[i].dispose();
}
}
}
// append a dummy if necessary
if (needDummy && !haveDummy) {
newItem(ti, SWT.NULL, -1);
}
return;
}
}
if (childElements.length > 0) {
// TODO: Add filtering back?
Object[] filtered = filter(parentElementOrTreePath, childElements);
for (int i = 0; i < filtered.length; i++)
{
createTreeItem(widget, filtered[i], i);
//createAddedElements(widget, filtered);
}
}
}
/**
* Return whether the given element is expandable.
* @param item the tree item for the element
* @param parentPath the parent path if it is knwon or <code>null</code> if it needs to be determines
* @param element the element
* @return whether the given element is expandable
*/
private boolean isExpandable(Item item, TreePath parentPath, Object element) {
return isExpandable(element);
}
/**
* Filter the children elements.
* @param parentElementOrTreePath the parent element or path
* @param elements the child elements
* @return the filter list of children
*/
private Object[] filter(Object parentElementOrTreePath, Object[] elements) {
ViewerFilter[] filters = getFilters();
if (filters != null) {
ArrayList filtered = new ArrayList(elements.length);
for (int i = 0; i < elements.length; i++) {
boolean add = true;
for (int j = 0; j < filters.length; j++) {
add = filters[j].select(this, parentElementOrTreePath, elements[i]);
if (!add) {
break;
}
}
if (add) {
filtered.add(elements[i]);
}
}
return filtered.toArray();
}
return elements;
}
protected boolean usingElementMap() { return false; }
}

View file

@ -5890,96 +5890,7 @@ public class SystemView extends TreeViewer implements ISystemTree,
_setList.add(newSet);
return newSet;
}
protected void internalAdd(Widget widget, Object parentElementOrTreePath, Object[] childElements) {
Object parent;
TreePath path;
if (parentElementOrTreePath instanceof TreePath) {
path = (TreePath) parentElementOrTreePath;
parent = path.getLastSegment();
} else {
parent = parentElementOrTreePath;
path = null;
}
// optimization!
// if the widget is not expanded we just invalidate the subtree
if (widget instanceof Item) {
Item ti = (Item) widget;
if (!getExpanded(ti)) {
boolean needDummy = isExpandable(ti, path, parent);
boolean haveDummy = false;
// remove all children
Item[] items = getItems(ti);
for (int i = 0; i < items.length; i++) {
if (items[i].getData() != null) {
disassociate(items[i]);
items[i].dispose();
} else {
if (needDummy && !haveDummy) {
haveDummy = true;
} else {
items[i].dispose();
}
}
}
// append a dummy if necessary
if (needDummy && !haveDummy) {
newItem(ti, SWT.NULL, -1);
}
return;
}
}
if (childElements.length > 0) {
// TODO: Add filtering back?
Object[] filtered = filter(parentElementOrTreePath, childElements);
for (int i = 0; i < filtered.length; i++)
{
createTreeItem(widget, filtered[i], i);
//createAddedElements(widget, filtered);
}
}
}
/**
* Return whether the given element is expandable.
* @param item the tree item for the element
* @param parentPath the parent path if it is knwon or <code>null</code> if it needs to be determines
* @param element the element
* @return whether the given element is expandable
*/
private boolean isExpandable(Item item, TreePath parentPath, Object element) {
return isExpandable(element);
}
/**
* Filter the children elements.
* @param parentElementOrTreePath the parent element or path
* @param elements the child elements
* @return the filter list of children
*/
private Object[] filter(Object parentElementOrTreePath, Object[] elements) {
ViewerFilter[] filters = getFilters();
if (filters != null) {
ArrayList filtered = new ArrayList(elements.length);
for (int i = 0; i < elements.length; i++) {
boolean add = true;
for (int j = 0; j < filters.length; j++) {
add = filters[j].select(this, parentElementOrTreePath, elements[i]);
if (!add) {
break;
}
}
if (add) {
filtered.add(elements[i]);
}
}
return filtered.toArray();
}
return elements;
}
protected boolean usingElementMap() { return false; }
}