mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-08 01:25:23 +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
|
@ -5891,95 +5891,6 @@ public class SystemView extends TreeViewer implements ISystemTree,
|
||||||
return newSet;
|
return newSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean usingElementMap() { return false; }
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -5891,95 +5891,6 @@ public class SystemView extends TreeViewer implements ISystemTree,
|
||||||
return newSet;
|
return newSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean usingElementMap() { return false; }
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue