KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > ui > preferences > TypeFilterPreferencePage


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.jdt.internal.ui.preferences;
12
13 import java.util.ArrayList JavaDoc;
14 import java.util.Arrays JavaDoc;
15 import java.util.List JavaDoc;
16 import java.util.StringTokenizer JavaDoc;
17
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.layout.GridLayout;
20 import org.eclipse.swt.widgets.Composite;
21 import org.eclipse.swt.widgets.Control;
22
23 import org.eclipse.jface.dialogs.Dialog;
24 import org.eclipse.jface.dialogs.IDialogConstants;
25 import org.eclipse.jface.preference.IPreferenceStore;
26 import org.eclipse.jface.preference.PreferencePage;
27 import org.eclipse.jface.viewers.LabelProvider;
28 import org.eclipse.jface.viewers.ViewerComparator;
29 import org.eclipse.jface.window.Window;
30
31 import org.eclipse.ui.IWorkbench;
32 import org.eclipse.ui.IWorkbenchPreferencePage;
33 import org.eclipse.ui.PlatformUI;
34
35 import org.eclipse.jdt.core.IPackageFragment;
36 import org.eclipse.jdt.core.search.IJavaSearchScope;
37 import org.eclipse.jdt.core.search.SearchEngine;
38
39 import org.eclipse.jdt.ui.PreferenceConstants;
40
41 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
42 import org.eclipse.jdt.internal.ui.JavaPlugin;
43 import org.eclipse.jdt.internal.ui.dialogs.PackageSelectionDialog;
44 import org.eclipse.jdt.internal.ui.util.BusyIndicatorRunnableContext;
45 import org.eclipse.jdt.internal.ui.wizards.dialogfields.CheckedListDialogField;
46 import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
47 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
48 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter;
49 import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
50 import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
51
52 /*
53  * The page for setting the type filters
54  */

55 public class TypeFilterPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
56
57     public static final String JavaDoc TYPE_FILTER_PREF_PAGE_ID= "org.eclipse.jdt.ui.preferences.TypeFilterPreferencePage"; //$NON-NLS-1$
58

