JAL-1807 merge from JAL-1759jmolUpdate
[jalview.git] / src / jalview / gui / AppJmol.java
index c2a7299..a16ea68 100644 (file)
  */
 package jalview.gui;
 
+import jalview.bin.Cache;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceI;
+import jalview.gui.StructureViewer.ViewerType;
+import jalview.io.AppletFormatAdapter;
+import jalview.io.JalviewFileChooser;
+import jalview.io.JalviewFileView;
+import jalview.schemes.BuriedColourScheme;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.HelixColourScheme;
+import jalview.schemes.HydrophobicColourScheme;
+import jalview.schemes.PurinePyrimidineColourScheme;
+import jalview.schemes.StrandColourScheme;
+import jalview.schemes.TaylorColourScheme;
+import jalview.schemes.TurnColourScheme;
+import jalview.schemes.ZappoColourScheme;
+import jalview.structures.models.AAStructureBindingModel;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Dimension;
@@ -34,8 +57,8 @@ import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FileReader;
+import java.io.IOException;
 import java.io.PrintWriter;
-import java.util.Enumeration;
 import java.util.Vector;
 
 import javax.swing.JCheckBoxMenuItem;
@@ -51,29 +74,6 @@ import javax.swing.event.InternalFrameEvent;
 import javax.swing.event.MenuEvent;
 import javax.swing.event.MenuListener;
 
-import jalview.bin.Cache;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.ColumnSelection;
-import jalview.datamodel.PDBEntry;
-import jalview.datamodel.SequenceI;
-import jalview.gui.StructureViewer.ViewerType;
-import jalview.io.AppletFormatAdapter;
-import jalview.io.JalviewFileChooser;
-import jalview.io.JalviewFileView;
-import jalview.schemes.BuriedColourScheme;
-import jalview.schemes.ColourSchemeI;
-import jalview.schemes.HelixColourScheme;
-import jalview.schemes.HydrophobicColourScheme;
-import jalview.schemes.PurinePyrimidineColourScheme;
-import jalview.schemes.StrandColourScheme;
-import jalview.schemes.TaylorColourScheme;
-import jalview.schemes.TurnColourScheme;
-import jalview.schemes.ZappoColourScheme;
-import jalview.structures.models.AAStructureBindingModel;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-
 public class AppJmol extends StructureViewerBase
 {
   AppJmolBinding jmb;
@@ -84,41 +84,8 @@ public class AppJmol extends StructureViewerBase
 
   RenderPanel renderPanel;
 
-  Vector atomsPicked = new Vector();
-
   private boolean addingStructures = false;
 
-  /**
-   * 
-   * @param file
-   * @param id
-   * @param seq
-   * @param ap
-   * @param loadStatus
-   * @param bounds
-   * @deprecated defaults to AppJmol(String[] files, ... , viewid);
-   */
-  @Deprecated
-  public AppJmol(String file, String id, SequenceI[] seq,
-          AlignmentPanel ap, String loadStatus, Rectangle bounds)
-  {
-    this(file, id, seq, ap, loadStatus, bounds, null);
-  }
-
-  /**
-   * @deprecated
-   */
-  @Deprecated
-  public AppJmol(String file, String id, SequenceI[] seq,
-          AlignmentPanel ap, String loadStatus, Rectangle bounds,
-          String viewid)
-  {
-    this(new String[]
-    { file }, new String[]
-    { id }, new SequenceI[][]
-    { seq }, ap, true, true, false, loadStatus, bounds, viewid);
-  }
-
   ViewSelectionMenu seqColourBy;
 
   /**
@@ -185,6 +152,7 @@ public class AppJmol extends StructureViewerBase
 
     this.addInternalFrameListener(new InternalFrameAdapter()
     {
+      @Override
       public void internalFrameClosing(InternalFrameEvent internalFrameEvent)
       {
         closeViewer(false);
@@ -345,36 +313,30 @@ public class AppJmol extends StructureViewerBase
         return;
       }
     }
-    // /////////////////////////////////
-    // Check if there are other Jmol views involving this alignment
-    // and prompt user about adding this molecule to one of them
-    Vector existingViews = getJmolsFor(ap);
-    if (existingViews.size() > 0)
+
+    /*
+     * Check if there are other Jmol views involving this alignment and prompt
+     * user about adding this molecule to one of them
+     */
+    for (AppJmol topJmol : getJmolsFor(ap))
     {
-      Enumeration jm = existingViews.elements();
-      while (jm.hasMoreElements())
+      // TODO: highlight topJmol in view somehow
+      int option = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
+              MessageManager.formatMessage("label.add_pdbentry_to_view",
+                      new String[]
+                      { pdbentry.getId(), topJmol.getTitle() }),
+              MessageManager
+                      .getString("label.align_to_existing_structure_view"),
+              JOptionPane.YES_NO_CANCEL_OPTION);
+      if (option == JOptionPane.CANCEL_OPTION)
       {
-        AppJmol topJmol = (AppJmol) jm.nextElement();
-        // TODO: highlight topJmol in view somehow
-        int option = JOptionPane
-                .showInternalConfirmDialog(
-                        Desktop.desktop,
-                        MessageManager.formatMessage(
-                                "label.add_pdbentry_to_view", new String[]
-                                { pdbentry.getId(), topJmol.getTitle() }),
-                        MessageManager
-                                .getString("label.align_to_existing_structure_view"),
-                        JOptionPane.YES_NO_CANCEL_OPTION);
-        if (option == JOptionPane.CANCEL_OPTION)
-        {
-          return;
-        }
-        if (option == JOptionPane.YES_OPTION)
-        {
-          topJmol.useAlignmentPanelForSuperposition(ap);
-          topJmol.addStructure(pdbentry, seq, chains, true, ap.alignFrame);
-          return;
-        }
+        return;
+      }
+      if (option == JOptionPane.YES_OPTION)
+      {
+        topJmol.useAlignmentPanelForSuperposition(ap);
+        topJmol.addStructure(pdbentry, seq, chains, true, ap.alignFrame);
+        return;
       }
     }
     // /////////////////////////////////
