/* FileChooserPanel.java created 2011-03-11 * */ package org.signalml.app.view.common.components.filechooser; import static org.signalml.app.util.i18n.SvarogI18n._; import java.awt.Component; import java.awt.Dimension; import java.awt.event.KeyEvent; import java.io.File; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JFileChooser; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.filechooser.FileFilter; import org.signalml.app.document.ManagedDocumentType; /** * A panel containing an EmbeddedFileChooser. Allows to select a given type of * file documents. * * @author Piotr Szachewicz */ public class FileChooserPanel extends JPanel { /** * The document types managed by this file chooser panel. */ private ManagedDocumentType[] managedDocumentTypes; /** * The file chooser embedded in this panel. */ private EmbeddedFileChooser fileChooser; /** * Creates a new file chooser panel. * @param managedDocumentTypes the types of documents which will be * chosen using this panel */ public FileChooserPanel(ManagedDocumentType[] managedDocumentTypes) { this.managedDocumentTypes = managedDocumentTypes.clone(); createInterface(); } /** * Creates this file chooser panel. * @param singleManagedDocumentType the type of document which will * be chosen using this panel */ public FileChooserPanel(ManagedDocumentType singleManagedDocumentType) { this(new ManagedDocumentType[] {singleManagedDocumentType}); } /** * Creates the GUI for this panel. */ private void createInterface() { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); add(getFileChooser()); } /** * Returns the {@link EmbeddedFileChooser embedded file chooser}. * If it doesn't exist it is created: * <ul> * <li>as open dialog,</li> * <li>without multi-selection and hiding files,</li> * <li>to open files of given {@link ManagedDocumentType# * getFileFilterExtensions() types} or all,</li> * <li>with the user directory as the current directory.</li> * </ul> * @return the embedded file chooser */ public EmbeddedFileChooser getFileChooser() { if (fileChooser == null) { fileChooser = new EmbeddedFileChooser(); fileChooser.setDialogType(JFileChooser.OPEN_DIALOG); fileChooser.setFileHidingEnabled(false); fileChooser.setMultiSelectionEnabled(false); fileChooser.setAcceptAllFileFilterUsed(true); fileChooser.resetChoosableFileFilters(); FileFilter[] filters; int i; int e; for (i=managedDocumentTypes.length-1; i>=0; i--) { filters = managedDocumentTypes[i].getFileFilters(); for (e=filters.length-1; e>=0; e--) { fileChooser.addChoosableFileFilter(filters[e]); fileChooser.setFileFilter(filters[e]); } } fileChooser.setAlignmentX(Component.LEFT_ALIGNMENT); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir"))); fileChooser.setPreferredSize(new Dimension(500,280)); fileChooser.setMinimumSize(new Dimension(500, 150)); // remove escape key binding to allow for dialog closing KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false); fileChooser.getInputMap(JFileChooser.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(escape, "none"); } return fileChooser; } /** * Returns the file selected by this file chooser. * @return the selected file */ public File getSelectedFile() { return fileChooser.getSelectedFile(); } /** * Returns the directory currently shown by this file chooser. * @return directory shown by this file chooser */ public File getCurrentDirectory() { return fileChooser.getCurrentDirectory(); } }