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:
parent
1d74a82238
commit
bbbce52535
2 changed files with 4 additions and 182 deletions
|
@ -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; }
|
||||
|
||||
}
|
|
@ -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; }
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue