1 11 package org.eclipse.jdt.internal.ui.preferences; 12 13 import java.util.ArrayList ; 14 import java.util.Arrays ; 15 import java.util.List ; 16 import java.util.StringTokenizer ; 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 55 public class TypeFilterPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { 56 57 public static final String TYPE_FILTER_PREF_PAGE_ID= "org.eclipse.jdt.ui.preferences.TypeFilterPreferencePage"; 59 private static final String PREF_FILTER_ENABLED= PreferenceConstants.TYPEFILTER_ENABLED; 60 private static final String PREF_FILTER_DISABLED= PreferenceConstants.TYPEFILTER_DISABLED; 61 62 private static String [] unpackOrderList(String str) { 63 StringTokenizer tok= new StringTokenizer (str, ";"); int nTokens= tok.countTokens(); 65 String [] res= new String [nTokens]; 66 for (int i= 0; i < nTokens; i++) { 67 res[i]= tok.nextToken(); 68 } 69 return res; 70 } 71 72 private static String packOrderList(List orderList) { 73 StringBuffer buf= new StringBuffer (); 74 for (int i= 0; i < orderList.size(); i++) { 75 buf.append((String ) 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 [] buttonLabels= new String [] { 120 PreferencesMessages.TypeFilterPreferencePage_add_button, 121 PreferencesMessages.TypeFilterPreferencePage_addpackage_button, 122 PreferencesMessages.TypeFilterPreferencePage_edit_button, 123 PreferencesMessages.TypeFilterPreferencePage_remove_button, 124 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 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 enabled= fromDefault ? store.getDefaultString(PREF_FILTER_ENABLED) : store.getString(PREF_FILTER_ENABLED); 179 String disabled= fromDefault ? store.getDefaultString(PREF_FILTER_DISABLED) : store.getString(PREF_FILTER_DISABLED); 180 181 ArrayList res= new ArrayList (); 182 183 String [] enabledEntries= unpackOrderList(enabled); 184 for (int i= 0; i < enabledEntries.length; i++) { 185 res.add(enabledEntries[i]); 186 } 187 String [] 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) { List existing= fFilterListField.getElements(); 200 TypeFilterInputDialog dialog= new TypeFilterInputDialog(getShell(), existing); 201 if (dialog.open() == Window.OK) { 202 Object res= dialog.getResult(); 203 fFilterListField.addElement(res); 204 fFilterListField.setChecked(res, true); 205 } 206 } else if (index == IDX_ADD_PACKAGE) { String [] 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) { List selected= fFilterListField.getSelectedElements(); 217 if (selected.isEmpty()) { 218 return; 219 } 220 String editedEntry= (String ) selected.get(0); 221 222 List 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 [] 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 [] fragments= dialog.getResult(); 243 String [] res= new String [fragments.length]; 244 for (int i= 0; i < res.length; i++) { 245 res[i]= ((IPackageFragment) fragments[i]).getElementName() + ".*"; } 247 return res; 248 } 249 return null; 250 } 251 252 253 public void init(IWorkbench workbench) { 254 } 255 256 259 protected void performDefaults() { 260 initialize(true); 261 262 super.performDefaults(); 263 } 264 265 266 269 public boolean performOk() { 270 IPreferenceStore prefs= JavaPlugin.getDefault().getPreferenceStore(); 271 272 List checked= fFilterListField.getCheckedElements(); 273 List 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 |