JAL-4390 don't output alignment to text panel and stdout when lots of sequences proce...
[jalview.git] / src / jalview / gui / ImageExporter.java
index d849ba2..4ea30d9 100644 (file)
@@ -23,17 +23,18 @@ package jalview.gui;
 import java.awt.Component;
 import java.awt.Graphics;
 import java.io.File;
-import java.util.concurrent.Callable;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import jalview.bin.Cache;
 import jalview.bin.Jalview;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
+import jalview.io.exceptions.ImageOutputException;
 import jalview.util.ImageMaker;
 import jalview.util.ImageMaker.TYPE;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
+import jalview.util.imagemaker.BitmapImageSizing;
 
 /**
  * A class that marshals steps in exporting a view in image graphics format
@@ -103,7 +104,14 @@ public class ImageExporter
    *          what the image is of e.g. Tree, Alignment
    */
   public void doExport(File file, Component parent, int width, int height,
-          String imageSource)
+          String imageSource) throws ImageOutputException
+  {
+    doExport(file, parent, width, height, imageSource, null,
+            BitmapImageSizing.nullBitmapImageSizing());
+  }
+
+  public void doExport(File file, Component parent, int width, int height,
+          String imageSource, String renderer, BitmapImageSizing userBis) throws ImageOutputException
   {
     final long messageId = System.currentTimeMillis();
     setStatus(
@@ -116,6 +124,11 @@ public class ImageExporter
      */
     if (file == null && !Jalview.isHeadlessMode())
     {
+      if (Desktop.instance.isInBatchMode())
+      {
+        // defensive error report - we could wait for user input.. I  guess ?
+        throw(new ImageOutputException("Need an output file to render to when exporting images in batch mode!"));
+      }
       JalviewFileChooser chooser = imageType.getFileChooser();
       chooser.setFileView(new JalviewFileView());
       MessageManager.formatMessage("label.create_image_of",
@@ -142,9 +155,10 @@ public class ImageExporter
      * for this as EPS_RENDERING / SVG_RENDERING
      * Always set to Text for JalviewJS as Lineart (glyph fonts) not available
      */
-    String renderStyle = Cache.getDefault(
-            imageType.getName() + "_RENDERING",
-            LineartOptions.PROMPT_EACH_TIME);
+    String renderStyle = renderer == null
+            ? Cache.getDefault(imageType.getName() + "_RENDERING",
+                    LineartOptions.PROMPT_EACH_TIME)
+            : renderer;
     if (Platform.isJS())
     {
       renderStyle = "Text";
@@ -156,23 +170,16 @@ public class ImageExporter
             && !Jalview.isHeadlessMode())
     {
       final File chosenFile = file;
-      Callable<Void> okAction = () -> {
+      Runnable okAction = () -> {
         exportImage(chosenFile, !textSelected.get(), width, height,
-                messageId);
-        return null;
+                messageId, userBis);
       };
       LineartOptions epsOption = new LineartOptions(TYPE.EPS.getName(),
               textSelected);
-      epsOption.setResponseAction(1, new Callable<Void>()
-      {
-        @Override
-        public Void call()
-        {
-          setStatus(MessageManager.formatMessage(
-                  "status.cancelled_image_export_operation",
-                  imageType.getName()), messageId);
-          return null;
-        }
+      epsOption.setResponseAction(1, () -> {
+        setStatus(MessageManager.formatMessage(
+                "status.cancelled_image_export_operation",
+                imageType.getName()), messageId);
       });
       epsOption.setResponseAction(0, okAction);
       epsOption.showDialog();
@@ -184,7 +191,8 @@ public class ImageExporter
        * character rendering not required, or preference already set 
        * - just do the export
        */
-      exportImage(file, !textSelected.get(), width, height, messageId);
+      exportImage(file, !textSelected.get(), width, height, messageId,
+              userBis);
     }
   }
 
@@ -200,7 +208,7 @@ public class ImageExporter
    * @param messageId
    */
   protected void exportImage(File chosenFile, boolean asLineart, int width,
-          int height, long messageId)
+          int height, long messageId, BitmapImageSizing userBis)
   {
     String type = imageType.getName();
     try
@@ -210,7 +218,7 @@ public class ImageExporter
       // "status.exporting_alignment_as_x_file", type),
       // messageId);
       ImageMaker im = new ImageMaker(imageType, width, height, chosenFile,
-              title, asLineart);
+              title, asLineart, userBis);
       imageWriter.exportImage(im.getGraphics());
       im.writeImage();
       setStatus(
@@ -218,8 +226,8 @@ public class ImageExporter
               messageId);
     } catch (Exception e)
     {
-      System.out.println(String.format("Error creating %s file: %s", type,
-              e.toString()));
+      jalview.bin.Console.error(String.format("Error creating %s file: %s", type,
+              e.toString()),e);
       setStatus(MessageManager.formatMessage("info.error_creating_file",
               type), messageId);
     }