package enfo.ui; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.FilteredTree; import org.eclipse.ui.dialogs.PatternFilter; public abstract class FilteredTreePanel extends Panel implements IDoubleClickListener, ISelectionChangedListener { private EnfoView view; private FilteredTree fTree; public FilteredTreePanel(EnfoView parent) { super(); view = parent; } protected ViewerComparator createComparator() { return new ViewerComparator(); } protected abstract ITreeContentProvider createContentProvider(); @Override public Composite createContents(Composite p) { fTree = new FilteredTree(p, getStyles(), createPatternFilter(), true); fTree.getFilterControl().setMessage(getFilterMessage()); fTree.setBackground(PlatformUI.getWorkbench().getDisplay() .getSystemColor(SWT.COLOR_WHITE)); final TreeViewer viewer = fTree.getViewer(); viewer.addDoubleClickListener(this); viewer.addSelectionChangedListener(this); viewer.setComparator(createComparator()); viewer.setLabelProvider(createLabelProvider()); viewer.setContentProvider(createContentProvider()); viewer.setInput(getInput()); return p; } protected IBaseLabelProvider createLabelProvider() { return new LabelProvider(); } protected PatternFilter createPatternFilter() { return new PatternFilter(); } @Override public void doubleClick(DoubleClickEvent e) { IStructuredSelection select = (IStructuredSelection) e.getSelection(); Object o = select.getFirstElement(); TreeViewer viewer = getFilteredTree().getViewer(); if (((ITreeContentProvider) viewer.getContentProvider()).hasChildren(o)) { viewer.setExpandedState(o, !viewer.getExpandedState(o)); } else { doubleClickOnLeaf(o); } } protected void doubleClickOnLeaf(Object leaf) { } protected FilteredTree getFilteredTree() { return fTree; } protected String getFilterMessage() { return "Search"; } protected String getMessage(Object treeNode) { return ""; } protected abstract Object getInput(); protected int getStyles() { return (SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); } @Override public void selectionChanged(SelectionChangedEvent e) { // Object o = ((IStructuredSelection) e.getSelection()).getFirstElement(); // view.setContentDescription(getMessage(o)); } protected EnfoView getParent() { return view; } }