JAL-629 --structureimage with formatting args.
[jalview.git] / src / jalview / gui / AppJmol.java
index 217d2b1..806bfc1 100644 (file)
  */
 package jalview.gui;
 
-import java.util.Locale;
-
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
 import java.io.File;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 import javax.swing.JPanel;
@@ -38,20 +39,21 @@ import javax.swing.event.InternalFrameAdapter;
 import javax.swing.event.InternalFrameEvent;
 
 import jalview.api.AlignmentViewPanel;
-import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.StructureViewerModel;
 import jalview.datamodel.StructureViewerModel.StructureData;
-import jalview.fts.service.alphafold.AlphafoldRestClient;
 import jalview.gui.ImageExporter.ImageWriterI;
 import jalview.gui.StructureViewer.ViewerType;
 import jalview.structure.StructureCommand;
 import jalview.structures.models.AAStructureBindingModel;
 import jalview.util.BrowserLauncher;
 import jalview.util.ImageMaker;
+import jalview.util.ImageMaker.TYPE;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
+import jalview.util.imagemaker.BitmapImageSizing;
 
 public class AppJmol extends StructureViewerBase
 {
@@ -184,8 +186,7 @@ public class AppJmol extends StructureViewerBase
   }
 
   private void openNewJmol(AlignmentPanel ap, boolean alignAdded,
-          PDBEntry[] pdbentrys,
-          SequenceI[][] seqs)
+          PDBEntry[] pdbentrys, SequenceI[][] seqs)
   {
     setProgressIndicator(ap.alignFrame);
     jmb = new AppJmolBinding(this, ap.getStructureSelectionManager(),
@@ -234,7 +235,6 @@ public class AppJmol extends StructureViewerBase
     openNewJmol(ap, alignAdded, pe, seqs);
   }
 
-
   void initJmol(String command)
   {
     jmb.setFinishedInit(false);
@@ -309,10 +309,10 @@ public class AppJmol extends StructureViewerBase
       } catch (OutOfMemoryError oomerror)
       {
         new OOMWarning("When trying to open the Jmol viewer!", oomerror);
-        Cache.log.debug("File locations are " + filesString);
+        Console.debug("File locations are " + filesString);
       } catch (Exception ex)
       {
-        Cache.log.error("Couldn't open Jmol viewer!", ex);
+        Console.error("Couldn't open Jmol viewer!", ex);
         ex.printStackTrace();
         return;
       }
@@ -333,11 +333,11 @@ public class AppJmol extends StructureViewerBase
       {
         new OOMWarning("When trying to add structures to the Jmol viewer!",
                 oomerror);
-        Cache.log.debug("File locations are " + filesString);
+        Console.debug("File locations are " + filesString);
         return;
       } catch (Exception ex)
       {
-        Cache.log.error("Couldn't add files to Jmol viewer!", ex);
+        Console.error("Couldn't add files to Jmol viewer!", ex);
         ex.printStackTrace();
         return;
       }
@@ -353,7 +353,7 @@ public class AppJmol extends StructureViewerBase
     {
       try
       {
-        Cache.log.debug("Waiting around for jmb notify.");
+        Console.debug("Waiting around for jmb notify.");
         waitTotal += waitFor;
 
         // Thread.sleep() throws an exception in JS
@@ -426,20 +426,48 @@ public class AppJmol extends StructureViewerBase
   @Override
   public void makePDBImage(ImageMaker.TYPE type)
   {
+    makePDBImage(null, type, null,
+            BitmapImageSizing.nullBitmapImageSizing());
+  }
+
+  public void makePDBImage(File file, ImageMaker.TYPE type, String renderer,
+          BitmapImageSizing userBis)
+  {
     int width = getWidth();
     int height = getHeight();
+
+    BitmapImageSizing bis = ImageMaker.getScaleWidthHeight(width, height,
+            userBis);
+    float usescale = bis.scale;
+    int usewidth = bis.width;
+    int useheight = bis.height;
+
     ImageWriterI writer = new ImageWriterI()
     {
       @Override
       public void exportImage(Graphics g) throws Exception
       {
-        jmb.jmolViewer.renderScreenImage(g, width, height);
+        Graphics2D ig2 = (Graphics2D) g;
+        ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                RenderingHints.VALUE_ANTIALIAS_ON);
+        if (type == TYPE.PNG && usescale > 0.0f)
+        {
+          // for a scaled image, this scales down a bigger image to increase
+          // resolution
+
+          ig2.scale(1 / usescale, 1 / usescale);
+        }
+
+        jmb.jmolViewer.antialiased = true;
+        jmb.jmolViewer.requestRepaintAndWait("image export");
+        jmb.jmolViewer.renderScreenImage(ig2, usewidth, useheight);
       }
     };
-    String view = MessageManager.getString("action.view").toLowerCase(Locale.ROOT);
+    String view = MessageManager.getString("action.view")
+            .toLowerCase(Locale.ROOT);
     ImageExporter exporter = new ImageExporter(writer,
             getProgressIndicator(), type, getTitle());
-    exporter.doExport(null, this, width, height, view);
+    exporter.doExport(file, this, width, height, view, renderer, userBis);
   }
 
   @Override
@@ -448,7 +476,7 @@ public class AppJmol extends StructureViewerBase
     try
     {
       BrowserLauncher // BH 2018
-              .openURL("http://wiki.jmol.org");//http://jmol.sourceforge.net/docs/JmolUserGuide/");
+              .openURL("http://wiki.jmol.org");// http://jmol.sourceforge.net/docs/JmolUserGuide/");
     } catch (Exception ex)
     {
       System.err.println("Show Jmol help failed with: " + ex.getMessage());
@@ -523,7 +551,8 @@ public class AppJmol extends StructureViewerBase
           }
         }
       }
-      else if (jmb == null || jmb.jmolViewer == null || !jmb.isFinishedInit())
+      else if (jmb == null || jmb.jmolViewer == null
+              || !jmb.isFinishedInit())
       {
         g.setColor(Color.black);
         g.fillRect(0, 0, currentSize.width, currentSize.height);