/*
* Copyright (c) 2007 Stiftung Deutsches Elektronen-Synchrotron,
* Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
*
* THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS.
* WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
* FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE
* IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR
* CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.
* NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
* DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
* OR MODIFICATIONS.
* THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION,
* USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS
* PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY
* AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM
*/
package org.csstudio.ui.util.dialogs;
import org.csstudio.ui.util.composites.ResourceSelectionGroup;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* This class represents a Dialog to choose a file in the workspace.
*
* @author Kai Meyer, Joerg Rathlev
*/
//TODO: Copied from org.csstudio.platform.ui. Review is needed.
public final class ResourceSelectionDialog extends Dialog implements Listener {
/**
* The message to display, or <code>null</code> if none.
*/
private String _message;
/**
* The {@link WorkspaceTreeComposite} for this dialog.
*/
private ResourceSelectionGroup _resourceSelectionGroup;
/**
* The file extensions of files that will be shown for selection.
*/
private String[] _fileExtensions;
/**
* The path of the selected resource.
*/
private IPath _path;
private Text _resourcePathText;
/**
* Creates an input dialog with OK and Cancel buttons. Note that the dialog
* will have no visual representation (no widgets) until it is told to open.
* <p>
* Note that the <code>open</code> method blocks for input dialogs.
* </p>
*
* @param parentShell
* the parent shell, or <code>null</code> to create a top-level
* shell
* @param dialogMessage
* the dialog message, or <code>null</code> if none
* @param fileExtensions
* the file extensions of files to show in the dialog. Use an
* empty array or <code>null</code> to show only containers
* (folders).
*/
public ResourceSelectionDialog(final Shell parentShell,
final String dialogMessage, final String[] fileExtensions) {
super(parentShell);
this.setShellStyle(SWT.MODELESS | SWT.CLOSE | SWT.MAX | SWT.TITLE
| SWT.BORDER | SWT.RESIZE);
_message = dialogMessage;
_fileExtensions = fileExtensions;
}
/**
* Sets the initially selected resource. Must be called before the dialog is
* displayed.
*
* @param path
* the path to the initially selected resource.
*/
public void setSelectedResource(final IPath path) {
_path = path;
}
/**
* {@inheritDoc}
*/
@Override
protected void configureShell(final Shell shell) {
super.configureShell(shell);
shell.setText("Resources");
}
/**
* {@inheritDoc}
*/
@Override
protected Control createDialogArea(final Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
composite.setLayout(new GridLayout(1, false));
if (_message != null) {
Label label = new Label(composite, SWT.WRAP);
label.setText(_message);
GridData data = new GridData(GridData.GRAB_HORIZONTAL
| GridData.HORIZONTAL_ALIGN_FILL
| GridData.VERTICAL_ALIGN_CENTER);
data.horizontalSpan = 2;
data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
label.setLayoutData(data);
}
// The New Project and New Folder actions will be shown if there are
// no file extensions, i.e. if the dialog is opened to select a folder.
boolean showNewContainerActions = (_fileExtensions == null
|| _fileExtensions.length == 0);
_resourceSelectionGroup = new ResourceSelectionGroup(composite, this,
_fileExtensions, showNewContainerActions);
new Label(composite, SWT.NONE).setText("Resource Path:");
_resourcePathText = new Text(composite, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
_resourcePathText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
if (_path != null && !_path.isEmpty()) {
_resourcePathText.setText(_path.toString());
_resourceSelectionGroup.setSelectedResource(_path);
}
return composite;
}
/**
* {@inheritDoc}
*/
@Override
protected void okPressed() {
// _path = _resourceSelectionGroup.getFullPath();
_path = new Path(_resourcePathText.getText());
super.okPressed();
}
/**
* Returns the path to the selected resource.
*
* @return the path to the selected resource, or <code>null</code> if no
* resource was selected.
*/
public IPath getSelectedResource() {
return _path;
}
@Override
public void handleEvent(Event event) {
ResourceSelectionGroup widget = (ResourceSelectionGroup) event.widget;
_resourcePathText.setText(widget.getFullPath().toString());
if(event.type == SWT.MouseDoubleClick){
okPressed();
}
}
}