/** * Gathers the checked and grayed states of the given widget and its descendents. * * @param checked a writable set of elements (element type: <code>Object</code>) * @param grayed a writable set of elements (element type: <code>Object</code>) * @param widget the widget */ private void gatherState(CustomHashtable checked, CustomHashtable grayed, Widget widget) { Item[] items = getChildren(widget); for (int i = 0; i < items.length; i++) { Item item = items[i]; if (item instanceof TreeItem) { Object data = item.getData(); if (data != null) { TreeItem ti = (TreeItem) item; if (ti.getChecked()) { checked.put(data, data); } if (ti.getGrayed()) { grayed.put(data, data); } } } gatherState(checked, grayed, item); } }
private InitializeData(TreePath[] paths, IElementComparer comparer) { this.paths = new TreePath[paths.length]; System.arraycopy(paths, 0, this.paths, 0, paths.length); element2TreePaths = new CustomHashtable(comparer); int size = paths.length; selection = new ArrayList(size); for (int i = 0; i < size; i++) { Object lastSegment = paths[i].getLastSegment(); Object mapped = element2TreePaths.get(lastSegment); if (mapped == null) { selection.add(lastSegment); element2TreePaths.put(lastSegment, paths[i]); } else if (mapped instanceof List) { ((List) mapped).add(paths[i]); } else { List newMapped = new ArrayList(2); newMapped.add(mapped); newMapped.add(paths[i]); element2TreePaths.put(lastSegment, newMapped); } } }
/** * Sets which elements are grayed in this viewer's tree. The given list contains the elements that * are to be grayed; all other elements are to be ungrayed. * * <p>This method is typically used when restoring the interesting state of a viewer captured by * an earlier call to <code>getGrayedElements</code>. * * @param elements the array of grayed elements * @see #getGrayedElements */ public void setGrayedElements(Object[] elements) { assertElementsNotNull(elements); CustomHashtable grayedElements = newHashtable(elements.length * 2 + 1); for (int i = 0; i < elements.length; ++i) { Object element = elements[i]; // Ensure item exists for element internalExpand(element, false); grayedElements.put(element, element); } Control tree = getControl(); tree.setRedraw(false); internalSetGrayed(grayedElements, tree); tree.setRedraw(true); }
@Override public void remove(Object[] elements) { assertElementsNotNull(elements); if (checkBusy()) return; if (elements.length == 0) { return; } // deselect any items that are being removed, see bug 97786 boolean deselectedItems = false; Object elementToBeRemoved = null; CustomHashtable elementsToBeRemoved = null; if (elements.length == 1) { elementToBeRemoved = elements[0]; } else { elementsToBeRemoved = new CustomHashtable(getComparer()); for (Object element : elements) { elementsToBeRemoved.put(element, element); } } int[] selectionIndices = doGetSelectionIndices(); for (int index : selectionIndices) { Item item = doGetItem(index); Object data = item.getData(); if (data != null) { if ((elementsToBeRemoved != null && elementsToBeRemoved.containsKey(data)) || equals(elementToBeRemoved, data)) { table.deselect(index); deselectedItems = true; } } } super.remove(elements); if (deselectedItems) { ISelection sel = getSelection(); updateSelection(sel); firePostSelectionChanged(new SelectionChangedEvent(this, sel)); } }