/* * ####################################################### * * Copyright (c) 2013, A. Weinberger. All rights reserved. * -------------------------------------------------------- */ package ale.view.gui.dialogs; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.JFileChooser; import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.filechooser.FileFilter; import ale.controller.Settings; import ale.view.gui.GUIConstants; import ale.view.gui.dialogs.filechooser.ThumbnailFileChooser; /** * ------------------------------------------------- <br/> * Package: ale.view.gui.dialogs <br/> * Class : FileChooserDialog <br/> * --------------------------- <br/> * <br/> * The <code>FileChooserDialog</code> class contains a crappy filechooser. * <br/> * <br/> * Last edited: 15.05.2013 <br/> * ------------------------------------------------- <br/> */ public abstract class FileChooserDialog extends Dialog { private static final long serialVersionUID = 1L; private final JPanel basePanel = new JPanel(); private ThumbnailFileChooser chooser; /** * @param title the title of the dialog. * @param filter FileFilter * @param directoryOnly only directories are shown */ public FileChooserDialog(final String title, final FileFilter filter, final boolean directoryOnly) { Boolean old = UIManager.getBoolean("FileChooser.readOnly"); UIManager.put("FileChooser.readOnly", Boolean.TRUE); this.chooser = new ThumbnailFileChooser(); UIManager.put("FileChooser.readOnly", old); EventQueue.invokeLater(new Runnable() { @Override public void run() { FileChooserDialog.this.setSize(new Dimension(850, 500)); FileChooserDialog.this.setIconImage(GUIConstants.PROGRAM_ICON); FileChooserDialog.this.setTitle(title); FileChooserDialog.this.setLocationRelativeTo(null); FileChooserDialog.this.getContentPane().setLayout(new BorderLayout()); FileChooserDialog.this.basePanel.setBorder(new EmptyBorder(5, 5, 5, 5)); FileChooserDialog.this.basePanel.setLayout(new BorderLayout()); FileChooserDialog.this.setModalityType(ModalityType.APPLICATION_MODAL); FileChooserDialog.this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); FileChooserDialog.this.getContentPane().add(FileChooserDialog.this.basePanel, BorderLayout.CENTER); create(filter, directoryOnly); FileChooserDialog.this.setVisible(true); } }); } /** * @param file the chosen file */ public abstract void onApprove(File file); /** * * */ public abstract void onCancel(); private void create(FileFilter filter, boolean directoryOnly) { this.chooser.setDialogType(JFileChooser.OPEN_DIALOG); this.chooser.setFileHidingEnabled(true); this.chooser.setAcceptAllFileFilterUsed(false); this.basePanel.add(this.chooser, BorderLayout.CENTER); if (filter != null) { this.chooser.setFileFilter(filter); } if (directoryOnly) { this.chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); } this.chooser.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent event) { JFileChooser jFileChooser = (JFileChooser) event.getSource(); String command = event.getActionCommand(); if (command.equals(JFileChooser.APPROVE_SELECTION)) { File selectedFile = jFileChooser.getSelectedFile(); Settings.setFilechooserBasepath(selectedFile.toPath()); onApprove(selectedFile); dispose(); } else if (command.equals(JFileChooser.CANCEL_SELECTION)) { onCancel(); dispose(); } } }); if (Settings.getFilechooserBasePath() != null) { this.chooser.setCurrentDirectory(Settings.getFilechooserBasePath().toFile()); } } }