--- /dev/null
+package net.sourceforge.phpdt.internal.ui.util;
+
+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.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public abstract class ResourceSelector {
+ protected final static String EMPTY_STRING = "";
+
+ protected Composite composite;
+
+ protected Button browseButton;
+
+ protected Text textField;
+
+ protected String browseDialogMessage = EMPTY_STRING;
+
+ protected String browseDialogTitle = EMPTY_STRING;
+
+ protected String validatedSelectionText = EMPTY_STRING;
+
+ public ResourceSelector(Composite parent) {
+ composite = new Composite(parent, SWT.NONE);
+ GridLayout compositeLayout = new GridLayout();
+ compositeLayout.marginWidth = 0;
+ compositeLayout.marginHeight = 0;
+ compositeLayout.numColumns = 2;
+ composite.setLayout(compositeLayout);
+
+ textField = new Text(composite, SWT.SINGLE | SWT.BORDER);
+ textField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ textField.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ validatedSelectionText = validateResourceSelection();
+ }
+ });
+
+ browseButton = new Button(composite, SWT.PUSH);
+ browseButton.setText("Browse...");
+ browseButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleBrowseSelected();
+ }
+ });
+ }
+
+ protected abstract void handleBrowseSelected();
+
+ protected abstract String validateResourceSelection();
+
+ protected Shell getShell() {
+ return composite.getShell();
+ }
+
+ public void setLayoutData(Object layoutData) {
+ composite.setLayoutData(layoutData);
+ }
+
+ public void addModifyListener(ModifyListener aListener) {
+ textField.addModifyListener(aListener);
+ }
+
+ public void setBrowseDialogMessage(String aMessage) {
+ browseDialogMessage = aMessage;
+ }
+
+ public void setBrowseDialogTitle(String aTitle) {
+ browseDialogTitle = aTitle;
+ }
+
+ public void setEnabled(boolean enabled) {
+ composite.setEnabled(enabled);
+ textField.setEnabled(enabled);
+ browseButton.setEnabled(enabled);
+ }
+
+ public String getSelectionText() {
+ return textField.getText();
+ }
+
+ public String getValidatedSelectionText() {
+ return validatedSelectionText;
+ }
+
+ public void setSelectionText(String newText) {
+ textField.setText(newText);
+ }
+}