/* * SaveAsDialog.java * * Created on March 28, 2002, 2:44 PM */ package jas.hist; import jas.util.Application; import jas.util.JASDialog; import jas.util.JASState; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Properties; import java.util.Vector; import javax.swing.DefaultListCellRenderer; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingUtilities; /** * * @author tonyj * @version $Id: SaveAsDialog.java 11553 2007-06-05 22:06:23Z duns $ */ public class SaveAsDialog extends JASDialog implements ActionListener { private static Vector list = new Vector(); private static Properties props; static { Application app = Application.getApplication(); if (app != null) props = app.getUserProperties(); else props = new Properties(); String prop = "org.freehep.graphics2d.exportchooser.EPS_PSExportFileType.EmbedFonts"; String embed = props.getProperty(prop); if (embed == null) props.setProperty(prop,"Embed unknown as Type3"); register(new SaveAsPlotML()); register(new SaveAsGIF()); } public static void register(SaveAsPlugin plugin) { list.addElement(plugin); plugin.restoreOptions(props); } /** Creates a new instance of SaveAsDialog */ public SaveAsDialog(Component c) { super((Frame) SwingUtilities.getAncestorOfClass(Frame.class,c),"Save As..."); this.component = c; JPanel pane = new JPanel(); pane.setLayout(new GridBagLayout()); GridBagConstraints gridBagConstraints = new GridBagConstraints(); gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); pane.add(file, gridBagConstraints); gridBagConstraints.fill = 1; gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER; pane.add(browse, gridBagConstraints); Vector fileTypes = new Vector(); for (int i=0; i<list.size(); i++) { SaveAsPlugin type = (SaveAsPlugin) list.elementAt(i); if (type.supportsClass(c)) fileTypes.addElement(type); } type = new JComboBox(fileTypes); gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.gridwidth = 1; pane.add(type, gridBagConstraints); gridBagConstraints.fill = 1; gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER; pane.add(advanced, gridBagConstraints); getContentPane().add(pane,BorderLayout.CENTER); String defFile = System.getProperty("user.home")+File.separator+"plot.xxx"; String dType = props.getProperty("jas.hist.saveAsType"); if (dType != null) { for (int i=0; i<fileTypes.size(); i++) { SaveAsPlugin saveAs = (SaveAsPlugin) fileTypes.elementAt(i); if (saveAs.getFileFilter().getDescription().equals(dType)) { type.setSelectedItem(saveAs); break; } } } defFile = props.getProperty("jas.hist.saveAsFile",defFile); File f = new File(defFile); f = currentType().adjustFilename(f); file.setText(f.toString()); browse.addActionListener(this); advanced.addActionListener(this); advanced.setEnabled(currentType().hasOptions()); type.setRenderer(new SaveAsRenderer()); type.addActionListener(this); file.getDocument().addDocumentListener(this); } private SaveAsPlugin currentType() { return (SaveAsPlugin) type.getSelectedItem(); } public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == browse) { JFileChooser chooser = new JFileChooser(file.getText()); chooser.setFileFilter(currentType().getFileFilter()); if (chooser.showDialog(this,"Select") == chooser.APPROVE_OPTION) { file.setText(chooser.getSelectedFile().toString()); } } else if (source == advanced) { Properties save = new Properties(); currentType().saveOptions(save); JPanel panel = currentType().getOptionsPanel(); int rc = JOptionPane.showConfirmDialog(this,panel,"Options for "+currentType().getFileFilter().getDescription(), JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE); if (rc != JOptionPane.OK_OPTION) currentType().restoreOptions(save); } else if (source == type) { advanced.setEnabled(currentType().hasOptions()); File f1 = new File(file.getText()); File f2 = currentType().adjustFilename(f1); if (!f1.equals(f2)) file.setText(f2.toString()); } } protected void onOK() { try { File f = new File(file.getText()); if (f.exists()) { int ok = JOptionPane.showConfirmDialog(this,"Replace existing file?"); if (ok != JOptionPane.OK_OPTION) return; } SaveAsPlugin t = currentType(); OutputStream os = new BufferedOutputStream(new FileOutputStream(f)); t.saveAs(component,os,f,this); os.close(); super.onOK(); props.put("jas.hist.saveAsFile",file.getText()); props.put("jas.hist.saveAsType",currentType().getFileFilter().getDescription()); t.saveOptions(props); } catch (IOException x) { JOptionPane.showMessageDialog(this,x); } } protected void enableOK(JASState state) { state.setEnabled(file.getText().length()>0); } private JButton browse = new JButton("Browse..."); private JButton advanced = new JButton("Options..."); private JTextField file = new JTextField(40); private JComboBox type; private Component component; private class SaveAsRenderer extends DefaultListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus); if (value instanceof SaveAsPlugin) { this.setText(((SaveAsPlugin) value).getFileFilter().getDescription()); } return this; } } }