blob: a5128f758f872b48e43bc1ace2ececacbbe29fe6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2007 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 API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.dialogs;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.layout.LayoutConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Point;
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.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
import org.eclipse.ui.internal.WorkbenchMessages;
import org.eclipse.ui.internal.WorkbenchPlugin;
/**
* This class is used to prompt the user for a file name & extension.
*/
public class FileExtensionDialog extends TitleAreaDialog {
private static final String DIALOG_SETTINGS_SECTION = "FileExtensionDialogSettings"; //$NON-NLS-1$
private String filename = ""; //$NON-NLS-1$
private String initialValue;
private Text filenameField;
private Button okButton;
private String title;
private String helpContextId;
private final String headerTitle;
private final String message2;
private final String label;
/**
* Constructs a new file extension dialog.
* @param parentShell the parent shell
*/
public FileExtensionDialog(Shell parentShell) {
this(parentShell, WorkbenchMessages.FileExtension_shellTitle,
IWorkbenchHelpContextIds.FILE_EXTENSION_DIALOG,
WorkbenchMessages.FileExtension_dialogTitle,
WorkbenchMessages.FileExtension_fileTypeMessage,
WorkbenchMessages.FileExtension_fileTypeLabel);
}
/**
* Constructs a new file extension dialog.
*
* @param parentShell the parent shell
* @param title the dialog title
* @param helpContextId the help context for this dialog
* @param headerTitle the dialog header
* @param message the dialog message
* @param label the label for the "file type" field
* @since 3.4
*/
public FileExtensionDialog(Shell parentShell, String title, String helpContextId, String headerTitle, String message, String label) {
super(parentShell);
this.title = title;
this.helpContextId = helpContextId;
this.headerTitle = headerTitle;
message2 = message;
this.label = label;
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(title);
PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, helpContextId);
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
protected Control createDialogArea(Composite parent) {
Composite parentComposite = (Composite) super.createDialogArea(parent);
Composite contents = new Composite(parentComposite, SWT.NONE);
contents.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
setTitle(headerTitle);
setMessage(message2);
new Label(contents, SWT.LEFT)
.setText(label);
filenameField = new Text(contents, SWT.SINGLE | SWT.BORDER);
if (initialValue != null) {
filenameField.setText(initialValue);
}
filenameField.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
if (event.widget == filenameField) {
filename = filenameField.getText().trim();
okButton.setEnabled(validateFileType());
}
}
});
filenameField.setFocus();
Dialog.applyDialogFont(parentComposite);
Point defaultMargins = LayoutConstants.getMargins();
GridLayoutFactory.fillDefaults().numColumns(2).margins(
defaultMargins.x, defaultMargins.y).generateLayout(contents);
return contents;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
*/
protected void createButtonsForButtonBar(Composite parent) {
okButton = createButton(parent, IDialogConstants.OK_ID,
IDialogConstants.OK_LABEL, true);
okButton.setEnabled(false);
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
}
/**
* Validate the user input for a file type
*/
private boolean validateFileType() {
// We need kernel api to validate the extension or a filename
// check for empty name and extension
if (filename.length() == 0) {
setErrorMessage(null);
return false;
}
// check for empty extension if there is no name
int index = filename.lastIndexOf('.');
if (index == filename.length() - 1) {
if (index == 0 || (index == 1 && filename.charAt(0) == '*')) {
setErrorMessage(WorkbenchMessages.FileExtension_extensionEmptyMessage);
return false;
}
}
// check for characters before *
// or no other characters
// or next chatacter not '.'
// or another *
index = filename.indexOf('*');
if (index > -1) {
if (filename.length() == 1) {
setErrorMessage(WorkbenchMessages.FileExtension_extensionEmptyMessage);
return false;
}
if (index != 0 || filename.charAt(1) != '.') {
setErrorMessage(WorkbenchMessages.FileExtension_fileNameInvalidMessage);
return false;
}
if (filename.length() > index && filename.indexOf('*', index + 1) != -1) {
setErrorMessage(WorkbenchMessages.FileExtension_fileNameInvalidMessage);
return false;
}
}
setErrorMessage(null);
return true;
}
/**
* Get the extension.
*
* @return the extension
*/
public String getExtension() {
// We need kernel api to validate the extension or a filename
int index = filename.lastIndexOf('.');
if (index == -1) {
return ""; //$NON-NLS-1$
}
if (index == filename.length()) {
return ""; //$NON-NLS-1$
}
return filename.substring(index + 1, filename.length());
}
/**
* Get the name.
*
* @return the name
*/
public String getName() {
// We need kernel api to validate the extension or a filename
int index = filename.lastIndexOf('.');
if (index == -1) {
return filename;
}
if (index == 0) {
return "*"; //$NON-NLS-1$
}
return filename.substring(0, index);
}
/**
* Sets the initial value that should be prepopulated in this dialog.
*
* @param initialValue
* the value to be displayed to the user
* @since 3.4
*/
public void setInitialValue(String initialValue) {
this.initialValue = initialValue;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#getDialogBoundsSettings()
*/
protected IDialogSettings getDialogBoundsSettings() {
IDialogSettings settings = WorkbenchPlugin.getDefault().getDialogSettings();
IDialogSettings section = settings.getSection(DIALOG_SETTINGS_SECTION);
if (section == null) section = settings.addNewSection(DIALOG_SETTINGS_SECTION);
return section;
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#isResizable()
*/
protected boolean isResizable() {
return true;
}
}