blob: f6f62cb93495dd5d5eb228c00dd9aeed320eff09 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.views.markers.internal;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class DialogProblemFilter extends org.eclipse.ui.views.markers.internal.DialogMarkerFilter {
private DescriptionGroup descriptionGroup;
private SeverityGroup severityGroup;
private class DescriptionGroup {
private Label descriptionLabel;
private Combo combo;
private Text description;
private String contains = Messages.getString("filtersDialog.contains"); //$NON-NLS-1$
private String doesNotContain = Messages.getString("filtersDialog.doesNotContain"); //$NON-NLS-1$
public DescriptionGroup(Composite parent) {
descriptionLabel = new Label(parent, SWT.NONE);
descriptionLabel.setFont(parent.getFont());
descriptionLabel.setText(Messages.getString("filtersDialog.descriptionLabel")); //$NON-NLS-1$
combo = new Combo(parent, SWT.READ_ONLY);
combo.setFont(parent.getFont());
combo.add(contains);
combo.add(doesNotContain);
combo.addSelectionListener(selectionListener);
// Prevent Esc and Return from closing the dialog when the combo is active.
combo.addTraverseListener(new TraverseListener() {
public void keyTraversed(TraverseEvent e) {
if (e.detail == SWT.TRAVERSE_ESCAPE || e.detail == SWT.TRAVERSE_RETURN) {
e.doit = false;
}
}
});
description = new Text(parent, SWT.SINGLE | SWT.BORDER);
description.setFont(parent.getFont());
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 3;
description.setLayoutData(data);
description.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
DialogProblemFilter.this.markDirty();
}
});
}
public boolean getContains() {
return combo.getSelectionIndex() == combo.indexOf(contains);
}
public void setContains(boolean value) {
if (value) {
combo.select(combo.indexOf(contains));
}
else {
combo.select(combo.indexOf(doesNotContain));
}
}
public void setDescription(String text) {
if (text == null) {
description.setText(""); //$NON-NLS-1$
}
else {
description.setText(text);
}
}
public String getDescription() {
return description.getText();
}
public void updateEnablement() {
descriptionLabel.setEnabled(isFilterEnabled());
combo.setEnabled(isFilterEnabled());
description.setEnabled(isFilterEnabled());
}
}
private class SeverityGroup {
private Button enablementButton;
private Button errorButton;
private Button warningButton;
private Button infoButton;
public SeverityGroup(Composite parent) {
SelectionListener listener = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
updateEnablement();
DialogProblemFilter.this.markDirty();
}
};
enablementButton = new Button(parent, SWT.CHECK);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 2;
enablementButton.setLayoutData(data);
enablementButton.setFont(parent.getFont());
enablementButton.setText(Messages.getString("filtersDialog.severityLabel")); //$NON-NLS-1$
enablementButton.addSelectionListener(listener);
errorButton = new Button(parent, SWT.CHECK);
errorButton.setFont(parent.getFont());
errorButton.setText(Messages.getString("filtersDialog.severityError")); //$NON-NLS-1$
errorButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
errorButton.addSelectionListener(selectionListener);
warningButton = new Button(parent, SWT.CHECK);
warningButton.setFont(parent.getFont());
warningButton.setText(Messages.getString("filtersDialog.severityWarning")); //$NON-NLS-1$
warningButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
warningButton.addSelectionListener(selectionListener);
infoButton = new Button(parent, SWT.CHECK);
infoButton.setFont(parent.getFont());
infoButton.setText(Messages.getString("filtersDialog.severityInfo")); //$NON-NLS-1$
infoButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
infoButton.addSelectionListener(selectionListener);
}
public boolean isEnabled() {
return enablementButton.getSelection();
}
public void setEnabled(boolean enabled) {
enablementButton.setSelection(enabled);
}
public boolean isErrorSelected() {
return errorButton.getSelection();
}
public void setErrorSelected(boolean selected) {
errorButton.setSelection(selected);
}
public boolean isWarningSelected() {
return warningButton.getSelection();
}
public void setWarningSelected(boolean selected) {
warningButton.setSelection(selected);
}
public boolean isInfoSelected() {
return infoButton.getSelection();
}
public void setInfoSelected(boolean selected) {
infoButton.setSelection(selected);
}
public void updateEnablement() {
enablementButton.setEnabled(isFilterEnabled());
errorButton.setEnabled(enablementButton.isEnabled() && isEnabled());
warningButton.setEnabled(enablementButton.isEnabled() && isEnabled());
infoButton.setEnabled(enablementButton.isEnabled() && isEnabled());
}
}
/**
* @param parentShell
* @param filter
*/
public DialogProblemFilter(Shell parentShell, ProblemFilter filter) {
super(parentShell, filter);
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.markerview.FiltersDialog#createAttributesArea(org.eclipse.swt.widgets.Composite)
*/
protected void createAttributesArea(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setFont(parent.getFont());
composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
GridLayout layout = new GridLayout(5, false);
layout.verticalSpacing = 7;
composite.setLayout(layout);
descriptionGroup = new DescriptionGroup(composite);
severityGroup = new SeverityGroup(composite);
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.markerview.FiltersDialog#updateFilterFromUI(org.eclipse.ui.views.markerview.MarkerFilter)
*/
protected void updateFilterFromUI() {
ProblemFilter filter = (ProblemFilter) getFilter();
filter.setContains(descriptionGroup.getContains());
filter.setDescription(descriptionGroup.getDescription().trim());
filter.setSelectBySeverity(severityGroup.isEnabled());
int severity = 0;
if (severityGroup.isErrorSelected()) {
severity = severity | ProblemFilter.SEVERITY_ERROR;
}
if (severityGroup.isWarningSelected()) {
severity = severity | ProblemFilter.SEVERITY_WARNING;
}
if (severityGroup.isInfoSelected()) {
severity = severity | ProblemFilter.SEVERITY_INFO;
}
filter.setSeverity(severity);
super.updateFilterFromUI();
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.markerview.FiltersDialog#updateUIFromFilter(org.eclipse.ui.views.markerview.MarkerFilter)
*/
protected void updateUIFromFilter() {
ProblemFilter filter = (ProblemFilter) getFilter();
descriptionGroup.setContains(filter.getContains());
descriptionGroup.setDescription(filter.getDescription());
severityGroup.setEnabled(filter.getSelectBySeverity());
int severity = filter.getSeverity();
severityGroup.setErrorSelected((severity & ProblemFilter.SEVERITY_ERROR) > 0);
severityGroup.setWarningSelected((severity & ProblemFilter.SEVERITY_WARNING) > 0);
severityGroup.setInfoSelected((severity & ProblemFilter.SEVERITY_INFO) > 0);
super.updateUIFromFilter();
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.markerview.FiltersDialog#updateEnabledState()
*/
protected void updateEnabledState() {
super.updateEnabledState();
descriptionGroup.updateEnablement();
severityGroup.updateEnablement();
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.markerview.FiltersDialog#resetPressed()
*/
protected void resetPressed() {
descriptionGroup.setContains(ProblemFilter.DEFAULT_CONTAINS);
descriptionGroup.setDescription(ProblemFilter.DEFAULT_DESCRIPTION);
severityGroup.setEnabled(ProblemFilter.DEFAULT_SELECT_BY_SEVERITY);
severityGroup.setErrorSelected((ProblemFilter.DEFAULT_SEVERITY & ProblemFilter.SEVERITY_ERROR) > 0);
severityGroup.setWarningSelected((ProblemFilter.DEFAULT_SEVERITY & ProblemFilter.SEVERITY_WARNING) > 0);
severityGroup.setInfoSelected((ProblemFilter.DEFAULT_SEVERITY & ProblemFilter.SEVERITY_INFO) > 0);
super.resetPressed();
}
}