package edu.harvard.wcfia.yoshikoder.util; import java.awt.Component; import java.awt.FileDialog; import java.awt.Font; import java.awt.Frame; import java.awt.GraphicsEnvironment; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.Action; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JMenu; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; /** * @author will */ public class DialogUtil { private static List fontFamilyNames; private static HashMap icons = new HashMap(); // icon cache private static Logger log = Logger.getLogger("edu.harvard.wcfia.util.DialogUtil"); // filters for native open dialogs public static FilenameFilter jarFilenameFilter = new FilenameFilter(){ public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".jar"); } }; public static FilenameFilter ykpFilenameFilter = new FilenameFilter(){ public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".ykp"); } }; public static FilenameFilter ykdFilenameFilter = new FilenameFilter(){ public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".ykd"); } }; public static FilenameFilter ykcFilenameFilter = new FilenameFilter(){ public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".ykc"); } }; public static FilenameFilter txtFilenameFilter = new FilenameFilter(){ public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".txt"); } }; public static FilenameFilter xlsFilenameFilter = new FilenameFilter(){ public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".xls"); } }; public static FilenameFilter vbpFilenameFilter = new FilenameFilter(){ public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".vbp"); } }; public static FilenameFilter htmlFilenameFilter = new FilenameFilter(){ public boolean accept(File dir, String name) { String n = name.toLowerCase(); return n.endsWith(".htm") || n.endsWith(".html"); } }; private static FileFilter htmlFilter = new FileFilter(){ public boolean accept(File f) { return (f.isDirectory() || f.getName().toLowerCase().endsWith(".html") || //$NON-NLS-1$ f.getName().toLowerCase().endsWith(".htm")); //$NON-NLS-1$ } public String getDescription() { return Messages.getString("FileFilterUtil.html"); //$NON-NLS-1$ } }; private static FileFilter xlsFilter = new FileFilter(){ public boolean accept(File f) { return (f.isDirectory() || f.getName().toLowerCase().endsWith(".xls")); //$NON-NLS-1$ } public String getDescription() { return Messages.getString("FileFilterUtil.xls"); //$NON-NLS-1$ } }; private static FileFilter ykpFilter = new FileFilter(){ public boolean accept(File f) { return (f.isDirectory() || f.getName().toLowerCase().endsWith(".ykp")); //$NON-NLS-1$ } public String getDescription() { return Messages.getString("FileFilterUtil.ykp"); //$NON-NLS-1$ } }; private static FileFilter ykcFilter = new FileFilter(){ public boolean accept(File f) { return (f.isDirectory() || f.getName().toLowerCase().endsWith(".ykc")); //$NON-NLS-1$ } public String getDescription() { return Messages.getString("FileFilterUtil.ykc"); //$NON-NLS-1$ } }; private static FileFilter txtFilter = new FileFilter(){ public boolean accept(File f) { return (f.isDirectory() || f.getName().toLowerCase().endsWith(".txt")); //$NON-NLS-1$ } public String getDescription() { return Messages.getString("FileFilterUtil.txt"); //$NON-NLS-1$ } }; private static FileFilter jarFilter = new FileFilter(){ public boolean accept(File f) { return (f.isDirectory() || f.getName().toLowerCase().endsWith(".jar")); //$NON-NLS-1$ } public String getDescription() { return Messages.getString("FileFilterUtil.jar"); //$NON-NLS-1$ } }; public static int askYesNo(Component parent, String message, String title){ return JOptionPane.showConfirmDialog(parent, message, title, JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, getDialogIcon("smallQuestionIcon.png")); } public static void yelp(Component parent, String message, String title, Exception e){ log.log(Level.WARNING, message, e); yelp(parent, message, title); } public static void yelp(Component parent, String message, String title){ JOptionPane.showMessageDialog(parent, message, title, JOptionPane.PLAIN_MESSAGE, getDialogIcon("smallYelpIcon.png")); } public static void yelp(Component parent, String message, Exception e){ yelp(parent, message, Messages.getString("error"), e); } public static Icon getDialogIcon(String name){ //System.err.println("Icons: " + icons); Icon ic = (Icon)icons.get(name); if (ic != null){ log.info("Found a cached version of the the icon " + name); return ic; } Icon icon = FileUtil.getIcon(name); if (icon != null) icons.put(name, icon); return icon; } public static JButton makeToolbarButton(Action a, String messageBundleIconName){ String iconPath = Messages.getString(messageBundleIconName); if (iconPath == null){ log.warning("No icon reference found at " + messageBundleIconName); return new JButton(a); } Icon ic = DialogUtil.getDialogIcon(iconPath.trim()); JButton button = new JButton(a); button.setIcon(ic); button.setText(null); return button; } public static List getFontFamilyNames(){ if (fontFamilyNames == null){ GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] names = ge.getAvailableFontFamilyNames(); fontFamilyNames = new ArrayList(names.length); for (int ii=0; ii<names.length; ii++) fontFamilyNames.add(names[ii]); } return fontFamilyNames; } private static Font defaultFont = Font.decode("SansSerif"); public static Font getDefaultFont(){ return defaultFont; } public static String toString(Font f){ String str = f.getFamily() + "-PLAIN-" + f.getSize(); return str; } public static FileDialog makeFileDialog(Frame parent, String name, int type, FilenameFilter filter){ if (filter == null) return new FileDialog(parent, name, type); FileDialog dia = new FileDialog(parent, name, type); dia.setFilenameFilter(filter); return dia; } public static JMenu makeMenu(String prefix){ JMenu menu = new JMenu(Messages.getString(prefix + ".name")); char mnem = Messages.getString(prefix + ".mnem").charAt(0); menu.setMnemonic(mnem); if (!FileUtil.isMac()) menu.setIcon(DialogUtil.getDialogIcon(Messages.getString(prefix + ".iconName"))); return menu; } }