Highlight doesnt use offset
[jalview.git] / src / MCview / PDBViewer.java
index 49c1b11..06b6f65 100755 (executable)
@@ -7,13 +7,6 @@ import jalview.gui.*;
 import jalview.io.EBIFetchClient;\r
 import java.awt.event.ActionListener;\r
 import java.awt.event.ActionEvent;\r
-import java.io.FileOutputStream;\r
-import org.jibble.epsgraphics.EpsGraphics2D;\r
-import javax.imageio.ImageIO;\r
-import java.awt.image.BufferedImage;\r
-import java.awt.Graphics;\r
-import java.awt.Graphics2D;\r
-import java.awt.RenderingHints;\r
 \r
 public class PDBViewer extends JInternalFrame implements Runnable\r
 {\r
@@ -41,11 +34,15 @@ public class PDBViewer extends JInternalFrame implements Runnable
     pdbcanvas = new PDBCanvas(seqcanvas, seq);\r
 \r
     setContentPane(pdbcanvas);\r
-    Desktop.addInternalFrame(this,\r
-                         sequence.getName() + ":" + pdb.getId()\r
-                         + " Method: " + pdb.getProperty().get("method")\r
-                         + " Chain:" + pdb.getProperty().get("chains"),\r
-                         400, 400);\r
+    StringBuffer title = new StringBuffer(sequence.getName() + ":" + pdb.getId());\r
+    if(pdb.getProperty()!=null)\r
+    {\r
+      title.append( " Method: " );\r
+      title.append(pdb.getProperty().get("method"));\r
+      title.append( " Chain:" );\r
+      title.append( pdb.getProperty().get("chains"));\r
+    }\r
+    Desktop.addInternalFrame(this,title.toString(),400, 400);\r
 \r
      Thread worker = new Thread(this);\r
      worker.start();\r
@@ -177,6 +174,15 @@ public class PDBViewer extends JInternalFrame implements Runnable
         molecule_actionPerformed(e);\r
       }\r
     });\r
+    allchains.setSelected(true);\r
+    allchains.setText("Show All Chains");\r
+    allchains.addItemListener(new ItemListener()\r
+    {\r
+      public void itemStateChanged(ItemEvent e)\r
+      {\r
+        allchains_itemStateChanged(e);\r
+      }\r
+    });\r
     jMenuBar1.add(fileMenu);\r
     jMenuBar1.add(coloursMenu);\r
     fileMenu.add(saveMenu);\r
@@ -192,6 +198,7 @@ public class PDBViewer extends JInternalFrame implements Runnable
     coloursMenu.add(depth);\r
     coloursMenu.add(zbuffer);\r
     coloursMenu.add(molecule);\r
+    coloursMenu.add(allchains);\r
     ButtonGroup bg = new ButtonGroup();\r
     bg.add(seqButton);\r
     bg.add(chain);\r
@@ -214,127 +221,54 @@ public class PDBViewer extends JInternalFrame implements Runnable
   JRadioButtonMenuItem chain = new JRadioButtonMenuItem();\r
   JRadioButtonMenuItem seqButton = new JRadioButtonMenuItem();\r
   JCheckBoxMenuItem molecule = new JCheckBoxMenuItem();\r
+  JCheckBoxMenuItem allchains = new JCheckBoxMenuItem();\r
 \r
-  public void png_actionPerformed(ActionEvent e)\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param e DOCUMENT ME!\r
+   */\r
+  public void eps_actionPerformed(ActionEvent e)\r
   {\r
-    int width =  pdbcanvas.getWidth();\r
-    int height = pdbcanvas.getHeight();\r
-\r
-    try\r
-    {\r
-        jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(jalview.bin.Cache.getProperty(\r
-                    "LAST_DIRECTORY"), new String[] { "png" },\r
-                new String[] { "Portable network graphics" },\r
-                "Portable network graphics");\r
-\r
-        chooser.setFileView(new jalview.io.JalviewFileView());\r
-        chooser.setDialogTitle("Create PNG Image of Molecule");\r
-        chooser.setToolTipText("Save");\r
-\r
-        int value = chooser.showSaveDialog(this);\r
-\r
-        if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)\r
-        {\r
-            return;\r
-        }\r
-\r
-        jalview.bin.Cache.setProperty("LAST_DIRECTORY",\r
-            chooser.getSelectedFile().getParent());\r
-\r
-        FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());\r
-\r
-        BufferedImage bi = new BufferedImage(width, height,\r
-                BufferedImage.TYPE_INT_RGB);\r
-        Graphics png = bi.getGraphics();\r
-        Graphics2D ig2 = (Graphics2D) png;\r
-        ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
-                                 RenderingHints.VALUE_ANTIALIAS_ON);\r
-\r
-\r
-        pdbcanvas.drawAll(png, width, height);\r
-\r
-        ImageIO.write(bi, "png", out);\r
-        out.close();\r
-    }\r
-    catch (Exception ex)\r
-    {\r
-        ex.printStackTrace();\r
-    }\r
+    makePDBImage(jalview.util.ImageMaker.EPS);\r
   }\r
 \r
