/******************************************************************************* * 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.TraverseEvent; import org.eclipse.swt.events.TraverseListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; 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; /** * DialogBookmarkFilter is the filter dialog for bookmarks * */ public class DialogBookmarkFilter extends DialogMarkerFilter { private DescriptionGroup descriptionGroup; 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 description group. * * @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) { DialogBookmarkFilter.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 enablement based on enabled. * @param enabled */ public void updateEnablement(boolean enabled) { descriptionLabel.setEnabled(enabled); combo.setEnabled(enabled); description.setEnabled(enabled); } } /** * @param parentShell * @param filters */ public DialogBookmarkFilter(Shell parentShell, BookmarkFilter[] 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); } /* (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); BookmarkFilter bookmark = (BookmarkFilter) filter; bookmark.setContains(descriptionGroup.getContains()); bookmark.setDescription(descriptionGroup.getDescription().trim()); } /* (non-Javadoc) * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateUIWithFilter(org.eclipse.ui.views.markers.internal.MarkerFilter) */ protected void updateUIWithFilter(MarkerFilter filter) { super.updateUIWithFilter(filter); BookmarkFilter bookmark = (BookmarkFilter) filter; descriptionGroup.setContains(bookmark.getContains()); descriptionGroup.setDescription(bookmark.getDescription()); } /* (non-Javadoc) * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateEnabledState(boolean) */ protected void updateEnabledState(boolean enabled) { super.updateEnabledState(enabled); descriptionGroup.updateEnablement(enabled); } /* * (non-Javadoc) * * @see org.eclipse.ui.views.markerview.FiltersDialog#resetPressed() */ protected void resetPressed() { descriptionGroup.setContains(BookmarkFilter.DEFAULT_CONTAINS); descriptionGroup.setDescription(BookmarkFilter.DEFAULT_DESCRIPTION); super.resetPressed(); } /* * (non-Javadoc) * * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#newFilter(java.lang.String) */ protected MarkerFilter newFilter(String newName) { return new BookmarkFilter(newName); } }