KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > ui > externaltools > internal > ui > TreeAndListGroup


1 /*******************************************************************************
2  * Copyright (c) 2000, 2007 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.ui.externaltools.internal.ui;
12
13
14 import java.util.ArrayList JavaDoc;
15 import java.util.Iterator JavaDoc;
16 import java.util.List JavaDoc;
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 /**
40  * This class was derived from org.eclipse.ui.internal.misc.CheckboxTreeAndListGroup
41  *
42  */

43 public class TreeAndListGroup implements ISelectionChangedListener {
44     private Object JavaDoc root;
45     private Object JavaDoc currentTreeSelection;
46     private List JavaDoc selectionChangedListeners = new ArrayList JavaDoc();
47     private List JavaDoc doubleClickListeners= new ArrayList JavaDoc();
48
49     private ITreeContentProvider treeContentProvider;
50     private IStructuredContentProvider listContentProvider;
51     private ILabelProvider treeLabelProvider;
52     private ILabelProvider listLabelProvider;
53
54     // widgets
55
private TreeViewer treeViewer;
56     private TableViewer listViewer;
57     private boolean allowMultiselection= false;
58
59     /**
60      * Create an instance of this class. Use this constructor if you wish to specify
61      * the width and/or height of the combined widget (to only hardcode one of the
62      * sizing dimensions, specify the other dimension's value as -1)
63      *
64      * @param parent org.eclipse.swt.widgets.Composite
65      * @param style int
66      * @param rootObject java.lang.Object
67      * @param width int
68      * @param height int
69      * @param allowMultiselection Whether to allow multi-selection in the list viewer.
70      */

71     public TreeAndListGroup(Composite parent, Object JavaDoc 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     /**
82      * This method must be called just before this window becomes visible.
83      */

84     public void aboutToOpen() {
85         currentTreeSelection = null;
86
87         //select the first element in the list
88
Object JavaDoc[] elements = treeContentProvider.getElements(root);
89         Object JavaDoc primary = elements.length > 0 ? elements[0] : null;
90         if (primary != null) {
91             treeViewer.setSelection(new StructuredSelection(primary));
92         }
93         treeViewer.getControl().setFocus();
94     }
95     /**
96      * Add the passed listener to collection of clients
97      * that listen for changes to list viewer selection state
98      *
99      * @param listener ISelectionChangedListener
100      */

101     public void addSelectionChangedListener(ISelectionChangedListener listener) {
102         selectionChangedListeners.add(listener);
103     }
104     
105     /**
106      * Add the given listener to the collection of clients that listen to
107      * double-click events in the list viewer
108      *
109      * @param listener IDoubleClickListener
110      */

111     public void addDoubleClickListener(IDoubleClickListener listener) {
112         doubleClickListeners.add(listener);
113     }
114
115     /**
116      * Notify all selection listeners that a selection has occurred in the list
117      * viewer
118      */

119     protected void notifySelectionListeners(SelectionChangedEvent event) {
120         Iterator JavaDoc iter = selectionChangedListeners.iterator();
121         while (iter.hasNext()) {
122              ((ISelectionChangedListener) iter.next()).selectionChanged(event);
123         }
124     }
125     
126     /**
127      * Notify all double click listeners that a double click event has occurred
128      * in the list viewer
129      */

130     protected void notifyDoubleClickListeners(DoubleClickEvent event) {
131         Iterator JavaDoc iter= doubleClickListeners.iterator();
132         while (iter.hasNext()) {
133             ((IDoubleClickListener) iter.next()).doubleClick(event);
134         }
135     }
136
137     /**
138      * Lay out and initialize self's visual components.
139      *
140      * @param parent org.eclipse.swt.widgets.Composite
141      * @param width int
142      * @param height int
143      */

144     protected void createContents(Composite parent, int width, int height, int style) {
145         // group pane
146
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     /**
162      * Create this group's list viewer.
163      */

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     /**
194      * Create this group's tree viewer.
195      */

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 JavaDoc element) {
224         Object JavaDoc parent = treeContentProvider.getParent(element);
225         selectAndRevealFolder(parent);
226     }
227     
228     public void selectAndRevealFolder(Object JavaDoc treeElement) {
229         treeViewer.reveal(treeElement);
230         IStructuredSelection selection = new StructuredSelection(treeElement);
231         treeViewer.setSelection(selection);
232     }
233     
234     public void selectAndRevealFile(Object JavaDoc treeElement) {
235         listViewer.reveal(treeElement);
236         IStructuredSelection selection = new StructuredSelection(treeElement);
237         listViewer.setSelection(selection);
238     }
239
240     /**
241      * Initialize this group's viewers after they have been laid out.
242      */

243     protected void initialize() {
244         treeViewer.setInput(root);
245     }
246
247     /* (non-Javadoc)
248      * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
249      */

250     public void selectionChanged(SelectionChangedEvent event) {
251         IStructuredSelection selection = (IStructuredSelection) event.getSelection();
252         Object JavaDoc selectedElement = selection.getFirstElement();
253         if (selectedElement == null) {
254             currentTreeSelection = null;
255             listViewer.setInput(currentTreeSelection);
256             return;
257         }
258
259         // ie.- if not an item deselection
260
if (selectedElement != currentTreeSelection) {
261             listViewer.setInput(selectedElement);
262         }
263
264         currentTreeSelection = selectedElement;
265     }
266     /**
267      * Set the list viewer's providers to those passed
268      *
269      * @param contentProvider ITreeContentProvider
270      * @param labelProvider ILabelProvider
271      */

272     public void setListProviders(IStructuredContentProvider contentProvider, ILabelProvider labelProvider) {
273         listViewer.setContentProvider(contentProvider);
274         listViewer.setLabelProvider(labelProvider);
275     }
276     /**
277      * Set the sorter that is to be applied to self's list viewer
278      */

279     public void setListSorter(ViewerComparator comparator) {
280         listViewer.setComparator(comparator);
281     }
282     /**
283      * Set the root of the widget to be new Root. Regenerate all of the tables and lists from this
284      * value.
285      * @param newRoot
286      */

287     public void setRoot(Object JavaDoc newRoot) {
288         root = newRoot;
289         initialize();
290     }
291
292     /**
293      * Set the tree viewer's providers to those passed
294      *
295      * @param contentProvider ITreeContentProvider
296      * @param labelProvider ILabelProvider
297      */

298     public void setTreeProviders(ITreeContentProvider contentProvider, ILabelProvider labelProvider) {
299         treeViewer.setContentProvider(contentProvider);
300         treeViewer.setLabelProvider(labelProvider);
301     }
302     /**
303      * Set the comparator that is to be applied to self's tree viewer
304      */

305     public void setTreeComparator(ViewerComparator comparator) {
306         treeViewer.setComparator(comparator);
307     }
308
309     /**
310      * Set the focus on to the list widget.
311      */

312     public void setFocus() {
313         treeViewer.getTree().setFocus();
314     }
315 }
316
Popular Tags