-  public void eps_actionPerformed(ActionEvent e)\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param e DOCUMENT ME!\r
+   */\r
+  public void png_actionPerformed(ActionEvent e)\r
   {\r
-    boolean accurateText = true;\r
-\r
-    String renderStyle = jalview.bin.Cache.getDefault("EPS_RENDERING",\r
-        "Prompt each time");\r
-\r
-  // If we need to prompt, and if the GUI is visible then\r
-  // Prompt for EPS rendering style\r
-    if (renderStyle.equalsIgnoreCase("Prompt each time")\r
-        && !\r
-        (System.getProperty("java.awt.headless") != null\r
-         && System.getProperty("java.awt.headless").equals("true")))\r
-    {\r
-      EPSOptions eps = new EPSOptions();\r
-      renderStyle = eps.getValue();\r
-\r
-      if (renderStyle==null || eps.cancelled)\r
-        return;\r
-\r
+     makePDBImage(jalview.util.ImageMaker.PNG);\r
+  }\r
 \r
-    }\r
+  void makePDBImage(int type)\r
+  {\r
+    int width = pdbcanvas.getWidth();\r
+    int height = pdbcanvas.getHeight();\r
 \r
-    if (renderStyle.equalsIgnoreCase("text"))\r
+    jalview.util.ImageMaker im;\r
+\r
+    if (type == jalview.util.ImageMaker.PNG)\r
+      im = new jalview.util.ImageMaker(this,\r
+                                       jalview.util.ImageMaker.PNG,\r
+                                       "Make PNG image from view",\r
+                                       width, height,\r
+                                       null, null);\r
+    else\r
+      im = new jalview.util.ImageMaker(this,\r
+                                       jalview.util.ImageMaker.EPS,\r
+                                       "Make EPS file from view",\r
+                                       width, height,\r
+                                       null, this.getTitle());\r
+\r
+    if (im.getGraphics() != null)\r
     {\r
-      accurateText = false;\r
+      pdbcanvas.drawAll(im.getGraphics(), width, height);\r
+      im.writeImage();\r
     }\r
-\r
-      int width = getWidth();\r
-      int height = getHeight();\r
-\r
-      try\r
-      {\r
-          jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(jalview.bin.Cache.getProperty(\r
-                      "LAST_DIRECTORY"), new String[] { "eps" },\r
-                  new String[] { "Encapsulated Postscript" },\r
-                  "Encapsulated Postscript");\r
-          chooser.setFileView(new jalview.io.JalviewFileView());\r
-          chooser.setDialogTitle("Create EPS file from tree");\r
-          chooser.setToolTipText("Save");\r
-\r
-          int value = chooser.showSaveDialog(this);\r
-\r
-          if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)\r
-          {\r
-              return;\r
-          }\r
-\r
-          jalview.bin.Cache.setProperty("LAST_DIRECTORY",\r
-                                        chooser.getSelectedFile().getParent());\r
-\r
-          FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());\r
-          EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width,\r
-                                               height);\r
-          Graphics2D ig2 = (Graphics2D) pg;\r
-          ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
-                         RenderingHints.VALUE_ANTIALIAS_ON);\r
-\r
-\r
-          pg.setAccurateTextMode(accurateText);\r
-\r
-          pdbcanvas.drawAll(pg, width, height);\r
-\r
-          pg.flush();\r
-          pg.close();\r
-      }\r
-      catch (Exception ex)\r
-      {\r
-          ex.printStackTrace();\r
-        }\r
-\r
   }\r
-\r
   public void charge_actionPerformed(ActionEvent e)\r
   {\r
     clearButtonGroup();\r
@@ -406,4 +340,9 @@ public class PDBViewer extends JInternalFrame implements Runnable
     Desktop.addInternalFrame(cap, "PDB - Sequence Mapping", 500, 600);\r
     cap.setText(pdbcanvas.mappingDetails.toString());\r
   }\r
+\r
+  public void allchains_itemStateChanged(ItemEvent e)\r
+  {\r
+    pdbcanvas.setAllchainsVisible(allchains.getState());\r
+  }\r
 }\r