KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > debug > internal > ui > launchConfigurations > LaunchConfigurationFilteredTree


1 /*******************************************************************************
2  * Copyright (c) 2006, 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.debug.internal.ui.launchConfigurations;
12
13 import org.eclipse.core.resources.ResourcesPlugin;
14 import org.eclipse.core.runtime.CoreException;
15 import org.eclipse.debug.core.ILaunchConfiguration;
16 import org.eclipse.debug.core.ILaunchConfigurationType;
17 import org.eclipse.debug.internal.ui.DebugUIPlugin;
18 import org.eclipse.debug.ui.DebugUITools;
19 import org.eclipse.debug.ui.ILaunchGroup;
20 import org.eclipse.jface.viewers.ISelection;
21 import org.eclipse.jface.viewers.IStructuredSelection;
22 import org.eclipse.jface.viewers.TreeViewer;
23 import org.eclipse.jface.viewers.ViewerFilter;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.events.HelpEvent;
26 import org.eclipse.swt.events.HelpListener;
27 import org.eclipse.swt.widgets.Composite;
28 import org.eclipse.ui.PlatformUI;
29 import org.eclipse.ui.dialogs.FilteredTree;
30 import org.eclipse.ui.dialogs.PatternFilter;
31 import org.eclipse.ui.model.WorkbenchViewerComparator;
32
33 /**
34  * Overrides the default filtered tree to use our own tree viewer which supports preserving selection after filtering
35  * @since 3.3
36  */

37 public final class LaunchConfigurationFilteredTree extends FilteredTree {
38
39     private ILaunchGroup fLaunchGroup = null;
40     private ViewerFilter[] fFilters = null;
41     private int fTreeStyle = -1;
42     private PatternFilter fPatternFilter = null;
43     
44     /**
45      * Constructor
46      * @param parent
47      * @param treeStyle
48      * @param filter
49      */

50     public LaunchConfigurationFilteredTree(Composite parent, int treeStyle, PatternFilter filter, ILaunchGroup group, ViewerFilter[] filters) {
51         super(parent, treeStyle, filter);
52         fLaunchGroup = group;
53         fFilters = filters;
54         fPatternFilter = filter;
55         fTreeStyle = treeStyle;
56     }
57     
58     /**
59      * @see org.eclipse.ui.dialogs.FilteredTree#doCreateTreeViewer(org.eclipse.swt.widgets.Composite, int)
60      */

61     protected TreeViewer doCreateTreeViewer(Composite cparent, int style) {
62         treeViewer = new LaunchConfigurationViewer(cparent, style);
63         treeViewer.setLabelProvider(DebugUITools.newDebugModelPresentation());
64         treeViewer.setComparator(new WorkbenchViewerComparator());
65         treeViewer.setContentProvider(new LaunchConfigurationTreeContentProvider(fLaunchGroup.getMode(), cparent.getShell()));
66         treeViewer.addFilter(new LaunchGroupFilter(fLaunchGroup));
67         treeViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
68         if(fFilters != null) {
69             for (int i = 0; i < fFilters.length; i++) {
70                 treeViewer.addFilter(fFilters[i]);
71             }
72         }
73         treeViewer.getControl().addHelpListener(new HelpListener() {
74             public void helpRequested(HelpEvent evt) {
75                 handleHelpRequest(evt);
76             }
77         });
78         return treeViewer;
79     }
80     
81     /**
82      * @see org.eclipse.ui.dialogs.FilteredTree#createControl(org.eclipse.swt.widgets.Composite, int)
83      */

84     protected void createControl(Composite cparent, int treeStyle) {
85         super.createControl(cparent, treeStyle);
86         setBackground(cparent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
87     }
88
89     /**
90      * @see org.eclipse.ui.dialogs.FilteredTree#init(int, org.eclipse.ui.dialogs.PatternFilter)
91      * force it to do nothing so that we can initialize the class properly
92      */

93     protected void init(int treeStyle, PatternFilter filter) {}
94
95     /**
96      * This method is used to create the actual set of controls for the dialog
97      */

98     public void createViewControl() {
99         super.init(fTreeStyle, fPatternFilter);
100     }
101     
102     /**
103      * Handle help events locally rather than deferring to WorkbenchHelp. This
104      * allows help specific to the selected config type to be presented.
105      *
106      */

107     protected void handleHelpRequest(HelpEvent evt) {
108         if (getViewer().getTree() != evt.getSource()) {
109             return;
110         }
111         String JavaDoc id = computeContextId();
112         if (id != null)
113             PlatformUI.getWorkbench().getHelpSystem().displayHelp(id);
114     }
115     
116     /**
117      * Computes the context id for this viewer
118      * @return the context id
119      */

120     public String JavaDoc computeContextId() {
121         try {
122             ISelection selection = getViewer().getSelection();
123             if (!selection.isEmpty() && selection instanceof IStructuredSelection ) {
124                 IStructuredSelection structuredSelection = (IStructuredSelection) selection;
125                 Object JavaDoc firstSelected = structuredSelection.getFirstElement();
126                 ILaunchConfigurationType configType = null;
127                 if (firstSelected instanceof ILaunchConfigurationType) {
128                     configType = (ILaunchConfigurationType) firstSelected;
129                 }
130                 else if (firstSelected instanceof ILaunchConfiguration) {
131                     configType = ((ILaunchConfiguration) firstSelected).getType();
132                 }
133                 if (configType != null) {
134                     String JavaDoc helpContextId = LaunchConfigurationPresentationManager.getDefault().getHelpContext(configType, fLaunchGroup.getMode());
135                     if (helpContextId != null) {
136                         return helpContextId;
137                     }
138                 }
139             }
140         }
141         catch (CoreException ce) {DebugUIPlugin.log(ce);}
142         return null;
143     }
144     
145     /**
146      * Returns the launch configuration viewer for this filtered tree
147      * @return the tree viewer appropriately cast
148      */

149     public LaunchConfigurationViewer getLaunchConfigurationViewer() {
150         return (LaunchConfigurationViewer) getViewer();
151     }
152
153     /* (non-Javadoc)
154      *
155      * Called after a re-filter due to user typing text. Update the filter count
156      * in the LCD
157      *
158      * @see org.eclipse.ui.dialogs.FilteredTree#updateToolbar(boolean)
159      */

160     protected void updateToolbar(boolean visible) {
161         super.updateToolbar(visible);
162         // update filter count
163
getLaunchConfigurationViewer().filterChanged();
164     }
165
166 }
167
Popular Tags