/* * Created on 08-dic-2005 * * TODO To change the template for this generated file go to Window - * Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.util; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatManager; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class FileChooser { private class FilterList { private String[] filterExtensions; private String[] filterNames; public FilterList(List<TGFileFormat> formats) { int size = (formats.size() + 2); this.filterNames = new String[size]; this.filterExtensions = new String[size]; this.filterNames[0] = new String("All Supported Formats"); this.filterExtensions[0] = new String(); for (int i = 1; i < (size - 1); i++) { TGFileFormat format = (TGFileFormat) formats.get(i - 1); this.filterNames[i] = format.getName(); this.filterExtensions[i] = format.getSupportedFormats(); this.filterExtensions[0] += (i > 1) ? ";" : ""; this.filterExtensions[0] += format.getSupportedFormats(); } this.filterNames[(size - 1)] = new String("All Files"); this.filterExtensions[(size - 1)] = new String("*.*"); } public String[] getFilterExtensions() { return this.filterExtensions; } public String[] getFilterNames() { return this.filterNames; } } public static TGFileFormat ALL_FORMATS = new TGFileFormat("All Files", "*.*"); public static final String DEFAULT_OPEN_FILENAME = null; public static final String DEFAULT_SAVE_FILENAME = ("Untitled" + TGFileFormatManager.DEFAULT_EXTENSION); private static FileChooser instance; public static FileChooser instance() { if (instance == null) { instance = new FileChooser(); } return instance; } private String getFileName(List<TGFileFormat> formats, String defaultName, boolean replaceExtension) { if (formats == null || formats.isEmpty()) { return defaultName; } String file = TuxGuitar.instance().getFileHistory().getCurrentFileName( defaultName); if (file != null && file.length() > 0) { int index = file.lastIndexOf('.'); if (index > 0) { String fileName = file.substring(0, index); String fileExtension = file.substring(index).toLowerCase(); for (final TGFileFormat format : formats){ if (format.getSupportedFormats() != null) { String[] extensions = format.getSupportedFormats().split( TGFileFormat.EXTENSION_SEPARATOR); if (extensions != null && extensions.length > 0) { for (int i = 0; i < extensions.length; i++) { if (extensions[i].equals("*" + fileExtension)) { return file; } } } } } if (replaceExtension) { TGFileFormat format = (TGFileFormat) formats.get(0); if (format.getSupportedFormats() != null) { String[] extensions = format.getSupportedFormats().split( TGFileFormat.EXTENSION_SEPARATOR); if (extensions != null && extensions.length > 0) { if (extensions[0].length() > 1) { return (fileName + extensions[0].substring(1)); } } } } } } return defaultName; } private <E> List<E> list(E o) { List<E> list = new ArrayList<E>(); list.add(o); return list; } public String open(Shell parent, List<TGFileFormat> formats) { String currentPath = TuxGuitar.instance().getFileHistory() .getCurrentFilePath(); String chooserPath = TuxGuitar.instance().getFileHistory().getOpenPath(); boolean localFile = TuxGuitar.instance().getFileHistory().isLocalFile(); boolean existentFile = (localFile && currentPath != null && chooserPath != null && currentPath.equals(chooserPath)); FilterList filter = new FilterList(formats); FileDialog dialog = new FileDialog(parent, SWT.OPEN); dialog.setFileName((existentFile ? getFileName(formats, DEFAULT_OPEN_FILENAME, false) : null)); dialog.setFilterPath(chooserPath); dialog.setFilterNames(filter.getFilterNames()); dialog.setFilterExtensions(filter.getFilterExtensions()); return openDialog(dialog); } public String open(Shell parent, TGFileFormat format) { return open(parent, list(format)); } private String openDialog(FileDialog dialog) { String path = dialog.open(); if (path != null) { File file = new File(path); File parent = file.getParentFile(); if (parent != null && parent.exists() && parent.isDirectory()) { TuxGuitar.instance().getFileHistory().setChooserPath( parent.getAbsolutePath()); } } return path; } public String save(Shell parent, List<TGFileFormat> formats) { String chooserPath = TuxGuitar.instance().getFileHistory().getSavePath(); FilterList filter = new FilterList(formats); FileDialog dialog = new FileDialog(parent, SWT.SAVE); dialog.setFileName(getFileName(formats, DEFAULT_SAVE_FILENAME, true)); dialog.setFilterPath(chooserPath); dialog.setFilterNames(filter.getFilterNames()); dialog.setFilterExtensions(filter.getFilterExtensions()); return openDialog(dialog); } public String save(Shell parent, TGFileFormat format) { return save(parent, list(format)); } }