/******************************************************************************* * Copyright (c) 2000, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-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 DialogTaskFilter extends org.eclipse.ui.views.markers.internal.DialogMarkerFilter { private DescriptionGroup descriptionGroup; private PriorityGroup priorityGroup; private StatusGroup statusGroup; private class DescriptionGroup { private Label descriptionLabel; private Combo combo; private Text description; private String contains = MarkerMessages.filtersDialog_contains; private String doesNotContain = MarkerMessages.filtersDialog_doesNotContain; /** * Create a new DescriptionGroup. * * @param parent */ public DescriptionGroup(Composite parent) { descriptionLabel = new Label(parent, SWT.NONE); descriptionLabel.setFont(parent.getFont()); descriptionLabel.setText( MarkerMessages.filtersDialog_descriptionLabel); combo = new Combo(parent, SWT.READ_ONLY); combo.setFont(parent.getFont()); combo.add(contains); combo.add(doesNotContain); combo.addSelectionListener(new SelectionAdapter(){ /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { updateForSelection(); } }); // 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) { DialogTaskFilter.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(); } /** * Update the enabled state. * @param enabled */ public void updateEnablement(boolean enabled) { descriptionLabel.setEnabled(enabled); combo.setEnabled(enabled); description.setEnabled(enabled); } } private class PriorityGroup { private Button enablementButton; private Button highButton; private Button normalButton; private Button lowButton; /** * Create a new priority group. * * @param parent */ public PriorityGroup(Composite parent) { SelectionListener listener = new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { updateEnablement(true); DialogTaskFilter.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( MarkerMessages.filtersDialog_priorityLabel); enablementButton.addSelectionListener(listener); highButton = new Button(parent, SWT.CHECK); highButton.setFont(parent.getFont()); highButton .setText(MarkerMessages.filtersDialog_priorityHigh); highButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); highButton.addSelectionListener(new SelectionAdapter(){ /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { updateForSelection(); } }); normalButton = new Button(parent, SWT.CHECK); normalButton.setFont(parent.getFont()); normalButton.setText(MarkerMessages.filtersDialog_priorityNormal); normalButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); normalButton.addSelectionListener(new SelectionAdapter(){ /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { updateForSelection(); } }); lowButton = new Button(parent, SWT.CHECK); lowButton.setFont(parent.getFont()); lowButton.setText(MarkerMessages.filtersDialog_priorityLow); lowButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); lowButton.addSelectionListener(new SelectionAdapter(){ /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { updateForSelection(); } }); } public boolean isPriorityEnabled() { return enablementButton.getSelection(); } public void setEnabled(boolean enabled) { enablementButton.setSelection(enabled); } public boolean isHighSelected() { return highButton.getSelection(); } public void setHighSelected(boolean selected) { highButton.setSelection(selected); } public boolean isNormalSelected() { return normalButton.getSelection(); } public void setNormalSelected(boolean selected) { normalButton.setSelection(selected); } public boolean isLowSelected() { return lowButton.getSelection(); } public void setLowSelected(boolean selected) { lowButton.setSelection(selected); } /** * Update enablement based on enabled. * @param enabled */ public void updateEnablement(boolean enabled) { enablementButton.setEnabled(enabled); highButton.setEnabled(enabled && isPriorityEnabled()); normalButton .setEnabled(enabled && isPriorityEnabled()); lowButton.setEnabled(enabled && isPriorityEnabled()); } } private class StatusGroup { private Button enablementButton; private Button completeButton; private Button incompleteButton; /** * Create a new StatusGroup. * * @param parent */ public StatusGroup(Composite parent) { SelectionListener enablementListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateEnablement(true); DialogTaskFilter.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(MarkerMessages.filtersDialog_statusLabel); enablementButton.addSelectionListener(enablementListener); Composite composite = new Composite(parent, SWT.NONE); composite.setFont(parent.getFont()); GridLayout layout = new GridLayout(2, false); layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 3; composite.setLayoutData(data); SelectionListener listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { completeButton.setSelection(!incompleteButton .getSelection()); incompleteButton.setSelection(!completeButton .getSelection()); DialogTaskFilter.this.markDirty(); } }; completeButton = new Button(composite, SWT.RADIO); completeButton.setFont(composite.getFont()); completeButton.setText(MarkerMessages.filtersDialog_statusComplete); completeButton.addSelectionListener(listener); incompleteButton = new Button(composite, SWT.RADIO); incompleteButton.setFont(composite.getFont()); incompleteButton.setText(MarkerMessages.filtersDialog_statusIncomplete); incompleteButton.addSelectionListener(listener); } public boolean isStatusEnabled() { return enablementButton.getSelection(); } public void setEnabled(boolean enabled) { enablementButton.setSelection(enabled); } public boolean getDone() { return completeButton.getSelection(); } public void setDone(boolean done) { completeButton.setSelection(done); incompleteButton.setSelection(!done); } /** * Update the enablement state of the group. * @param enabled */ public void updateEnablement(boolean enabled) { enablementButton.setEnabled(enabled); completeButton.setEnabled(isStatusEnabled() && enabled); incompleteButton.setEnabled(isStatusEnabled() && enabled); } } /** * Create a new instance of the receiver * * @param parentShell * @param filters */ public DialogTaskFilter(Shell parentShell, TaskFilter[] filters) { super(parentShell, filters); } /* * (non-Javadoc) * * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#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); priorityGroup = new PriorityGroup(composite); statusGroup = new StatusGroup(composite); } /* (non-Javadoc) * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateFilterFromUI(org.eclipse.ui.views.markers.internal.MarkerFilter) */ protected void updateFilterFromUI(MarkerFilter filter) { super.updateFilterFromUI(filter); TaskFilter taskFilter = (TaskFilter)filter; taskFilter.setContains(descriptionGroup.getContains()); taskFilter.setDescription(descriptionGroup.getDescription().trim()); taskFilter.setSelectByPriority(priorityGroup.isPriorityEnabled()); int priority = 0; if (priorityGroup.isHighSelected()) { priority = priority | TaskFilter.PRIORITY_HIGH; } if (priorityGroup.isNormalSelected()) { priority = priority | TaskFilter.PRIORITY_NORMAL; } if (priorityGroup.isLowSelected()) { priority = priority | TaskFilter.PRIORITY_LOW; } taskFilter.setPriority(priority); taskFilter.setSelectByDone(statusGroup.isStatusEnabled()); taskFilter.setDone(statusGroup.getDone()); } /* (non-Javadoc) * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateUIWithFilter(org.eclipse.ui.views.markers.internal.MarkerFilter) */ protected void updateUIWithFilter(MarkerFilter filter) { TaskFilter taskFilter = (TaskFilter)filter; descriptionGroup.setContains(taskFilter.getContains()); descriptionGroup.setDescription(taskFilter.getDescription()); priorityGroup.setEnabled(taskFilter.getSelectByPriority()); int priority = taskFilter.getPriority(); priorityGroup .setHighSelected((priority & TaskFilter.PRIORITY_HIGH) > 0); priorityGroup .setNormalSelected((priority & TaskFilter.PRIORITY_NORMAL) > 0); priorityGroup.setLowSelected((priority & TaskFilter.PRIORITY_LOW) > 0); statusGroup.setEnabled(taskFilter.getSelectByDone()); statusGroup.setDone(taskFilter.getDone()); super.updateUIWithFilter(filter); } /* (non-Javadoc) * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateEnabledState(boolean) */ protected void updateEnabledState(boolean enabled) { super.updateEnabledState(enabled); descriptionGroup.updateEnablement(enabled); priorityGroup.updateEnablement(enabled); statusGroup.updateEnablement(enabled); } /* * (non-Javadoc) * * @see org.eclipse.ui.views.markerview.FiltersDialog#resetPressed() */ protected void resetPressed() { descriptionGroup.setContains(TaskFilter.DEFAULT_CONTAINS); descriptionGroup.setDescription(TaskFilter.DEFAULT_DESCRIPTION); priorityGroup.setEnabled(TaskFilter.DEFAULT_SELECT_BY_PRIORITY); priorityGroup .setHighSelected((TaskFilter.DEFAULT_PRIORITY & TaskFilter.PRIORITY_HIGH) > 0); priorityGroup .setNormalSelected((TaskFilter.DEFAULT_PRIORITY & TaskFilter.PRIORITY_NORMAL) > 0); priorityGroup .setLowSelected((TaskFilter.DEFAULT_PRIORITY & TaskFilter.PRIORITY_NORMAL) > 0); statusGroup.setEnabled(TaskFilter.DEFAULT_SELECT_BY_DONE); statusGroup.setDone(TaskFilter.DEFAULT_DONE); super.resetPressed(); } /* * (non-Javadoc) * * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#newFilter(java.lang.String) */ protected MarkerFilter newFilter(String newName) { return new TaskFilter(newName); } }