1 11 12 package org.eclipse.jdt.internal.ui.search; 13 14 import java.util.Arrays ; 15 16 import org.eclipse.core.runtime.IStatus; 17 import org.eclipse.core.runtime.Status; 18 import org.eclipse.jdt.internal.ui.JavaPlugin; 19 import org.eclipse.jface.viewers.ArrayContentProvider; 20 import org.eclipse.jface.viewers.CheckboxTableViewer; 21 import org.eclipse.jface.viewers.ISelectionChangedListener; 22 import org.eclipse.jface.viewers.IStructuredSelection; 23 import org.eclipse.jface.viewers.LabelProvider; 24 import org.eclipse.jface.viewers.SelectionChangedEvent; 25 import org.eclipse.swt.SWT; 26 import org.eclipse.swt.events.KeyAdapter; 27 import org.eclipse.swt.events.KeyEvent; 28 import org.eclipse.swt.events.SelectionAdapter; 29 import org.eclipse.swt.events.SelectionEvent; 30 import org.eclipse.swt.layout.GridData; 31 import org.eclipse.swt.layout.GridLayout; 32 import org.eclipse.swt.widgets.Button; 33 import org.eclipse.swt.widgets.Composite; 34 import org.eclipse.swt.widgets.Control; 35 import org.eclipse.swt.widgets.Label; 36 import org.eclipse.swt.widgets.Table; 37 import org.eclipse.swt.widgets.Text; 38 import org.eclipse.ui.dialogs.SelectionStatusDialog; 39 40 public class FiltersDialog extends SelectionStatusDialog { 41 42 private CheckboxTableViewer fListViewer; 43 private JavaSearchResultPage fPage; 44 private Button fLimitElementsCheckbox; 45 private Text fLimitElementsField; 46 47 private int fLimitElementCount= 1000; 48 private boolean fLimitElements= false; 49 50 public FiltersDialog(JavaSearchResultPage page) { 51 super(page.getSite().getShell()); 52 setTitle(org.eclipse.jdt.internal.ui.search.SearchMessages.FiltersDialog_title); 53 setStatusLineAboveButtons(true); 54 setShellStyle(getShellStyle() | SWT.RESIZE); 55 fPage = page; 56 } 57 58 public MatchFilter[] getEnabledFilters() { 59 Object [] result = getResult(); 60 MatchFilter[] filters = new MatchFilter[result.length]; 61 System.arraycopy(result, 0, filters, 0, filters.length); 62 return filters; 63 } 64 65 public boolean isLimitEnabled() { 66 return fLimitElements; 67 } 68 69 72 public int getElementLimit() { 73 return fLimitElementCount; 74 } 75 76 79 protected Control createDialogArea(Composite composite) { 80 Composite parent = (Composite) super.createDialogArea(composite); 81 initializeDialogUnits(composite); 82 83 createTableLimit(parent); 84 Label l= new Label(parent, SWT.NONE); 86 l.setFont(parent.getFont()); 87 l.setText(org.eclipse.jdt.internal.ui.search.SearchMessages.FiltersDialog_filters_label); 88 89 Table table = new Table(parent, SWT.CHECK | SWT.BORDER); 90 table.setFont(parent.getFont()); 91 fListViewer = new CheckboxTableViewer(table); 92 93 94 GridData data = new GridData(GridData.FILL_BOTH); 95 data.minimumHeight= convertHeightInCharsToPixels(8); 96 table.setLayoutData(data); 97 98 fListViewer.setLabelProvider(new LabelProvider() { 99 public String getText(Object element) { 100 return ((MatchFilter) element).getName(); 102 } 103 }); 104 105 ArrayContentProvider cp = new ArrayContentProvider(); 107 fListViewer.setContentProvider(cp); 108 fListViewer.setInput(MatchFilter.allFilters()); 109 fListViewer.setCheckedElements(fPage.getMatchFilters()); 110 111 l= new Label(parent, SWT.NONE); 112 l.setFont(parent.getFont()); 113 l.setText(org.eclipse.jdt.internal.ui.search.SearchMessages.FiltersDialog_description_label); 114 final Text description = new Text(parent, SWT.LEFT | SWT.WRAP | SWT.MULTI | SWT.READ_ONLY | SWT.BORDER | SWT.V_SCROLL); 115 description.setFont(parent.getFont()); 116 data = new GridData(GridData.FILL_HORIZONTAL); 117 data.heightHint = convertHeightInCharsToPixels(3); 118 description.setLayoutData(data); 119 fListViewer.addSelectionChangedListener(new ISelectionChangedListener() { 120 public void selectionChanged(SelectionChangedEvent event) { 121 Object selectedElement = ((IStructuredSelection) event.getSelection()).getFirstElement(); 122 if (selectedElement != null) 123 description.setText(((MatchFilter) selectedElement).getDescription()); 124 else 125 description.setText(""); } 127 }); 128 return parent; 129 } 130 131 132 private void createTableLimit(Composite ancestor) { 133 Composite parent = new Composite(ancestor, SWT.NONE); 134 GridLayout gl = new GridLayout(); 135 gl.numColumns = 2; 136 gl.marginWidth = 0; 137 gl.marginHeight = 0; 138 parent.setLayout(gl); 139 GridData gd = new GridData(); 140 gd.horizontalSpan = 2; 141 parent.setLayoutData(gd); 142 143 fLimitElementsCheckbox = new Button(parent, SWT.CHECK); 144 fLimitElementsCheckbox.setText(org.eclipse.jdt.internal.ui.search.SearchMessages.FiltersDialog_limit_label); 145 fLimitElementsCheckbox.setLayoutData(new GridData()); 146 147 fLimitElementsField = new Text(parent, SWT.BORDER); 148 gd = new GridData(); 149 gd.widthHint = convertWidthInCharsToPixels(6); 150 fLimitElementsField.setLayoutData(gd); 151 152 applyDialogFont(parent); 153 154 fLimitElementsCheckbox.addSelectionListener(new SelectionAdapter() { 155 public void widgetSelected(SelectionEvent e) { 156 updateLimitValueEnablement(); 157 } 158 159 }); 160 161 fLimitElementsField.addKeyListener(new KeyAdapter() { 162 public void keyReleased(KeyEvent e) { 163 validateText(); 164 } 165 }); 166 initLimit(); 167 } 168 169 private void initLimit() { 170 boolean limit = fPage.limitElements(); 171 int count = fPage.getElementLimit(); 172 fLimitElementsCheckbox.setSelection(limit); 173 fLimitElementsField.setText(String.valueOf(count)); 174 175 updateLimitValueEnablement(); 176 } 177 178 private void updateLimitValueEnablement() { 179 fLimitElementsField.setEnabled(fLimitElementsCheckbox.getSelection()); 180 } 181 182 protected void validateText() { 183 String text = fLimitElementsField.getText(); 184 int value = -1; 185 try { 186 value = Integer.valueOf(text).intValue(); 187 } catch (NumberFormatException e) { 188 189 } 190 if (fLimitElementsCheckbox.getSelection() && value <= 0) 191 updateStatus(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), 0, org.eclipse.jdt.internal.ui.search.SearchMessages.FiltersDialog_limit_error, null)); 192 else 193 updateStatus(new Status(IStatus.OK, JavaPlugin.getPluginId(), 0, "", null)); } 195 196 protected void computeResult() { 197 fLimitElementCount= Integer.valueOf(fLimitElementsField.getText()).intValue(); 198 fLimitElements= fLimitElementsCheckbox.getSelection(); 199 200 setResult(Arrays.asList(fListViewer.getCheckedElements())); 201 } 202 } 203 | Popular Tags |