/** * Creates the tree in this group * * @param parent parent composite * @param style toolkit for form style or <code>null</code> for dialog style */ private TreeViewer createTree(Composite parent, FormToolkit toolkit) { FilteredCheckboxTree tree = new FilteredCheckboxTree(parent, toolkit); tree.setLayoutData(new GridData(GridData.FILL_BOTH)); tree.getPatternFilter().setIncludeLeadingWildcard(true); tree.getFilterControl().setFont(parent.getFont()); fTree = tree.getCheckboxTreeViewer(); ((GridData) fTree.getControl().getLayoutData()).heightHint = 300; fTree.getControl().setFont(parent.getFont()); fTree.setUseHashlookup(true); fTree.setContentProvider(new TreeContentProvider()); fTree.setLabelProvider(new StyledBundleLabelProvider(true, false)); fTree.addDoubleClickListener( new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); Object first = selection.getFirstElement(); fTree.setChecked(first, !fTree.getChecked(first)); saveIncludedBundleState(); contentChanged(); updateButtons(); fTree.update( fTargetDefinition.getBundleContainers(), new String[] {IBasicPropertyConstants.P_TEXT}); } }); fTree.addCheckStateListener( new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { saveIncludedBundleState(); contentChanged(); updateButtons(); fTree.update( fTargetDefinition.getBundleContainers(), new String[] {IBasicPropertyConstants.P_TEXT}); } }); fTree.addSelectionChangedListener( new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { updateButtons(); } }); fTree.setSorter( new ViewerSorter() { public int compare(Viewer viewer, Object e1, Object e2) { if (fFeaureModeButton.getSelection()) { if (e1 == OTHER_CATEGORY) { return 1; } if (e2 == OTHER_CATEGORY) { return -1; } } if (e1 instanceof IResolvedBundle && !(e2 instanceof IResolvedBundle)) { return -1; } if (e2 instanceof IResolvedBundle && !(e1 instanceof IResolvedBundle)) { return 1; } if (e1 instanceof IResolvedBundle && e2 instanceof IResolvedBundle) { IStatus status1 = ((IResolvedBundle) e1).getStatus(); IStatus status2 = ((IResolvedBundle) e2).getStatus(); if (!status1.isOK() && status2.isOK()) { return -1; } if (status1.isOK() && !status2.isOK()) { return 1; } } return super.compare(viewer, e1, e2); } }); fMenuManager = new MenuManager(); fMenuManager.add( new Action( Messages.TargetContentsGroup_collapseAll, PlatformUI.getWorkbench() .getSharedImages() .getImageDescriptor(ISharedImages.IMG_ELCL_COLLAPSEALL)) { public void run() { fTree.collapseAll(); } }); Menu contextMenu = fMenuManager.createContextMenu(tree); tree.setMenu(contextMenu); return fTree; }