package rocks.inspectit.ui.rcp.wizard.page; import org.eclipse.jface.wizard.WizardPage; 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.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; /** * Reusable wizard page for selecting file. * * @author Ivan Senic * */ public class SelectFileWizardPage extends WizardPage { /** * Default message. */ private final String defaultMessage; /** * Filter extensions array. */ private String[] filterExtensions = new String[] {}; /** * Default file name in the selection. */ private String defaultFileName = ""; /** * Save or open flag. */ private final int flag; /** * Text for displaying the file name. */ protected Text fileText; /** * Select file button. */ protected Button select; /** * * @param pageName * Page name * @param message * Page message * @param filterExtensions * Extensions to filter. Can be <code>null</code> to denote no filtering. * @param defaultFileName * File name displayed in the selection box, if <code>null</code> then no proposal is * given to the user. * @param flag * {@link SWT#SAVE} or {@link SWT#OPEN} */ public SelectFileWizardPage(String pageName, String message, String[] filterExtensions, String defaultFileName, int flag) { super(pageName); setTitle(pageName); setMessage(message); this.defaultMessage = message; if (null != filterExtensions) { this.filterExtensions = filterExtensions; } if (null != defaultFileName) { this.defaultFileName = defaultFileName; } this.flag = flag; } /** * {@inheritDoc} */ @Override public void createControl(Composite parent) { Composite main = new Composite(parent, SWT.NONE); main.setLayout(new GridLayout(3, false)); new Label(main, SWT.NONE).setText("File:"); fileText = new Text(main, SWT.READ_ONLY | SWT.BORDER); fileText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); select = new Button(main, SWT.PUSH); select.setText("Select"); select.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FileDialog fileDialog = new FileDialog(getShell(), flag); if (flag == SWT.SAVE) { fileDialog.setOverwrite(true); } fileDialog.setText("Select File"); fileDialog.setFilterExtensions(filterExtensions); fileDialog.setFileName(defaultFileName); String file = fileDialog.open(); if (null != file) { fileText.setText(file); } setPageComplete(isPageComplete()); if (fileText.getText().isEmpty()) { setMessage("No file selected", ERROR); } else { setMessage(defaultMessage); } } }); select.forceFocus(); setControl(main); } /** * {@inheritDoc} */ @Override public boolean isPageComplete() { return !fileText.getText().isEmpty(); } /** * @return Returns the selected file name. */ public String getFileName() { return fileText.getText(); } }