59     private static final String JavaDoc PREF_FILTER_ENABLED= PreferenceConstants.TYPEFILTER_ENABLED;
60     private static final String JavaDoc PREF_FILTER_DISABLED= PreferenceConstants.TYPEFILTER_DISABLED;
61     
62     private static String JavaDoc[] unpackOrderList(String JavaDoc str) {
63         StringTokenizer JavaDoc tok= new StringTokenizer JavaDoc(str, ";"); //$NON-NLS-1$
64
int nTokens= tok.countTokens();
65         String JavaDoc[] res= new String JavaDoc[nTokens];
66         for (int i= 0; i < nTokens; i++) {
67             res[i]= tok.nextToken();
68         }
69         return res;
70     }
71     
72     private static String JavaDoc packOrderList(List JavaDoc orderList) {
73         StringBuffer JavaDoc buf= new StringBuffer JavaDoc();
74         for (int i= 0; i < orderList.size(); i++) {
75             buf.append((String JavaDoc) orderList.get(i));
76             buf.append(';');
77         }
78         return buf.toString();
79     }
80         
81     private class TypeFilterAdapter implements IListAdapter, IDialogFieldListener {
82
83         private boolean canEdit(ListDialogField field) {
84             return field.getSelectedElements().size() == 1;
85         }
86
87         public void customButtonPressed(ListDialogField field, int index) {
88             doButtonPressed(index);
89         }
90
91         public void selectionChanged(ListDialogField field) {
92             fFilterListField.enableButton(IDX_EDIT, canEdit(field));
93         }
94
95         public void dialogFieldChanged(DialogField field) {
96         }
97         
98         public void doubleClicked(ListDialogField field) {
99             if (canEdit(field)) {
100                 doButtonPressed(IDX_EDIT);
101             }
102         }
103     }
104     
105     private static final int IDX_ADD= 0;
106     private static final int IDX_ADD_PACKAGE= 1;
107     private static final int IDX_EDIT= 2;
108     private static final int IDX_REMOVE= 3;
109     private static final int IDX_SELECT= 5;
110     private static final int IDX_DESELECT= 6;
111
112     private CheckedListDialogField fFilterListField;
113     
114     public TypeFilterPreferencePage() {
115         super();
116         setPreferenceStore(JavaPlugin.getDefault().getPreferenceStore());
117         setDescription(PreferencesMessages.TypeFilterPreferencePage_description);
118     
119         String JavaDoc[] buttonLabels= new String JavaDoc[] {
120             PreferencesMessages.TypeFilterPreferencePage_add_button,
121             PreferencesMessages.TypeFilterPreferencePage_addpackage_button,
122             PreferencesMessages.TypeFilterPreferencePage_edit_button,
123             PreferencesMessages.TypeFilterPreferencePage_remove_button,
124             /* 4 */ null,
125             PreferencesMessages.TypeFilterPreferencePage_selectall_button,
126             PreferencesMessages.TypeFilterPreferencePage_deselectall_button,
127         };
128                 
129         TypeFilterAdapter adapter= new TypeFilterAdapter();
130         
131         fFilterListField= new CheckedListDialogField(adapter, buttonLabels, new LabelProvider());
132         fFilterListField.setDialogFieldListener(adapter);
133         fFilterListField.setLabelText(PreferencesMessages.TypeFilterPreferencePage_list_label);
134         fFilterListField.setCheckAllButtonIndex(IDX_SELECT);
135         fFilterListField.setUncheckAllButtonIndex(IDX_DESELECT);
136         fFilterListField.setRemoveButtonIndex(IDX_REMOVE);
137         
138         fFilterListField.enableButton(IDX_EDIT, false);
139         
140         initialize(false);
141     }
142     
143     /*
144      * @see PreferencePage#createControl(org.eclipse.swt.widgets.Composite)
145      */

