KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > ui > search > FiltersDialog


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.jdt.internal.ui.search;
13
14 import java.util.Arrays JavaDoc;
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 JavaDoc[] 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     /**
70      * @return returns the number of entries to limit the filters entry to
71      */

72     public int getElementLimit() {
73         return fLimitElementCount;
74     }
75
76     /*
77      * (non-Javadoc) Method declared on Dialog.
78      */

79     protected Control createDialogArea(Composite composite) {
80         Composite parent = (Composite) super.createDialogArea(composite);
81         initializeDialogUnits(composite);
82
83         createTableLimit(parent);
84         // Create list viewer
85
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 JavaDoc getText(Object JavaDoc element) {
100                 // Return the features's label.
101
return ((MatchFilter) element).getName();
102             }
103         });
104
105         // Set the content provider
106
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 JavaDoc selectedElement = ((IStructuredSelection) event.getSelection()).getFirstElement();
122                 if (selectedElement != null)
123                     description.setText(((MatchFilter) selectedElement).getDescription());
124                 else
125                     description.setText(""); //$NON-NLS-1$
126
}
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 JavaDoc text = fLimitElementsField.getText();
184         int value = -1;
185         try {
186             value = Integer.valueOf(text).intValue();
187         } catch (NumberFormatException JavaDoc 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)); //$NON-NLS-1$
194
}
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