org.eclipse.epf.library.ui.dialogs.PathSelectionDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.epf.library.ui.dialogs.PathSelectionDialog.java

Source

//------------------------------------------------------------------------------
// 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;
    }
}