146     public void createControl(Composite parent) {
147         super.createControl(parent);
148         PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.TYPE_FILTER_PREFERENCE_PAGE);
149     }
150     
151     protected Control createContents(Composite parent) {
152         initializeDialogUnits(parent);
153     
154         Composite composite= new Composite(parent, SWT.NONE);
155         composite.setFont(parent.getFont());
156         
157         GridLayout layout= new GridLayout();
158         layout.numColumns= 2;
159         layout.marginWidth= 0;
160         layout.marginHeight= 0;
161         
162         composite.setLayout(layout);
163         
164         fFilterListField.doFillIntoGrid(composite, 3);
165         LayoutUtil.setHorizontalSpan(fFilterListField.getLabelControl(null), 2);
166         LayoutUtil.setWidthHint(fFilterListField.getLabelControl(null), convertWidthInCharsToPixels(40));
167         LayoutUtil.setHorizontalGrabbing(fFilterListField.getListControl(null));
168         
169         fFilterListField.getTableViewer().setComparator(new ViewerComparator());
170         
171         Dialog.applyDialogFont(composite);
172         return composite;
173     }
174     
175     private void initialize(boolean fromDefault) {
176         IPreferenceStore store= getPreferenceStore();
177         
178         String JavaDoc enabled= fromDefault ? store.getDefaultString(PREF_FILTER_ENABLED) : store.getString(PREF_FILTER_ENABLED);
179         String JavaDoc disabled= fromDefault ? store.getDefaultString(PREF_FILTER_DISABLED) : store.getString(PREF_FILTER_DISABLED);
180         
181         ArrayList JavaDoc res= new ArrayList JavaDoc();
182         
183         String JavaDoc[] enabledEntries= unpackOrderList(enabled);
184         for (int i= 0; i < enabledEntries.length; i++) {
185             res.add(enabledEntries[i]);
186         }
187         String JavaDoc[] disabledEntries= unpackOrderList(disabled);
188         for (int i= 0; i < disabledEntries.length; i++) {
189             res.add(disabledEntries[i]);
190         }
191         
192         fFilterListField.setElements(res);
193         fFilterListField.setCheckedElements(Arrays.asList(enabledEntries));
194     }
195     
196     
197     private void doButtonPressed(int index) {
198         if (index == IDX_ADD) { // add new
199
List JavaDoc existing= fFilterListField.getElements();
200             TypeFilterInputDialog dialog= new TypeFilterInputDialog(getShell(), existing);
201             if (dialog.open() == Window.OK) {
202                 Object JavaDoc res= dialog.getResult();
203                 fFilterListField.addElement(res);
204                 fFilterListField.setChecked(res, true);
205             }
206         } else if (index == IDX_ADD_PACKAGE) { // add packages
207
String JavaDoc[] res= choosePackage();
208             if (res != null) {
209                 fFilterListField.addElements(Arrays.asList(res));
210                 for (int i= 0; i < res.length; i++) {
211                     fFilterListField.setChecked(res[i], true);
212                 }
213             }
214             
215         } else if (index == IDX_EDIT) { // edit
216
List JavaDoc selected= fFilterListField.getSelectedElements();
217             if (selected.isEmpty()) {
218                 return;
219             }
220             String JavaDoc editedEntry= (String JavaDoc) selected.get(0);
221             
222             List JavaDoc existing= fFilterListField.getElements();
223             existing.remove(editedEntry);
224             
225             TypeFilterInputDialog dialog= new TypeFilterInputDialog(getShell(), existing);
226             dialog.setInitialString(editedEntry);
227             if (dialog.open() == Window.OK) {
228                 fFilterListField.replaceElement(editedEntry, dialog.getResult());
229             }
230         }
231     }
232     
233     private String JavaDoc[] choosePackage() {
234         IJavaSearchScope scope= SearchEngine.createWorkspaceScope();
235         BusyIndicatorRunnableContext context= new BusyIndicatorRunnableContext();
236         int flags= PackageSelectionDialog.F_SHOW_PARENTS | PackageSelectionDialog.F_HIDE_DEFAULT_PACKAGE | PackageSelectionDialog.F_REMOVE_DUPLICATES;
237         PackageSelectionDialog dialog = new PackageSelectionDialog(getShell(), context, flags , scope);
238         dialog.setTitle(PreferencesMessages.TypeFilterPreferencePage_choosepackage_label);
239         dialog.setMessage(PreferencesMessages.TypeFilterPreferencePage_choosepackage_description);
240         dialog.setMultipleSelection(true);
241         if (dialog.open() == IDialogConstants.OK_ID) {
242             Object JavaDoc[] fragments= dialog.getResult();
243             String JavaDoc[] res= new String JavaDoc[fragments.length];
244             for (int i= 0; i < res.length; i++) {
245                 res[i]= ((IPackageFragment) fragments[i]).getElementName() + ".*"; //$NON-NLS-1$
246
}
247             return res;
248         }
249         return null;
250     }
251     
252     
253     public void init(IWorkbench workbench) {
254     }
255         
256     /*
257      * @see PreferencePage#performDefaults()
258      */

259     protected void performDefaults() {
260         initialize(true);
261         
262         super.performDefaults();
263     }
264
265
266     /*
267      * @see org.eclipse.jface.preference.IPreferencePage#performOk()
268      */

269     public boolean performOk() {
270         IPreferenceStore prefs= JavaPlugin.getDefault().getPreferenceStore();
271         
272         List JavaDoc checked= fFilterListField.getCheckedElements();
273         List JavaDoc unchecked= fFilterListField.getElements();
274         unchecked.removeAll(checked);
275         
276         prefs.setValue(PREF_FILTER_ENABLED, packOrderList(checked));
277         prefs.setValue(PREF_FILTER_DISABLED, packOrderList(unchecked));
278         JavaPlugin.getDefault().savePluginPreferences();
279         return true;
280     }
281
282
283 }
284
285
286
Popular Tags