package net.enilink.komma.edit.ui.dialogs; import java.util.Comparator; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; /** * * * */ public class FilteredTreeAndListSelectionWidget { private FilteredTree filteredTree; private FilteredList filteredList; FilteredTreeAndListSelectionDialog filteredTreeAndListSelectionDialog; final IFilteredTreeAndListDescriptor descriptor; public FilteredTreeAndListSelectionWidget( IFilteredTreeAndListDescriptor descriptor, FilteredTreeAndListSelectionDialog filteredTreeAndListSelectionDialog, boolean multi) { this(descriptor, multi); this.filteredTreeAndListSelectionDialog = filteredTreeAndListSelectionDialog; } public FilteredTreeAndListSelectionWidget( final IFilteredTreeAndListDescriptor descriptor, boolean multi) { this.descriptor = descriptor; this.filteredTreeAndListSelectionDialog = null; filteredTree = new FilteredTree(new PatternFilter()); filteredTree .setTreeContentProvider(descriptor.getTreeContentProvider()); filteredTree.setTreeLabelProvider(descriptor.getLabelProvider()); filteredList = new FilteredList(multi) { @Override protected ItemsFilter createFilter() { return new ItemsFilter() { @Override public boolean isConsistentItem(Object item) { return true; } @Override public boolean matchItem(Object item) { return matches(descriptor.getListItemName(item)); } }; } @Override protected void fillContentProvider( AbstractContentProvider contentProvider, ItemsFilter itemsFilter, IProgressMonitor progressMonitor) throws CoreException { descriptor.fillListContentProvider(contentProvider, itemsFilter, progressMonitor); } @Override public String getElementName(Object item) { return descriptor.getListItemName(item); } @Override protected Comparator<Object> getItemsComparator() { return descriptor.getListItemsComparator(); } @Override protected IStatus validateItem(Object item) { return descriptor.validateListItem(item); } @Override protected void updateStatus(IStatus status) { if (filteredTreeAndListSelectionDialog != null) { filteredTreeAndListSelectionDialog.updateStatus(status); } } }; filteredList.setListLabelProvider(descriptor.getLabelProvider()); } public FilteredList getFilteredList() { return filteredList; } public FilteredTree getFilteredTree() { return filteredTree; } public Composite createControl(Composite parent) { Composite content = new Composite(parent, SWT.NONE); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); content.setLayoutData(gd); GridLayout layout = new GridLayout(2, true); layout.marginWidth = 0; layout.marginHeight = 0; content.setLayout(layout); Control treeControl = filteredTree.createControl(content, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); treeControl.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); Control listControl = filteredList.createControl(content); listControl.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); return content; } public void show() { filteredTree.getViewer().setInput(descriptor.getTreeInput()); } }