package org.csdgn.cddatse; import java.awt.Component; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import javax.imageio.ImageIO; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.UIManager; import javax.swing.filechooser.FileFilter; import org.csdgn.maru.io.EndsWithFileFilter; public class AppToolkit { public static void setFileChooserReadOnly(boolean readOnly) { UIManager.put("FileChooser.readOnly", readOnly); } private static File directory = null; private static ArrayList<Image> icons = null; /** * Gets the directory for the program. */ public static File getLocalDirectory() { if (directory != null) { return directory; } // Determine our base directory String codePath = AppToolkit.class.getProtectionDomain().getCodeSource().getLocation().getPath(); File codeFile = new File(codePath); if (codeFile.exists() && codePath != null) { // So we have a predictable format codePath = codeFile.toString(); int len = codePath.length(); if (len > 3) { String last = codePath.substring(len - 3).toLowerCase(); if (last.equals("jar") || last.equals("bin")) { // Executing from a jar or development path directory = codeFile.getParentFile(); if ("lib".equalsIgnoreCase(directory.getName())) { directory = directory.getParentFile(); } return directory; } } if (directory == null) { directory = codeFile; } while (!directory.isDirectory()) { directory = directory.getParentFile(); } if ("lib".equalsIgnoreCase(directory.getName())) { directory = directory.getParentFile(); } // System.out.println(directory); return directory; } // I guess we can't do anything else... return directory = new File("."); } /** * Get the program Icons * * @return */ public static ArrayList<Image> getAppIconImages() { if (icons != null) return icons; icons = new ArrayList<Image>(); for (int val : new int[] { 16, 32, 48 }) { String iconString = String.format("icon%d.png", val); InputStream stream = getLocalResource(iconString); if (stream != null) try { icons.add(ImageIO.read(stream)); } catch (IOException e) { // If we fail, just show the default java icon } } return icons; } public static InputStream getLocalResource(String resource) { // check within current directory first try { File file = new File(getLocalDirectory(), resource); if (file.exists()) { return new FileInputStream(file); } } catch (Exception e) { // TODO } // fall back to in jar InputStream stream = ClassLoader.getSystemResourceAsStream(resource); if (stream != null) return stream; // if that fails, try development location try { File file = new File(getLocalDirectory(), "resource/" + resource); if (file.exists()) { return new FileInputStream(file); } } catch (Exception e) { // TODO } return null; } public static void showError(Component owner, String message) { JOptionPane.showMessageDialog(owner, message, "Error", JOptionPane.ERROR_MESSAGE); } public static void showWarning(Component owner, String message) { JOptionPane.showMessageDialog(owner, message, "Warning", JOptionPane.WARNING_MESSAGE); } public static int confirmWarning(Component owner, String message) { return JOptionPane.showConfirmDialog(owner, message, "Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); } public static int showYesNoOption(Component owner, String message, String title) { return JOptionPane.showConfirmDialog(owner, message, title, JOptionPane.YES_NO_OPTION); } public static boolean isEqual(BufferedImage a, BufferedImage b) { int width = a.getWidth(); int height = a.getHeight(); for(int y = 0; y < height; y++){ for(int x = 0; x < width; x++) { if( a.getRGB(x, y) != b.getRGB(x, y) ) { return false; } } } return true; } private static JFileChooser imageChooser = null; public static BufferedImage browseForImage(Component parent, String title) { if (imageChooser == null) { AppToolkit.setFileChooserReadOnly(true); imageChooser = new JFileChooser(); FileFilter filter = new EndsWithFileFilter("Image File", ".png", ".jpg", ".gif", ".bmp"); imageChooser.addChoosableFileFilter(filter); imageChooser.setFileFilter(filter); } imageChooser.setDialogTitle(title); imageChooser.setCurrentDirectory(Options.lastBrowsedDirectory); if (imageChooser.showOpenDialog(parent) != JFileChooser.APPROVE_OPTION) { return null; } Options.lastBrowsedDirectory = imageChooser.getCurrentDirectory(); File file = imageChooser.getSelectedFile(); if (!file.exists()) { return null; } try { return ImageIO.read(file); } catch (IOException e) { e.printStackTrace(); } return null; } }