package org.rubypeople.rdt.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);
}
}