package org.hibernate.eclipse.launch;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.internal.ui.util.SWTUtil;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.hibernate.eclipse.console.HibernateConsoleMessages;
import org.hibernate.eclipse.console.utils.DialogSelectionHelper;
public class DirectoryBrowseField extends StringDialogField {
protected Button filesystemBrowse, workspaceBrowse;
protected String filesystemBrowseLabel, workspaceBrowseLabel;
protected IPath initialFilesystemPath, initialWorkspacePath;
protected String dialogTitle, dialogDescription;
public DirectoryBrowseField (IPath initialFilesystemPath, IPath initialWorkspacePath, String dialogTitle, String dialogDescription)
{
super();
filesystemBrowseLabel = HibernateConsoleMessages.DirectoryBrowseField_filesystem;
workspaceBrowseLabel = HibernateConsoleMessages.DirectoryBrowseField_workspace;
this.initialFilesystemPath = initialFilesystemPath;
this.initialWorkspacePath = initialWorkspacePath;
this.dialogTitle = dialogTitle;
this.dialogDescription = dialogDescription;
}
protected void updateEnableState() {
super.updateEnableState();
boolean enabled = isEnabled();
if (filesystemBrowse != null)
filesystemBrowse.setEnabled(enabled);
if (workspaceBrowse != null)
workspaceBrowse.setEnabled(enabled);
}
protected static GridData gridDataForButton(Button button, int span) {
GridData gd= new GridData();
gd.horizontalAlignment= GridData.FILL;
gd.grabExcessHorizontalSpace= false;
gd.horizontalSpan= span;
gd.widthHint = SWTUtil.getButtonWidthHint(button);
return gd;
}
public int getNumberOfControls() {
return 4;
}
public Control[] doFillIntoGrid(Composite parent, int columns) {
assertEnoughColumns(columns);
Label label = getLabelControl(parent);
label.setLayoutData(gridDataForLabel(1));
Text text = getTextControl(parent);
text.setLayoutData(gridDataForText(columns - 3));
Button filesystemButton = getFilesystemBrowseButton(parent);
filesystemButton.setLayoutData(gridDataForButton(filesystemButton, 1));
Button workspaceButton = getWorkspaceBrowseButton(parent);
filesystemButton.setLayoutData(gridDataForButton(workspaceButton, 1));
return new Control[] { label, text, filesystemButton, workspaceButton };
}
protected void browseFilesystem ()
{
DirectoryDialog dialog = new DirectoryDialog(filesystemBrowse.getShell());
dialog.setText(dialogTitle);
dialog.setMessage(dialogDescription);
if (initialFilesystemPath != null) {
dialog.setFilterPath(initialFilesystemPath.toOSString());
}
String dir = dialog.open();
if (dir != null)
{
setText(dir);
}
}
protected void browseWorkspace ()
{
IPath[] paths = DialogSelectionHelper.chooseFolderEntries(filesystemBrowse.getShell(), initialWorkspacePath, dialogTitle, dialogDescription, false);
if(paths!=null && paths.length==1) {
setText(paths[0].toOSString());
}
}
public Button getFilesystemBrowseButton (Composite parent)
{
if (filesystemBrowse == null)
{
filesystemBrowse = new Button(parent, SWT.PUSH);
filesystemBrowse.setFont(parent.getFont());
filesystemBrowse.setText(filesystemBrowseLabel);
filesystemBrowse.setEnabled(isEnabled());
filesystemBrowse.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
public void widgetSelected(SelectionEvent e) {
browseFilesystem();
}
});
}
return filesystemBrowse;
}
public Button getWorkspaceBrowseButton (Composite parent)
{
if (workspaceBrowse == null)
{
workspaceBrowse = new Button(parent, SWT.PUSH);
workspaceBrowse.setFont(parent.getFont());
workspaceBrowse.setText(workspaceBrowseLabel);
workspaceBrowse.setEnabled(isEnabled());
workspaceBrowse.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
public void widgetSelected(SelectionEvent e) {
browseWorkspace();
}
});
}
return workspaceBrowse;
}
public void setFilesystemBrowseLabel(String filesystemBrowseLabel) {
this.filesystemBrowseLabel = filesystemBrowseLabel;
}
public void setWorkspaceBrowseLabel(String workspaceBrowseLabel) {
this.workspaceBrowseLabel = workspaceBrowseLabel;
}
}