1 11 package org.eclipse.ui.externaltools.internal.ui; 12 13 14 import java.util.ArrayList ; 15 import java.util.Iterator ; 16 import java.util.List ; 17 18 import org.eclipse.jface.viewers.DoubleClickEvent; 19 import org.eclipse.jface.viewers.IDoubleClickListener; 20 import org.eclipse.jface.viewers.ILabelProvider; 21 import org.eclipse.jface.viewers.ISelection; 22 import org.eclipse.jface.viewers.ISelectionChangedListener; 23 import org.eclipse.jface.viewers.IStructuredContentProvider; 24 import org.eclipse.jface.viewers.IStructuredSelection; 25 import org.eclipse.jface.viewers.ITreeContentProvider; 26 import org.eclipse.jface.viewers.SelectionChangedEvent; 27 import org.eclipse.jface.viewers.StructuredSelection; 28 import org.eclipse.jface.viewers.TableViewer; 29 import org.eclipse.jface.viewers.TreeViewer; 30 import org.eclipse.jface.viewers.ViewerComparator; 31 import org.eclipse.swt.SWT; 32 import org.eclipse.swt.layout.GridData; 33 import org.eclipse.swt.layout.GridLayout; 34 import org.eclipse.swt.widgets.Composite; 35 import org.eclipse.swt.widgets.Table; 36 import org.eclipse.swt.widgets.Tree; 37 import org.eclipse.ui.views.navigator.ResourceComparator; 38 39 43 public class TreeAndListGroup implements ISelectionChangedListener { 44 private Object root; 45 private Object currentTreeSelection; 46 private List selectionChangedListeners = new ArrayList (); 47 private List doubleClickListeners= new ArrayList (); 48 49 private ITreeContentProvider treeContentProvider; 50 private IStructuredContentProvider listContentProvider; 51 private ILabelProvider treeLabelProvider; 52 private ILabelProvider listLabelProvider; 53 54 private TreeViewer treeViewer; 56 private TableViewer listViewer; 57 private boolean allowMultiselection= false; 58 59 71 public TreeAndListGroup(Composite parent, Object rootObject, ITreeContentProvider treeContentProvider, ILabelProvider treeLabelProvider, IStructuredContentProvider listContentProvider, ILabelProvider listLabelProvider, int style, int width, int height, boolean allowMultiselection) { 72 73 root = rootObject; 74 this.treeContentProvider = treeContentProvider; 75 this.listContentProvider = listContentProvider; 76 this.treeLabelProvider = treeLabelProvider; 77 this.listLabelProvider = listLabelProvider; 78 this.allowMultiselection= allowMultiselection; 79 createContents(parent, width, height, style); 80 } 81 84 public void aboutToOpen() { 85 currentTreeSelection = null; 86 87 Object [] elements = treeContentProvider.getElements(root); 89 Object primary = elements.length > 0 ? elements[0] : null; 90 if (primary != null) { 91 treeViewer.setSelection(new StructuredSelection(primary)); 92 } 93 treeViewer.getControl().setFocus(); 94 } 95 101 public void addSelectionChangedListener(ISelectionChangedListener listener) { 102 selectionChangedListeners.add(listener); 103 } 104 105 111 public void addDoubleClickListener(IDoubleClickListener listener) { 112 doubleClickListeners.add(listener); 113 } 114 115 119 protected void notifySelectionListeners(SelectionChangedEvent event) { 120 Iterator iter = selectionChangedListeners.iterator(); 121 while (iter.hasNext()) { 122 ((ISelectionChangedListener) iter.next()).selectionChanged(event); 123 } 124 } 125 126 130 protected void notifyDoubleClickListeners(DoubleClickEvent event) { 131 Iterator iter= doubleClickListeners.iterator(); 132 while (iter.hasNext()) { 133 ((IDoubleClickListener) iter.next()).doubleClick(event); 134 } 135 } 136 137 144 protected void createContents(Composite parent, int width, int height, int style) { 145 Composite composite = new Composite(parent, style); 147 composite.setFont(parent.getFont()); 148 GridLayout layout = new GridLayout(); 149 layout.numColumns = 2; 150 layout.makeColumnsEqualWidth = true; 151 layout.marginHeight = 0; 152 layout.marginWidth = 0; 153 composite.setLayout(layout); 154 composite.setLayoutData(new GridData(GridData.FILL_BOTH)); 155 156 createTreeViewer(composite, width / 2, height); 157 createListViewer(composite, width / 2, height); 158 159 initialize(); 160 } 161 164 protected void createListViewer(Composite parent, int width, int height) { 165 int style; 166 if (allowMultiselection) { 167 style= SWT.MULTI; 168 } else { 169 style= SWT.SINGLE; 170 } 171 listViewer = new TableViewer(parent, SWT.BORDER | style); 172 GridData data = new GridData(GridData.FILL_BOTH); 173 data.widthHint = width; 174 data.heightHint = height; 175 listViewer.getTable().setLayoutData(data); 176 listViewer.getTable().setFont(parent.getFont()); 177 listViewer.setContentProvider(listContentProvider); 178 listViewer.setLabelProvider(listLabelProvider); 179 listViewer.setComparator(new ResourceComparator(ResourceComparator.NAME)); 180 listViewer.addSelectionChangedListener(new ISelectionChangedListener() { 181 public void selectionChanged(SelectionChangedEvent event) { 182 notifySelectionListeners(event); 183 } 184 }); 185 listViewer.addDoubleClickListener(new IDoubleClickListener() { 186 public void doubleClick(DoubleClickEvent event) { 187 if (!event.getSelection().isEmpty()) { 188 notifyDoubleClickListeners(event); 189 } 190 } 191 }); 192 } 193 196 protected void createTreeViewer(Composite parent, int width, int height) { 197 Tree tree = new Tree(parent, SWT.BORDER); 198 GridData data = new GridData(GridData.FILL_BOTH); 199 data.widthHint = width; 200 data.heightHint = height; 201 tree.setLayoutData(data); 202 tree.setFont(parent.getFont()); 203 204 treeViewer = new TreeViewer(tree); 205 treeViewer.setContentProvider(treeContentProvider); 206 treeViewer.setLabelProvider(treeLabelProvider); 207 treeViewer.setComparator(new ResourceComparator(ResourceComparator.NAME)); 208 treeViewer.addSelectionChangedListener(this); 209 } 210 211 public Table getListTable() { 212 return listViewer.getTable(); 213 } 214 215 public IStructuredSelection getListTableSelection() { 216 ISelection selection= this.listViewer.getSelection(); 217 if (selection instanceof IStructuredSelection) { 218 return (IStructuredSelection)selection; 219 } 220 return StructuredSelection.EMPTY; 221 } 222 223 protected void initialListItem(Object element) { 224 Object parent = treeContentProvider.getParent(element); 225 selectAndRevealFolder(parent); 226 } 227 228 public void selectAndRevealFolder(Object treeElement) { 229 treeViewer.reveal(treeElement); 230 IStructuredSelection selection = new StructuredSelection(treeElement); 231 treeViewer.setSelection(selection); 232 } 233 234 public void selectAndRevealFile(Object treeElement) { 235 listViewer.reveal(treeElement); 236 IStructuredSelection selection = new StructuredSelection(treeElement); 237 listViewer.setSelection(selection); 238 } 239 240 243 protected void initialize() { 244 treeViewer.setInput(root); 245 } 246 247 250 public void selectionChanged(SelectionChangedEvent event) { 251 IStructuredSelection selection = (IStructuredSelection) event.getSelection(); 252 Object selectedElement = selection.getFirstElement(); 253 if (selectedElement == null) { 254 currentTreeSelection = null; 255 listViewer.setInput(currentTreeSelection); 256 return; 257 } 258 259 if (selectedElement != currentTreeSelection) { 261 listViewer.setInput(selectedElement); 262 } 263 264 currentTreeSelection = selectedElement; 265 } 266 272 public void setListProviders(IStructuredContentProvider contentProvider, ILabelProvider labelProvider) { 273 listViewer.setContentProvider(contentProvider); 274 listViewer.setLabelProvider(labelProvider); 275 } 276 279 public void setListSorter(ViewerComparator comparator) { 280 listViewer.setComparator(comparator); 281 } 282 287 public void setRoot(Object newRoot) { 288 root = newRoot; 289 initialize(); 290 } 291 292 298 public void setTreeProviders(ITreeContentProvider contentProvider, ILabelProvider labelProvider) { 299 treeViewer.setContentProvider(contentProvider); 300 treeViewer.setLabelProvider(labelProvider); 301 } 302 305 public void setTreeComparator(ViewerComparator comparator) { 306 treeViewer.setComparator(comparator); 307 } 308 309 312 public void setFocus() { 313 treeViewer.getTree().setFocus(); 314 } 315 } 316 | Popular Tags |