KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > help > ui > internal > search > LocalHelpPage


1 /*******************************************************************************
2  * Copyright (c) 2000, 2006 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
12 package org.eclipse.help.ui.internal.search;
13
14 import java.util.ArrayList JavaDoc;
15
16 import org.eclipse.help.internal.base.*;
17 import org.eclipse.help.internal.workingset.*;
18 import org.eclipse.help.ui.*;
19 import org.eclipse.help.ui.internal.Messages;
20 import org.eclipse.jface.preference.IPreferenceStore;
21 import org.eclipse.jface.viewers.*;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.custom.BusyIndicator;
24 import org.eclipse.swt.events.*;
25 import org.eclipse.swt.graphics.Font;
26 import org.eclipse.swt.layout.*;
27 import org.eclipse.swt.widgets.*;
28
29 /**
30  * Local Help participant in the federated search.
31  */

32 public class LocalHelpPage extends RootScopePage {
33     private Button searchAll;
34
35     private Button searchSelected;
36
37     private CheckboxTreeViewer tree;
38
39     private ITreeContentProvider treeContentProvider;
40
41     private ILabelProvider elementLabelProvider;
42
43     //private boolean firstCheck;
44

45     private WorkingSet workingSet;
46
47     private Button capabilityFiltering;
48
49     public void init(IEngineDescriptor ed, String JavaDoc scopeSetName) {
50         super.init(ed, scopeSetName);
51         if (scopeSetName != null)
52             workingSet = BaseHelpSystem.getWorkingSetManager().getWorkingSet(
53                     scopeSetName);
54     }
55
56     /**
57      * Default constructor.
58      */

59     public LocalHelpPage() {
60         //firstCheck = true;
61
}
62
63     /*
64      * (non-Javadoc)
65      *
66      * @see org.eclipse.help.ui.RootScopePage#createScopeContents(org.eclipse.swt.widgets.Composite)
67      */

68     protected int createScopeContents(Composite parent) {
69         Font font = parent.getFont();
70         initializeDialogUnits(parent);
71
72         searchAll = new Button(parent, SWT.RADIO);
73         searchAll.setText(Messages.selectAll);
74         GridData gd = new GridData();
75         gd.horizontalSpan = 2;
76         searchAll.setLayoutData(gd);
77         searchAll.addSelectionListener(new SelectionAdapter() {
78             public void widgetSelected(SelectionEvent e) {
79                 tree.getTree().setEnabled(false);
80                 // searchQueryData.setBookFiltering(false);
81
}
82         });
83
84         searchSelected = new Button(parent, SWT.RADIO);
85         searchSelected.setText(Messages.selectWorkingSet);
86         gd = new GridData();
87         gd.horizontalSpan = 2;
88         searchSelected.setLayoutData(gd);
89         searchSelected.addSelectionListener(new SelectionAdapter() {
90             public void widgetSelected(SelectionEvent e) {
91                 tree.getTree().setEnabled(true);
92                 // searchQueryData.setBookFiltering(false);
93
}
94         });
95
96         if (workingSet == null)
97             searchAll.setSelection(true);
98         else
99             searchSelected.setSelection(true);
100
101         Label label = new Label(parent, SWT.WRAP);
102         label.setFont(font);
103         label.setText(Messages.WorkingSetContent);
104         gd = new GridData(GridData.GRAB_HORIZONTAL
105                 | GridData.HORIZONTAL_ALIGN_FILL
106                 | GridData.VERTICAL_ALIGN_CENTER);
107         gd.horizontalSpan = 2;
108         label.setLayoutData(gd);
109
110         tree = new CheckboxTreeViewer(parent, SWT.BORDER | SWT.H_SCROLL
111                 | SWT.V_SCROLL);
112         gd = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL);
113         gd.heightHint = convertHeightInCharsToPixels(15);
114         gd.horizontalSpan = 2;
115         tree.getControl().setLayoutData(gd);
116         tree.getControl().setFont(font);
117
118         treeContentProvider = new HelpWorkingSetTreeContentProvider();
119         tree.setContentProvider(treeContentProvider);
120
121         elementLabelProvider = new HelpWorkingSetElementLabelProvider();
122         tree.setLabelProvider(elementLabelProvider);
123
124         tree.setUseHashlookup(true);
125
126         tree.setInput(BaseHelpSystem.getWorkingSetManager().getRoot());
127
128         tree.addCheckStateListener(new ICheckStateListener() {
129             public void checkStateChanged(CheckStateChangedEvent event) {
130                 handleCheckStateChange(event);
131             }
132         });
133
134         tree.addTreeListener(new ITreeViewerListener() {
135             public void treeCollapsed(TreeExpansionEvent event) {
136             }
137
138             public void treeExpanded(TreeExpansionEvent event) {
139                 final Object JavaDoc element = event.getElement();
140                 if (tree.getGrayed(element) == false)
141                     BusyIndicator.showWhile(getShell().getDisplay(),
142                             new Runnable JavaDoc() {
143                                 public void run() {
144                                     setSubtreeChecked(element, tree
145                                             .getChecked(element), false);
146                                 }
147                             });
148             }
149         });
150         tree.getTree().setEnabled(workingSet != null);
151         capabilityFiltering = new Button(parent, SWT.CHECK);
152         String JavaDoc checkboxLabel = HelpBasePlugin.getActivitySupport().getLocalScopeCheckboxLabel();
153         if (checkboxLabel==null)
154             checkboxLabel = Messages.LocalHelpPage_capabilityFiltering_name;
155         capabilityFiltering.setText(checkboxLabel);
156         gd = new GridData();
157         gd.horizontalSpan = 2;
158         capabilityFiltering.setLayoutData(gd);
159         
160         initializeCheckedState();
161         applyDialogFont(parent);
162
163         // Set help for the page
164
// WorkbenchHelp.setHelp(tree, "help_workingset_page");
165
return 1;
166     }
167
168     private void initializeCheckedState() {
169         IPreferenceStore store = getPreferenceStore();
170         capabilityFiltering.setSelection(store.getBoolean(getEngineDescriptor()
171                 .getId()
172                 + "." + LocalSearchScopeFactory.P_CAPABILITY_FILTERING)); //$NON-NLS-1$
173
if (workingSet == null)
174             return;
175
176         BusyIndicator.showWhile(getShell().getDisplay(), new Runnable JavaDoc() {
177             public void run() {
178                 Object JavaDoc[] elements = workingSet.getElements();
179                 tree.setCheckedElements(elements);
180                 for (int i = 0; i < elements.length; i++) {
181                     Object JavaDoc element = elements[i];
182                     if (isExpandable(element))
183                         setSubtreeChecked(element, true, true);
184                     updateParentState(element, true);
185                 }
186             }
187         });
188     }
189
190     boolean isExpandable(Object JavaDoc element) {
191         return treeContentProvider.hasChildren(element);
192     }
193
194     void updateParentState(Object JavaDoc child, boolean baseChildState) {
195         if (child == null)
196             return;
197
198         Object JavaDoc parent = treeContentProvider.getParent(child);
199         if (parent == null)
200             return;
201
202         boolean allSameState = true;
203         Object JavaDoc[] children = null;
204         children = treeContentProvider.getChildren(parent);
205
206         for (int i = children.length - 1; i >= 0; i--) {
207             if (tree.getChecked(children[i]) != baseChildState
208                     || tree.getGrayed(children[i])) {
209                 allSameState = false;
210                 break;
211             }
212         }
213
214         tree.setGrayed(parent, !allSameState);
215         tree.setChecked(parent, !allSameState || baseChildState);
216
217         updateParentState(parent, baseChildState);
218     }
219
220     void setSubtreeChecked(Object JavaDoc parent, boolean state,
221             boolean checkExpandedState) {
222
223         Object JavaDoc[] children = treeContentProvider.getChildren(parent);
224         for (int i = children.length - 1; i >= 0; i--) {
225             Object JavaDoc element = children[i];
226             if (state) {
227                 tree.setChecked(element, true);
228                 tree.setGrayed(element, false);
229             } else
230                 tree.setGrayChecked(element, false);
231             if (isExpandable(element))
232                 setSubtreeChecked(element, state, checkExpandedState);
233         }
234     }
235
236     private void findCheckedElements(java.util.List JavaDoc checkedResources,
237             Object JavaDoc parent) {
238         Object JavaDoc[] children = treeContentProvider.getChildren(parent);
239         for (int i = 0; i < children.length; i++) {
240             if (tree.getGrayed(children[i]))
241                 findCheckedElements(checkedResources, children[i]);
242             else if (tree.getChecked(children[i]))
243                 checkedResources.add(children[i]);
244         }
245     }
246
247     void handleCheckStateChange(final CheckStateChangedEvent event) {
248         BusyIndicator.showWhile(getShell().getDisplay(), new Runnable JavaDoc() {
249             public void run() {
250                 Object JavaDoc element = event.getElement();
251                 boolean state = event.getChecked();
252                 tree.setGrayed(element, false);
253                 if (isExpandable(element))
254                     setSubtreeChecked(element, state, state);
255                 // only check subtree if state is set to true
256

257                 updateParentState(element, state);
258                 // validateInput();
259
}
260         });
261     }
262
263     public WorkingSet getWorkingSet() {
264         ArrayList JavaDoc elements = new ArrayList JavaDoc(10);
265         findCheckedElements(elements, tree.getInput());
266         if (workingSet == null) {
267             workingSet = new WorkingSet(
268                     getScopeSetName(),
269                     (AdaptableHelpResource[]) elements
270                             .toArray(new AdaptableHelpResource[elements.size()]));
271         } else {
272             workingSet.setName(getScopeSetName());
273             workingSet.setElements((AdaptableHelpResource[]) elements
274                     .toArray(new AdaptableHelpResource[elements.size()]));
275         }
276         return workingSet;
277     }
278
279     /*
280      * (non-Javadoc)
281      *
282      * @see org.eclipse.jface.preference.IPreferencePage#performOk()
283      */

284     public boolean performOk() {
285         if (searchSelected.getSelection())
286             BaseHelpSystem.getWorkingSetManager()
287                     .addWorkingSet(getWorkingSet());
288         else
289             BaseHelpSystem.getWorkingSetManager().removeWorkingSet(
290                     getWorkingSet());
291
292         getPreferenceStore().setValue(
293                 getKey(LocalSearchScopeFactory.P_WORKING_SET),
294                 getScopeSetName());
295         getPreferenceStore().setValue(
296                 getKey(LocalSearchScopeFactory.P_CAPABILITY_FILTERING),
297                 capabilityFiltering.getSelection());
298         return super.performOk();
299     }
300
301     private String JavaDoc getKey(String JavaDoc key) {
302         return getEngineDescriptor().getId() + "." + key; //$NON-NLS-1$
303
}
304 }
305
Popular Tags