@@ -407,6 +369,7 @@ public class AppJmol extends StructureViewerBase
     }
     this.addInternalFrameListener(new InternalFrameAdapter()
     {
+      @Override
       public void internalFrameClosing(InternalFrameEvent internalFrameEvent)
       {
         closeViewer(false);
@@ -489,18 +452,18 @@ public class AppJmol extends StructureViewerBase
     return;
   }
 
-  private Vector getJmolsFor(AlignmentPanel apanel)
+  private Vector<AppJmol> getJmolsFor(AlignmentPanel apanel)
   {
-    Vector result = new Vector();
+    Vector<AppJmol> result = new Vector<AppJmol>();
     JInternalFrame[] frames = Desktop.instance.getAllFrames();
 
     for (JInternalFrame frame : frames)
     {
       if (frame instanceof AppJmol)
       {
-        if (((StructureViewerBase) frame).isLinkedWith(apanel))
+        if (((AppJmol) frame).isLinkedWith(apanel))
         {
-          result.addElement(frame);
+          result.addElement((AppJmol) frame);
         }
       }
     }
@@ -524,10 +487,10 @@ public class AppJmol extends StructureViewerBase
       scriptWindow = new JPanel(bl);
       scriptWindow.setVisible(false);
     }
-    ;
+
     jmb.allocateViewer(renderPanel, true, "", null, null, "", scriptWindow,
             null);
-    jmb.newJmolPopup(true, "Jmol", true);
+    // jmb.newJmolPopup("Jmol");
     if (command == null)
     {
       command = "";
@@ -536,7 +499,7 @@ public class AppJmol extends StructureViewerBase
     jmb.setFinishedInit(true);
   }
 
-  void setChainMenuItems(Vector chains)
+  void setChainMenuItems(Vector<String> chains)
   {
     chainMenu.removeAll();
     if (chains == null)
@@ -564,9 +527,9 @@ public class AppJmol extends StructureViewerBase
 
     chainMenu.add(menuItem);
 
-    for (int c = 0; c < chains.size(); c++)
+    for (String chain : chains)
     {
-      menuItem = new JCheckBoxMenuItem(chains.elementAt(c).toString(), true);
+      menuItem = new JCheckBoxMenuItem(chain, true);
       menuItem.addItemListener(new ItemListener()
       {
         public void itemStateChanged(ItemEvent evt)
@@ -588,9 +551,7 @@ public class AppJmol extends StructureViewerBase
 
   void centerViewer()
   {
-    Vector toshow = new Vector();
-    String lbl;
-    int mlength, p, mnum;
+    Vector<String> toshow = new Vector<String>();
     for (int i = 0; i < chainMenu.getItemCount(); i++)
     {
       if (chainMenu.getItem(i) instanceof JCheckBoxMenuItem)
@@ -763,7 +724,7 @@ public class AppJmol extends StructureViewerBase
 
       // need to wait around until script has finished
       while (addingStructures ? lastnotify >= jmb.getLoadNotifiesHandled()
-              : (jmb.isFinishedInit() && jmb.getPdbFile() != null && jmb
+              : (!jmb.isFinishedInit() && jmb.getPdbFile() != null && jmb
                       .getPdbFile().length != jmb.getPdbCount()))
       {
         try
@@ -774,6 +735,7 @@ public class AppJmol extends StructureViewerBase
         {
         }
       }
+
       // refresh the sequence colours for the new structure(s)
       for (AlignmentPanel ap : _colourwith)
       {
@@ -813,10 +775,11 @@ public class AppJmol extends StructureViewerBase
 
     if (value == JalviewFileChooser.APPROVE_OPTION)
     {
+      BufferedReader in = null;
       try
       {
         // TODO: cope with multiple PDB files in view
-        BufferedReader in = new BufferedReader(new FileReader(
+        in = new BufferedReader(new FileReader(
                 jmb.getPdbFile()[0]));
         File outFile = chooser.getSelectedFile();
 
@@ -833,6 +796,18 @@ public class AppJmol extends StructureViewerBase
       } catch (Exception ex)
       {
         ex.printStackTrace();
+      } finally
+      {
+        if (in != null)
+        {
+          try
+          {
+            in.close();
+          } catch (IOException e)
+          {
+            // ignore
+          }
+        }
       }
     }
   }
@@ -899,8 +874,7 @@ public class AppJmol extends StructureViewerBase
 
     if (im.getGraphics() != null)
     {
-      Rectangle rect = new Rectangle(width, height);
-      jmb.viewer.renderScreenImage(im.getGraphics(), rect.getSize(), rect);
+      jmb.viewer.renderScreenImage(im.getGraphics(), width, height);
       im.writeImage();
     }
   }
@@ -936,7 +910,7 @@ public class AppJmol extends StructureViewerBase
       // Set the colour using the current view for the associated alignframe
       for (AlignmentPanel ap : _colourwith)
       {
-        jmb.colourBySequence(ap.av.isShowSequenceFeatures(), ap);
+        jmb.colourBySequence(ap);
       }
     }
   }
@@ -1077,12 +1051,10 @@ public class AppJmol extends StructureViewerBase
   {
     final Dimension currentSize = new Dimension();
 
-    final Rectangle rectClip = new Rectangle();
-
+    @Override
     public void paintComponent(Graphics g)
     {
       getSize(currentSize);
-      g.getClipBounds(rectClip);
 
       if (jmb != null && jmb.fileLoadingError != null)
       {
@@ -1121,7 +1093,8 @@ public class AppJmol extends StructureViewerBase
       }
       else
       {
-        jmb.viewer.renderScreenImage(g, currentSize, rectClip);
+        jmb.viewer.renderScreenImage(g, currentSize.width,
+                currentSize.height);
       }
     }
   }