001: package org.eclipse.ui.internal.provisional.views.markers;
002:
003: /*******************************************************************************
004: * Copyright (c) 2007 IBM Corporation and others.
005: * All rights reserved. This program and the accompanying materials
006: * are made available under the terms of the Eclipse Public License v1.0
007: * which accompanies this distribution, and is available at
008: * http://www.eclipse.org/legal/epl-v10.html
009: *
010: * Contributors:
011: * IBM Corporation - initial API and implementation
012: ******************************************************************************/
013:
014: import org.eclipse.jface.dialogs.Dialog;
015: import org.eclipse.jface.dialogs.IDialogConstants;
016: import org.eclipse.jface.resource.JFaceResources;
017: import org.eclipse.swt.SWT;
018: import org.eclipse.swt.events.SelectionAdapter;
019: import org.eclipse.swt.events.SelectionEvent;
020: import org.eclipse.swt.events.TraverseEvent;
021: import org.eclipse.swt.events.TraverseListener;
022: import org.eclipse.swt.graphics.FontMetrics;
023: import org.eclipse.swt.graphics.GC;
024: import org.eclipse.swt.layout.GridData;
025: import org.eclipse.swt.layout.GridLayout;
026: import org.eclipse.swt.widgets.Button;
027: import org.eclipse.swt.widgets.Combo;
028: import org.eclipse.swt.widgets.Composite;
029: import org.eclipse.swt.widgets.Label;
030: import org.eclipse.swt.widgets.Text;
031: import org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea;
032: import org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter;
033: import org.eclipse.ui.views.markers.internal.MarkerMessages;
034:
035: /**
036: * SeverityAndDescriptionConfigurationArea is the configuration area for the
037: * severity and description field.
038: *
039: * @since 3.4
040: *
041: */
042: public class SeverityAndDescriptionConfigurationArea extends
043: FilterConfigurationArea {
044:
045: private Combo descriptionCombo;
046: private Text descriptionText;
047: private int severities;
048: private Button infoButton;
049: private Button errorButton;
050: private Button warningButton;
051:
052: /**
053: * Create a new instance of the receiver.
054: */
055: public SeverityAndDescriptionConfigurationArea() {
056: super ();
057: }
058:
059: /*
060: * (non-Javadoc)
061: *
062: * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#apply(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
063: */
064: public void apply(MarkerFieldFilter filter) {
065: SeverityAndDescriptionFieldFilter sevFilter = (SeverityAndDescriptionFieldFilter) filter;
066: sevFilter.setContainsModifier(descriptionCombo.getText());
067: sevFilter.setContainsText(descriptionText.getText());
068: sevFilter.selectedSeverities = severities;
069:
070: }
071:
072: /*
073: * (non-Javadoc)
074: *
075: * @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#createContents(org.eclipse.swt.widgets.Composite)
076: */
077: public void createContents(Composite parent) {
078:
079: createDescriptionGroup(parent);
080: createSeverityGroup(parent);
081:
082: }
083:
084: /**
085: * Create the group for the description filter.
086: *
087: * @param parent
088: */
089: private void createDescriptionGroup(Composite parent) {
090:
091: Composite descriptionComposite = new Composite(parent, SWT.NONE);
092: descriptionComposite.setLayout(new GridLayout(3, false));
093: descriptionComposite.setLayoutData(new GridData(
094: GridData.FILL_HORIZONTAL));
095:
096: Label descriptionLabel = new Label(descriptionComposite,
097: SWT.NONE);
098: descriptionLabel
099: .setText(MarkerMessages.filtersDialog_descriptionLabel);
100:
101: descriptionCombo = new Combo(descriptionComposite,
102: SWT.READ_ONLY);
103: descriptionCombo
104: .add(SeverityAndDescriptionFieldFilter.CONTAINS);
105: descriptionCombo
106: .add(SeverityAndDescriptionFieldFilter.DOES_NOT_CONTAIN);
107:
108: // Prevent Esc and Return from closing the dialog when the combo is
109: // active.
110: descriptionCombo.addTraverseListener(new TraverseListener() {
111: public void keyTraversed(TraverseEvent e) {
112: if (e.detail == SWT.TRAVERSE_ESCAPE
113: || e.detail == SWT.TRAVERSE_RETURN) {
114: e.doit = false;
115: }
116: }
117: });
118:
119: GC gc = new GC(descriptionComposite);
120: gc.setFont(JFaceResources.getDialogFont());
121: FontMetrics fontMetrics = gc.getFontMetrics();
122: gc.dispose();
123:
124: descriptionText = new Text(descriptionComposite, SWT.SINGLE
125: | SWT.BORDER);
126: GridData data = new GridData(GridData.FILL_HORIZONTAL
127: | GridData.GRAB_HORIZONTAL);
128: data.widthHint = Dialog.convertWidthInCharsToPixels(
129: fontMetrics, 25);
130: descriptionText.setLayoutData(data);
131: }
132:
133: /**
134: * Create a group for the severity selection.
135: *
136: * @param parent
137: */
138: private void createSeverityGroup(Composite parent) {
139:
140: Composite severityComposite = new Composite(parent, SWT.NONE);
141: GridLayout layout = new GridLayout(4, false);
142: layout.horizontalSpacing = IDialogConstants.BUTTON_MARGIN;
143: severityComposite.setLayout(layout);
144: severityComposite.setLayoutData(new GridData(
145: GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
146:
147: Label label = new Label(severityComposite, SWT.NONE);
148: label.setText(MarkerMessages.filtersDialog_severityLabel);
149:
150: errorButton = new Button(severityComposite, SWT.CHECK);
151: errorButton.setText(MarkerMessages.filtersDialog_severityError);
152: errorButton.addSelectionListener(new SelectionAdapter() {
153: /*
154: * (non-Javadoc)
155: *
156: * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
157: */
158: public void widgetSelected(SelectionEvent e) {
159: updateSeverities(
160: SeverityAndDescriptionFieldFilter.SEVERITY_ERROR,
161: errorButton.getSelection());
162: }
163: });
164: GridData data = new GridData();
165: data.horizontalIndent = IDialogConstants.BUTTON_MARGIN;
166: errorButton.setLayoutData(data);
167:
168: warningButton = new Button(severityComposite, SWT.CHECK);
169: warningButton
170: .setText(MarkerMessages.filtersDialog_severityWarning);
171: warningButton.addSelectionListener(new SelectionAdapter() {
172: /*
173: * (non-Javadoc)
174: *
175: * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
176: */
177: public void widgetSelected(SelectionEvent e) {
178: updateSeverities(
179: SeverityAndDescriptionFieldFilter.SEVERITY_WARNING,
180: warningButton.getSelection());
181: }
182: });
183:
184: infoButton = new Button(severityComposite, SWT.CHECK);
185: infoButton.setText(MarkerMessages.filtersDialog_severityInfo);
186: infoButton.addSelectionListener(new SelectionAdapter() {
187: /*
188: * (non-Javadoc)
189: *
190: * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
191: */
192: public void widgetSelected(SelectionEvent e) {
193: updateSeverities(
194: SeverityAndDescriptionFieldFilter.SEVERITY_INFO,
195: infoButton.getSelection());
196: }
197: });
198: }
199:
200: /*
201: * (non-Javadoc)
202: *
203: * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#initialize(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
204: */
205: public void initialize(MarkerFieldFilter filter) {
206: SeverityAndDescriptionFieldFilter sevFilter = (SeverityAndDescriptionFieldFilter) filter;
207: descriptionCombo.setText(sevFilter.getContainsModifier());
208: descriptionText.setText(sevFilter.getContainsText());
209: severities = sevFilter.selectedSeverities;
210: infoButton
211: .setSelection((SeverityAndDescriptionFieldFilter.SEVERITY_INFO & severities) > 0);
212: warningButton
213: .setSelection((SeverityAndDescriptionFieldFilter.SEVERITY_WARNING & severities) > 0);
214: errorButton
215: .setSelection((SeverityAndDescriptionFieldFilter.SEVERITY_ERROR & severities) > 0);
216: }
217:
218: /**
219: * Set or clear the flag for the constant based on the enablement.
220: *
221: * @param constant
222: * one of {@link IMarker#SEVERITY_ERROR},{@link IMarker#SEVERITY_WARNING},{@link IMarker#SEVERITY_INFO}
223: * @param enabled
224: */
225: protected void updateSeverities(int constant, boolean enabled) {
226: if (enabled)
227: severities = constant | severities;
228: else
229: severities = constant ^ severities;
230:
231: }
232:
233: }
|