package viz.util; import java.awt.Font; import java.io.File; import java.io.FilenameFilter; import java.lang.reflect.Method; import java.util.HashSet; import java.util.Set; import javax.swing.JFileChooser; import javax.swing.UIManager; import javax.swing.UIManager.LookAndFeelInfo; import javax.swing.filechooser.FileNameExtensionFilter; public class Util { public static void loadUIManager() { boolean lafLoaded = false; if (isMac()) { String version = System.getProperty("os.version"); int v = Integer.parseInt(version.split("\\.")[0]); if (v >= 5) { System.setProperty("apple.awt.brushMetalLook","true"); } System.setProperty("apple.awt.graphics.UseQuartz", "true"); System.setProperty("apple.awt.antialiasing", "true"); System.setProperty("apple.awt.rendering", "VALUE_RENDER_QUALITY"); System.setProperty("apple.laf.useScreenMenuBar", "true"); System.setProperty("apple.awt.draggableWindowBackground", "true"); System.setProperty("apple.awt.showGrowBox", "true"); try { try { // We need to do this using dynamic class loading to avoid other platforms // having to link to this class. If the Quaqua library is not on the classpath // it simply won't be used. Class<?> qm = Class.forName("ch.randelshofer.quaqua.QuaquaManager"); Method method = qm.getMethod("setExcludedUIs", Set.class); Set<String> excludes = new HashSet<String>(); excludes.add("Button"); excludes.add("ToolBar"); method.invoke(null, excludes); } catch (Throwable e) { } //set the Quaqua Look and Feel in the UIManager UIManager.setLookAndFeel( "ch.randelshofer.quaqua.QuaquaLookAndFeel" ); lafLoaded = true; } catch (Exception e) { } UIManager.put("SystemFont", new Font("Lucida Grande", Font.PLAIN, 13)); UIManager.put("SmallSystemFont", new Font("Lucida Grande", Font.PLAIN, 11)); } if (!lafLoaded) { final UIManager.LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels(); //for (UIManager.LookAndFeelInfo laf : lafs) { // System.out.println(laf + " [[" + laf.getName() + "]]"); //} //System.out.println(UIManager.getCrossPlatformLookAndFeelClassName()); try { // set the System Look and Feel in the UIManager javax.swing.SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { try { if (isMac()) { for (LookAndFeelInfo info : lafs) { if ("Mac OS X".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } } } else { for (LookAndFeelInfo info : lafs) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } } } } catch (Exception e) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); // UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e2) { e.printStackTrace(); } } } }); } catch (Exception e) { e.printStackTrace(); } } } public static boolean isMac() { return System.getProperty("os.name").toLowerCase().startsWith("mac"); } public static String formatToolTipAsHtml(String sToolTip) { String sStr = "<html>"; int k = 0; for (int i = 0; i < sToolTip.length(); i++) { char c = sToolTip.charAt(i); if (c == '\n') { sStr += "<br/>"; k = 0; } else if (Character.isWhitespace(c)) { if ( k > 60) { sStr += "<br/>"; k = 0; } else { sStr += " "; } } else { sStr += c; } k++; } sStr += "</html>"; return sStr; } public static String formatToolTipAsTeX(String sToolTip) { String sStr = ""; for (int i = 0; i < sToolTip.length(); i++) { char c = sToolTip.charAt(i); if (c == '\n') { sStr += "\n\n"; } else if (c == '%') { sStr += "\\%"; } else if (c == '_') { sStr += "\\_"; } else { sStr += c; } } return sStr; } public static File[] getFile(String message, boolean bLoadNotSave, File defaultFileOrDir, boolean bAllowMultipleSelection, String description, final String... extensions) { if (isMac()) { java.awt.Frame frame = new java.awt.Frame(); java.awt.FileDialog chooser = new java.awt.FileDialog(frame, message, (bLoadNotSave ? java.awt.FileDialog.LOAD : java.awt.FileDialog.SAVE)); if (defaultFileOrDir != null) { if (defaultFileOrDir.isDirectory()) { chooser.setDirectory(defaultFileOrDir.getAbsolutePath()); } else { chooser.setDirectory(defaultFileOrDir.getParentFile().getAbsolutePath()); chooser.setFile(defaultFileOrDir.getName()); } } if (description != null) { FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { for (int i = 0; i < extensions.length; i++) { if (name.toLowerCase().endsWith(extensions[i].toLowerCase())) { return true; } } return false; } }; chooser.setFilenameFilter(filter); } //chooser.setMultipleMode(bAllowMultipleSelection); chooser.setVisible(true); if (chooser.getFile() == null) return null; //if (bAllowMultipleSelection) { // return chooser.getFiles(); //} File file = new java.io.File(chooser.getDirectory(), chooser.getFile()); chooser.dispose(); frame.dispose(); return new File[]{file}; } else { // No file name in the arguments so throw up a dialog box... java.awt.Frame frame = new java.awt.Frame(); frame.setTitle(message); final JFileChooser chooser = new JFileChooser(defaultFileOrDir); chooser.setMultiSelectionEnabled(bAllowMultipleSelection); //chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); if (description != null) { FileNameExtensionFilter filter = new FileNameExtensionFilter(description, extensions); chooser.setFileFilter(filter); } if (bLoadNotSave) { if (chooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) { frame.dispose(); if (bAllowMultipleSelection) { return chooser.getSelectedFiles(); } else { if (chooser.getSelectedFile() == null) { return null; } return new File[]{chooser.getSelectedFile()}; } } } else { if (chooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION) { frame.dispose(); if (bAllowMultipleSelection) { return chooser.getSelectedFiles(); } else { if (chooser.getSelectedFile() == null) { return null; } return new File[]{chooser.getSelectedFile()}; } } } } return null; } }