/* * Copyright 2010-2015 Institut Pasteur. * * This file is part of Icy. * * Icy is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Icy is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Icy. If not, see <http://www.gnu.org/licenses/>. */ package icy.gui.dialog; import icy.file.FileUtil; import icy.main.Icy; import icy.system.thread.ThreadUtil; import java.io.File; import javax.swing.JFileChooser; import javax.swing.JOptionPane; /** * Simple dialog to let user select a file for save operation. * * @author stephane */ public class SaveDialog { private static class SaveDialogRunner implements Runnable { private final String title; private final String defaultDir; private final String defaultName; private final String extension; private JFileChooser dialog; String result; public SaveDialogRunner(String title, String defaultDir, String defaultName, String extension) { super(); this.title = title; this.defaultDir = defaultDir; this.defaultName = defaultName; this.extension = extension; } @Override public void run() { result = null; final String defaultFileName; if ((defaultName != null) && (extension != null)) defaultFileName = FileUtil.setExtension(defaultName, extension); else defaultFileName = defaultName; if (dialog == null) dialog = new JFileChooser(); dialog.setDialogTitle(title); if (defaultDir != null) dialog.setCurrentDirectory(new File(defaultDir)); if (defaultFileName != null) dialog.setSelectedFile(new File(defaultFileName)); final int returnVal = dialog.showSaveDialog(null); if (returnVal != JFileChooser.APPROVE_OPTION) return; final File f = dialog.getSelectedFile(); if (f.exists()) { final int ret = JOptionPane.showConfirmDialog(dialog, "The file " + f.getName() + " already exists. \nWould you like to replace it ?", "Replace ?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if (ret != JOptionPane.OK_OPTION) return; } result = f.getAbsolutePath(); } } /** * Displays a file save dialog, using the specified default directory and file name and * extension */ public static String chooseFile(String title, String defaultDir, String defaultName, String extension) { final SaveDialogRunner runner = new SaveDialogRunner(title, defaultDir, defaultName, extension); // no result in headless if (Icy.getMainInterface().isHeadLess()) return null; ThreadUtil.invokeNow(runner); return runner.result; } /** * Displays a file save dialog, using the specified default directory and file name */ public static String chooseFile(String title, String defaultDir, String defaultName) { return chooseFile(title, defaultDir, defaultName, null); } /** * Displays a file save dialog, using the specified default directory and file name */ public static String chooseFile(String defaultDir, String defaultName) { return chooseFile("Save file...", defaultDir, defaultName); } /** * Displays a file save dialog */ public static String chooseFile() { return chooseFile(null, null); } }