1 11 package org.eclipse.jdt.internal.ui.preferences; 12 13 import java.util.List ; 14 15 import org.eclipse.core.runtime.Assert; 16 import org.eclipse.core.runtime.IStatus; 17 18 import org.eclipse.swt.SWT; 19 import org.eclipse.swt.widgets.Composite; 20 import org.eclipse.swt.widgets.Control; 21 import org.eclipse.swt.widgets.Shell; 22 import org.eclipse.swt.widgets.Text; 23 24 import org.eclipse.jface.dialogs.IDialogConstants; 25 import org.eclipse.jface.dialogs.StatusDialog; 26 27 import org.eclipse.ui.PlatformUI; 28 29 import org.eclipse.jdt.core.IPackageFragment; 30 import org.eclipse.jdt.core.JavaConventions; 31 import org.eclipse.jdt.core.JavaCore; 32 import org.eclipse.jdt.core.search.IJavaSearchScope; 33 import org.eclipse.jdt.core.search.SearchEngine; 34 35 import org.eclipse.jdt.internal.corext.util.Messages; 36 37 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds; 38 import org.eclipse.jdt.internal.ui.dialogs.PackageSelectionDialog; 39 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo; 40 import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler; 41 import org.eclipse.jdt.internal.ui.util.BusyIndicatorRunnableContext; 42 import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField; 43 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener; 44 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter; 45 import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil; 46 import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonDialogField; 47 48 51 public class TypeFilterInputDialog extends StatusDialog { 52 53 private class TypeFilterInputAdapter implements IDialogFieldListener, IStringButtonAdapter { 54 57 public void dialogFieldChanged(DialogField field) { 58 doValidation(); 59 } 60 63 public void changeControlPressed(DialogField field) { 64 doButtonPressed(); 65 } 66 } 67 68 private StringButtonDialogField fNameDialogField; 69 private List fExistingEntries; 70 71 public TypeFilterInputDialog(Shell parent, List existingEntries) { 72 super(parent); 73 74 fExistingEntries= existingEntries; 75 76 setTitle(PreferencesMessages.TypeFilterInputDialog_title); 77 78 TypeFilterInputAdapter adapter= new TypeFilterInputAdapter(); 79 80 fNameDialogField= new StringButtonDialogField(adapter); 81 fNameDialogField.setLabelText(PreferencesMessages.TypeFilterInputDialog_message); 82 fNameDialogField.setButtonLabel(PreferencesMessages.TypeFilterInputDialog_browse_button); 83 fNameDialogField.setDialogFieldListener(adapter); 84 85 fNameDialogField.setText(""); } 87 88 public void setInitialString(String input) { 89 Assert.isNotNull(input); 90 fNameDialogField.setText(input); 91 } 92 93 public Object getResult() { 94 return fNameDialogField.getText(); 95 } 96 97 protected Control createDialogArea(Composite parent) { 98 Composite composite= (Composite) super.createDialogArea(parent); 99 100 Composite inner= new Composite(composite, SWT.NONE); 101 LayoutUtil.doDefaultLayout(inner, new DialogField[] { fNameDialogField }, true, 0, 0); 102 103 int fieldWidthHint= convertWidthInCharsToPixels(60); 104 Text text= fNameDialogField.getTextControl(null); 105 LayoutUtil.setWidthHint(text, fieldWidthHint); 106 LayoutUtil.setHorizontalGrabbing(text); 107 TextFieldNavigationHandler.install(text); 108 109 fNameDialogField.postSetFocusOnDialogField(parent.getDisplay()); 110 111 applyDialogFont(composite); 112 return composite; 113 } 114 115 private void doButtonPressed() { 116 IJavaSearchScope scope= SearchEngine.createWorkspaceScope(); 117 BusyIndicatorRunnableContext context= new BusyIndicatorRunnableContext(); 118 int flags= PackageSelectionDialog.F_SHOW_PARENTS | PackageSelectionDialog.F_HIDE_DEFAULT_PACKAGE | PackageSelectionDialog.F_REMOVE_DUPLICATES; 119 PackageSelectionDialog dialog = new PackageSelectionDialog(getShell(), context, flags , scope); 120 dialog.setTitle(PreferencesMessages.TypeFilterInputDialog_choosepackage_label); 121 dialog.setMessage(PreferencesMessages.TypeFilterInputDialog_choosepackage_description); 122 dialog.setMultipleSelection(false); 123 dialog.setFilter(fNameDialogField.getText()); 124 if (dialog.open() == IDialogConstants.OK_ID) { 125 IPackageFragment res= (IPackageFragment) dialog.getFirstResult(); 126 fNameDialogField.setText(res.getElementName() + "*"); } 128 } 129 130 private void doValidation() { 131 StatusInfo status= new StatusInfo(); 132 String newText= fNameDialogField.getText(); 133 if (newText.length() == 0) { 134 status.setError(PreferencesMessages.TypeFilterInputDialog_error_enterName); 135 } else { 136 newText= newText.replace('*', 'X').replace('?', 'Y'); 137 IStatus val= JavaConventions.validatePackageName(newText, JavaCore.VERSION_1_3, JavaCore.VERSION_1_3); 138 if (val.matches(IStatus.ERROR)) { 139 status.setError(Messages.format(PreferencesMessages.TypeFilterInputDialog_error_invalidName, val.getMessage())); 140 } else { 141 if (fExistingEntries.contains(newText)) { 142 status.setError(PreferencesMessages.TypeFilterInputDialog_error_entryExists); 143 } 144 } 145 } 146 updateStatus(status); 147 } 148 149 152 protected void configureShell(Shell newShell) { 153 super.configureShell(newShell); 154 PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.IMPORT_ORGANIZE_INPUT_DIALOG); 155 } 156 } 157 | Popular Tags |