blob: b69297c4fd2232e695c31cce4413f00fc2c6395e [file] [log] [blame]
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
package org.eclipse.search.internal.ui.util;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.StringTokenizer;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.search.internal.ui.SearchMessages;
public class FileTypeEditor extends SelectionAdapter implements DisposeListener, SelectionListener {
private Combo fTextField;
private Button fBrowseButton;
private IEditorRegistry fResourceEditorRegistry;
final static String TYPE_DELIMITER= SearchMessages.getString("FileTypeEditor.typeDelimiter"); //$NON-NLS-1$
public FileTypeEditor(IEditorRegistry registry, Combo textField, Button browseButton) {
fResourceEditorRegistry= registry;
fTextField= textField;
fBrowseButton= browseButton;
fTextField.addDisposeListener(this);
fBrowseButton.addDisposeListener(this);
fBrowseButton.addSelectionListener(this);
}
public void widgetDisposed(DisposeEvent event) {
Widget widget= event.widget;
if (widget == fTextField)
fTextField= null;
else if (widget == fBrowseButton)
fBrowseButton= null;
}
public void widgetSelected(SelectionEvent event) {
if (event.widget == fBrowseButton)
handleBrowseButton();
}
public void widgetDoubleSelected(SelectionEvent event) {
}
/**
* Answer a collection of the currently-specified resource types
*
* @return java.util.Vector
*/
public Set getFileTypes() {
Set result= new HashSet();
StringTokenizer tokenizer= new StringTokenizer(fTextField.getText(), TYPE_DELIMITER);
while (tokenizer.hasMoreTokens()) {
String currentExtension= tokenizer.nextToken().trim();
result.add(currentExtension);
}
return result;
}
/**
* Populate self's import types field based upon the passed types collection
*
* @param types java.util.Vector
*/
public void setFileTypes(Set types) {
fTextField.setText(typesToString(types));
}
protected void handleBrowseButton() {
TypeFilteringDialog dialog= new TypeFilteringDialog(fTextField.getShell(), getFileTypes());
if (dialog.open() == dialog.OK) {
setFileTypes(new HashSet(Arrays.asList(dialog.getResult())));
}
}
public static String typesToString(Set types) {
StringBuffer result= new StringBuffer();
Iterator typesIter= types.iterator();
boolean first= true;
while (typesIter.hasNext()) {
if (!first) {
result.append(TYPE_DELIMITER);
result.append(" "); //$NON-NLS-1$
} else
first= false;
result.append(typesIter.next());
}
return result.toString();
}
}