private boolean hasUnfilteredChild(TreeViewer viewer, TreePath parentPath, Object element) { TreePath elementPath = parentPath.createChildPath(element); IContentProvider contentProvider = viewer.getContentProvider(); Object[] children = contentProvider instanceof ITreePathContentProvider ? ((ITreePathContentProvider) contentProvider).getChildren(elementPath) : ((ITreeContentProvider) contentProvider).getChildren(element); /* avoid NPE + guard close */ if (children == null || children.length == 0) { return false; } for (int i = 0; i < children.length; i++) { if (selectTreePath(viewer, elementPath, children[i])) { return true; } } return false; }
/** * <p> * Gallery expects contents to have exactly 2 levels of hierarchy, with groups as the root elements and image * thumbnails as direct children of the groups. This method accepts ITreeContentProvider and ITreePathContentProvider * as-is, and relies on the providers to return contents with the correct structure. * </p> * <p> * This method also accepts IStructuredContentProvider and wraps it in a FlatTreeContentProvider with an empty string * as the root node. If you need a different root node, construct your own FlatTreeContentProvider and pass it here. * If you want the Gallery to suppress the collapsable group header, call * </p> * <code>getGallery().setGroupRenderer(new NoGroupRenderer());</code> */ public void setContentProvider(IContentProvider provider) { if (provider instanceof IStructuredContentProvider && !(provider instanceof ITreeContentProvider || provider instanceof ITreePathContentProvider)) { // Wrap a table-style contents with a single root node. super.setContentProvider(new FlatTreeContentProvider((IStructuredContentProvider) provider)); } else { super.setContentProvider(provider); } }