/**************************************************************************** * Copyright (C) 2012 ecsec GmbH. * All rights reserved. * Contact: ecsec GmbH (info@ecsec.de) * * This file is part of the Open eCard App. * * GNU General Public License Usage * This file may be used under the terms of the GNU General Public * License version 3.0 as published by the Free Software Foundation * and appearing in the file LICENSE.GPL included in the packaging of * this file. Please review the following information to ensure the * GNU General Public License version 3.0 requirements will be met: * http://www.gnu.org/copyleft/gpl.html. * * Other Usage * Alternatively, this file may be used in accordance with the terms * and conditions contained in a signed written agreement between * you and ecsec GmbH. * ***************************************************************************/ package org.openecard.gui.swing; import java.awt.Component; import java.awt.Dimension; import java.io.File; import java.util.Arrays; import java.util.List; import javax.swing.JDialog; import javax.swing.JFileChooser; import org.openecard.gui.FileDialog; import org.openecard.gui.file.FileDialogResult; import org.openecard.gui.file.FileFilter; import org.openecard.gui.swing.common.GUIDefaults; import org.openecard.gui.swing.file.SwingFileFilterWrapper; /** * Swing based FileDialog implementation. * This implementation wraps the {@link JFileChooser} class. * * @author Tobias Wich <tobias.wich@ecsec.de> */ public class SwingFileDialog implements FileDialog { private final JFileChooser dialog; public SwingFileDialog() { this.dialog = new JFileChooser() { @Override protected JDialog createDialog(Component parent) { JDialog dialog = super.createDialog(parent); dialog.setIconImage(GUIDefaults.getImage("Frame.icon", 45, 45).getImage()); return dialog; } }; this.dialog.setPreferredSize(new Dimension(800, 490)); } @Override public void setTitle(String title) { dialog.setDialogTitle(title); } @Override public void setCurrentDirectory(File currentDir) { dialog.setCurrentDirectory(currentDir); } @Override public void setSelectedFiles(List<File> files) { dialog.setSelectedFiles((File[]) files.toArray()); } @Override public void setSelectedFiles(File... files) { dialog.setSelectedFiles(files); } @Override public void clearSelectedFiles() { dialog.setSelectedFile(new File("")); } @Override public void addFileFilter(FileFilter filter) { dialog.setFileFilter(new SwingFileFilterWrapper(filter)); } @Override public void clearFileFilters() { dialog.resetChoosableFileFilters(); } @Override public void setShowHiddenFiles(boolean showHiddenFiles) { dialog.setFileHidingEnabled(! showHiddenFiles); } @Override public void setMultiSelectionEnabled(boolean multiSelectionEnabled) { dialog.setMultiSelectionEnabled(multiSelectionEnabled); } @Override public void setFolderSelectable(boolean folderSelectable) { int mode; if (folderSelectable) { mode = JFileChooser.FILES_AND_DIRECTORIES; } else { mode = JFileChooser.FILES_ONLY; } dialog.setFileSelectionMode(mode); } @Override public FileDialogResult showOpen() { int resultCode = dialog.showOpenDialog(null); FileDialogResult result = buildResult(resultCode); return result; } @Override public FileDialogResult showSave() { int resultCode = dialog.showSaveDialog(null); FileDialogResult result = buildResult(resultCode); return result; } @Override public FileDialogResult show(String approveButtonText) { int resultCode = dialog.showDialog(null, approveButtonText); FileDialogResult result = buildResult(resultCode); return result; } private FileDialogResult buildResult(int resultCode) { FileDialogResult result; if (resultCode == JFileChooser.APPROVE_OPTION) { File[] selectedFiles = dialog.getSelectedFiles(); if (selectedFiles.length == 0) { selectedFiles = new File[1]; selectedFiles[0] = dialog.getSelectedFile(); } result = new FileDialogResult(Arrays.asList(selectedFiles)); } else { // cancel or error, it doesn't matter result = new FileDialogResult(); } return result; } }