JAL-3048 all image export (alignment, tree, PCA, Jmol) now via ImageExporter and...
[jalview.git] / src / jalview / gui / TreePanel.java
index fefa77f..5450102 100755 (executable)
@@ -28,7 +28,6 @@ import jalview.analysis.TreeModel;
 import jalview.analysis.scoremodels.ScoreModels;
 import jalview.api.analysis.ScoreModelI;
 import jalview.api.analysis.SimilarityParamsI;
-import jalview.bin.Cache;
 import jalview.commands.CommandI;
 import jalview.commands.OrderCommand;
 import jalview.datamodel.Alignment;
@@ -41,32 +40,28 @@ import jalview.datamodel.NodeTransformI;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.SequenceNode;
+import jalview.gui.ImageExporter.ImageWriterI;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
 import jalview.io.NewickFile;
 import jalview.jbgui.GTreePanel;
-import jalview.util.ImageMaker;
+import jalview.util.ImageMaker.TYPE;
 import jalview.util.MessageManager;
-import jalview.util.dialogrunner.RunResponse;
 import jalview.viewmodel.AlignmentViewport;
 
 import java.awt.Font;
 import java.awt.Graphics;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.awt.image.BufferedImage;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
 
-import javax.imageio.ImageIO;
 import javax.swing.ButtonGroup;
 import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
 import javax.swing.JRadioButtonMenuItem;
 import javax.swing.event.InternalFrameAdapter;
 import javax.swing.event.InternalFrameEvent;
@@ -662,115 +657,27 @@ public class TreePanel extends GTreePanel
   }
 
   /**
-   * Outputs the Tree in EPS format. The user is prompted for the file to save
-   * to, and (unless a preference is already set) for the choice of Text or
-   * Lineart for character rendering.
+   * Outputs the Tree in image format (currently EPS or PNG). The user is
+   * prompted for the file to save to, and for EPS (unless a preference is
+   * already set) for the choice of Text or Lineart for character rendering.
    */
   @Override
-  public void epsTree_actionPerformed()
-  {
-    JalviewFileChooser chooser = new JalviewFileChooser(
-            ImageMaker.EPS_EXTENSION, ImageMaker.EPS_EXTENSION);
-    chooser.setFileView(new JalviewFileView());
-    chooser.setDialogTitle(
-            MessageManager.getString("label.create_eps_from_tree"));
-    chooser.setToolTipText(MessageManager.getString("action.save"));
-
-    int value = chooser.showSaveDialog(this);
-
-    if (value != JalviewFileChooser.APPROVE_OPTION)
-    {
-      return;
-    }
-    File outFile = chooser.getSelectedFile();
-    Cache.setProperty("LAST_DIRECTORY", outFile.getParent());
-
-    String renderStyle = Cache.getDefault("EPS_RENDERING",
-            "Prompt each time");
-    AtomicBoolean textOption = new AtomicBoolean(
-            !"Lineart".equals(renderStyle));
-
-    /*
-     * configure the export action to run on OK in the dialog
-     */
-    RunResponse okAction = new RunResponse(JOptionPane.OK_OPTION)
-    {
-      @Override
-      public void run()
-      {
-        writeEpsFile(outFile, textOption.get());
-      }
-    };
-
-    /*
-     * Prompt for character rendering style if preference is not set
-     */
-    if (renderStyle.equalsIgnoreCase("Prompt each time")
-            && !(System.getProperty("java.awt.headless") != null && System
-                    .getProperty("java.awt.headless").equals("true")))
-    {
-      LineartOptions eps = new LineartOptions("EPS_RENDERING", "EPS",
-              textOption);
-      eps.setResponseAction(okAction);
-      eps.showDialog();
-      /* no code here - JalviewJS won't execute it */
-    }
-    else
-    {
-      /*
-       * if preference set, just run the export action
-       */
-      writeEpsFile(outFile, textOption.get());
-    }
-  }
-
-  /**
-   * DOCUMENT ME!
-   * 
-   * @param e
-   *          DOCUMENT ME!
-   */
-  @Override
-  public void pngTree_actionPerformed(ActionEvent e)
+  public void writeTreeImage(TYPE imageFormat)
   {
     int width = treeCanvas.getWidth();
     int height = treeCanvas.getHeight();
-
-    try
+    ImageWriterI writer = new ImageWriterI()
     {
-      JalviewFileChooser chooser = new JalviewFileChooser(
-              ImageMaker.PNG_EXTENSION, ImageMaker.PNG_DESCRIPTION);
-
-      chooser.setFileView(new jalview.io.JalviewFileView());
-      chooser.setDialogTitle(
-              MessageManager.getString("label.create_png_from_tree"));
-      chooser.setToolTipText(MessageManager.getString("action.save"));
-
-      int value = chooser.showSaveDialog(this);
-
-      if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)
+      @Override
+      public void exportImage(Graphics g) throws Exception
       {
-        return;
+        treeCanvas.draw(g, width, height);
       }
-
-      jalview.bin.Cache.setProperty("LAST_DIRECTORY",
-              chooser.getSelectedFile().getParent());
-
-      FileOutputStream out = new FileOutputStream(
-              chooser.getSelectedFile());
-
-      BufferedImage bi = new BufferedImage(width, height,
-              BufferedImage.TYPE_INT_RGB);
-      Graphics png = bi.getGraphics();
-
-      treeCanvas.draw(png, width, height);
-
-      ImageIO.write(bi, "png", out);
-      out.close();
-    } catch (Exception ex)
-    {
-      ex.printStackTrace();
-    }
+    };
+    String tree = MessageManager.getString("label.tree");
+    ImageExporter exporter = new ImageExporter(writer, null, imageFormat,
+            tree);
+    exporter.doExport(null, this, width, height, tree.toLowerCase());
   }
 
   /**