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