/* (non-Javadoc) * @see org.eclipse.jface.viewers.CheckboxTreeViewer#setAllChecked(boolean) */ public void setAllChecked(boolean state) { for (TreeItem item : super.getTree().getItems()) item.setChecked(state); if (state) { // Find all visible children, add only the visible leaf nodes to the check state cache Object[] visible = getFilteredChildren(getRoot()); ITreeContentProvider contentProvider = null; if (getContentProvider() instanceof ITreeContentProvider) { contentProvider = (ITreeContentProvider) getContentProvider(); } if (contentProvider == null) { for (int i = 0; i < visible.length; i++) { checkState.add(visible[i]); } } else { Set<Object> toCheck = new HashSet<Object>(); for (int i = 0; i < visible.length; i++) { addFilteredChildren(visible[i], contentProvider, toCheck); } checkState.addAll(toCheck); } } else { // Remove any item in the check state that is visible (passes the filters) if (checkState != null) { Object[] visible = filter(checkState.toArray()); for (int i = 0; i < visible.length; i++) { checkState.remove(visible[i]); } } } }
/** * If the element is a leaf node, it is added to the result collection. If the element has * children, this method will recursively look at the children and add any visible leaf nodes to * the collection. * * @param element element to check * @param contentProvider tree content provider to check for children * @param result collection to collect leaf nodes in */ private void addFilteredChildren( Object element, ITreeContentProvider contentProvider, Collection<Object> result) { if (!contentProvider.hasChildren(element)) { result.add(element); } else { Object[] visibleChildren = getFilteredChildren(element); for (int i = 0; i < visibleChildren.length; i++) { addFilteredChildren(visibleChildren[i], contentProvider, result); } } }