//------------------------------------------------------------------------------ // Copyright (c) 2005, 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 implementation //------------------------------------------------------------------------------ package org.eclipse.epf.library.ui.dialogs; import org.eclipse.epf.library.ui.LibraryUIResources; import org.eclipse.epf.library.ui.wizards.DirectoryValidator; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Shell; import org.eclipse.swt.widgets.Text; /** * * Utility class to select a path * * @author Jinhua Xi * */ public class PathSelectionDialog extends Dialog { protected Text ctrl_path; protected Button ctrl_browse_button; protected String title; protected String message; protected String value; public PathSelectionDialog(Shell parentShell, String dialogTitle, String dialogMessage, String defaultPath) { super(parentShell); title = dialogTitle; message = dialogMessage; value = defaultPath; } /** * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int) */ protected void buttonPressed(int buttonId) { if (buttonId == IDialogConstants.OK_ID) { value = ctrl_path.getText(); // make sure the path is valid String msg = LibraryUIResources.pathSelectionError_msg; if (DirectoryValidator.checkAndCreateDir(value, title, msg) == false) { return; } } else { value = null; } super.buttonPressed(buttonId); } /** * * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ protected void configureShell(Shell shell) { super.configureShell(shell); if (title != null) shell.setText(title); } /** * * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite) */ protected void createButtonsForButtonBar(Composite parent) { // create OK and Cancel buttons by default createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); // do this here because setting the text will set enablement on the ok // button ctrl_path.setFocus(); if (value != null) { ctrl_path.setText(value); ctrl_path.selectAll(); } } /** * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ protected Control createDialogArea(Composite parent) { // create composite Composite composite = (Composite) super.createDialogArea(parent); // create message if (message != null) { Label label = new Label(composite, SWT.WRAP); label.setText(message); GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER); data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); label.setLayoutData(data); label.setFont(parent.getFont()); } ctrl_path = new Text(composite, SWT.SINGLE | SWT.BORDER); ctrl_path.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); ctrl_browse_button = new Button(composite, SWT.NONE); ctrl_browse_button.setLayoutData(new GridData( GridData.HORIZONTAL_ALIGN_END)); ctrl_browse_button.setText(LibraryUIResources.browseButton_text); ctrl_browse_button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { openDirectoryDialog(); } }); applyDialogFont(composite); return composite; } /** * Open directory dialog * */ private void openDirectoryDialog() { try { // Text ctrl_path = super.getText(); DirectoryDialog dd = new DirectoryDialog(this.getShell(), SWT.NONE); dd.setFilterPath(ctrl_path.getText()); String destination = dd.open(); if (destination != null) { ctrl_path.setText(destination); } } catch (Exception ex) { ex.printStackTrace(); } } /** * Returns the path * @return path */ public String getPath() { return value; } }