Reorganize the class structure, unfortunately breaks the VARNA-Frame
[jalview.git] / src / jalview / gui / PopupMenu.java
old mode 100755 (executable)
new mode 100644 (file)
index 07fdeea..948f684
@@ -21,6 +21,7 @@ import java.util.*;
 
 import java.awt.*;
 import java.awt.event.*;
+
 import javax.swing.*;
 
 import MCview.*;
@@ -37,7 +38,7 @@ import jalview.util.UrlLink;
  * DOCUMENT ME!
  * 
  * @author $author$
- * @version $Revision$
+ * @version $Revision: 1.118 $
  */
 public class PopupMenu extends JPopupMenu
 {
@@ -68,6 +69,10 @@ public class PopupMenu extends JPopupMenu
   protected JRadioButtonMenuItem PIDColour = new JRadioButtonMenuItem();
 
   protected JRadioButtonMenuItem BLOSUM62Colour = new JRadioButtonMenuItem();
+  
+  protected JRadioButtonMenuItem purinePyrimidineColour = new JRadioButtonMenuItem();
+  
+  //protected JRadioButtonMenuItem covariationColour = new JRadioButtonMenuItem();
 
   JRadioButtonMenuItem noColourmenuItem = new JRadioButtonMenuItem();
 
@@ -156,8 +161,8 @@ public class PopupMenu extends JPopupMenu
    * @param links
    * @param groupLinks
    */
-  public PopupMenu(final AlignmentPanel ap, Sequence seq, Vector links,
-          Vector groupLinks)
+  public PopupMenu(final AlignmentPanel ap, final Sequence seq, final Vector links,
+          final Vector groupLinks)
   {
     // /////////////////////////////////////////////////////////
     // If this is activated from the sequence panel, the user may want to
@@ -182,6 +187,8 @@ public class PopupMenu extends JPopupMenu
     colours.add(userDefinedColour);
     colours.add(PIDColour);
     colours.add(BLOSUM62Colour);
+    colours.add(purinePyrimidineColour);
+    //colours.add(covariationColour);
 
     for (int i = 0; i < jalview.io.FormatAdapter.WRITEABLE_FORMATS.length; i++)
     {
@@ -228,33 +235,11 @@ public class PopupMenu extends JPopupMenu
           {
             public void actionPerformed(ActionEvent e)
             {
-              Vector seqs = new Vector();
-              for (int i = 0; i < ap.av.alignment.getHeight(); i++)
-              {
-                Vector pdbs = ap.av.alignment.getSequenceAt(i)
-                        .getDatasetSequence().getPDBId();
-                if (pdbs == null)
-                  continue;
-
-                for (int p = 0; p < pdbs.size(); p++)
-                {
-                  PDBEntry p1 = (PDBEntry) pdbs.elementAt(p);
-                  if (p1.getId().equals(pdb.getId()))
-                  {
-                    if (!seqs.contains(ap.av.alignment.getSequenceAt(i)))
-                      seqs.addElement(ap.av.alignment.getSequenceAt(i));
-
-                    continue;
-                  }
-                }
-              }
-
-              SequenceI[] seqs2 = new SequenceI[seqs.size()];
-              seqs.toArray(seqs2);
-
-              new AppJmol(pdb, seqs2, null, ap);
+               // TODO re JAL-860: optionally open dialog or provide a menu entry allowing user to open just one structure per sequence
+              new AppJmol(pdb, ap.av.collateForPDB(new PDBEntry[] { pdb })[0], null, ap);
               // new PDBViewer(pdb, seqs2, null, ap, AppletFormatAdapter.FILE);
             }
+
           });
           viewStructureMenu.add(menuItem);
 
@@ -268,10 +253,37 @@ public class PopupMenu extends JPopupMenu
         }
       }
       else
-      {
-        structureMenu.remove(viewStructureMenu);
+      {        
+         if(ap.av.alignment.isNucleotide()==false){
+                 structureMenu.remove(viewStructureMenu);
+         }
         // structureMenu.remove(colStructureMenu);
       }
+      
+      if(ap.av.alignment.isNucleotide()==true){
+         AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
+         String rnastruc=new String();
+         for(int i=0; i<aa.length;i++){
+                 if(aa[i]._rnasecstr != null){
+                         rnastruc=aa[i].getRNAStruc();
+                         break;
+                 }
+         }
+         //TODO: make rnastrucF a bit more nice
+         final String rnastrucF=rnastruc;
+         menuItem = new JMenuItem();
+         menuItem.setText("RNA structure");
+         menuItem.addActionListener(new java.awt.event.ActionListener()
+         {
+                 public void actionPerformed(ActionEvent e)
+                 {
+                         System.out.println("Call Varna "+seq.getSequenceAsString()+" "+seq.getName());
+                         //TODO: VARNA does'nt print gaps in the sequence
+                         new AppVarna(seq.getSequenceAsString(),rnastrucF,seq.getName());
+                 }
+                       });       
+                       viewStructureMenu.add(menuItem);
+       }
 
       menuItem = new JMenuItem("Hide Sequences");
       menuItem.addActionListener(new java.awt.event.ActionListener()
@@ -388,6 +400,14 @@ public class PopupMenu extends JPopupMenu
       {
         clustalColour.setSelected(true);
       }
+      else if (sg.cs instanceof PurinePyrimidineColourScheme)
+      {
+       purinePyrimidineColour.setSelected(true);
+      }
+     /* else if (sg.cs instanceof CovariationColourScheme)
+      {
+       covariationColour.setSelected(true);
+      }*/
       else
       {
         noColourmenuItem.setSelected(true);
@@ -406,6 +426,34 @@ public class PopupMenu extends JPopupMenu
       {
         buildGroupURLMenu(sg, groupLinks);
       }
+      // Add a 'show all structures' for the current selection
+      Hashtable<String, PDBEntry> pdbe=new Hashtable<String,PDBEntry>();
+      for (SequenceI sq: ap.av.getSequenceSelection())
+      {
+        Vector<PDBEntry> pes = (Vector<PDBEntry>) sq.getDatasetSequence().getPDBId();
+        if (pes!=null) {
+          for (PDBEntry pe: pes)
+          {
+            pdbe.put(pe.getId(),  pe);
+          }
+        }
+      }
+      if (pdbe.size()>0)
+      {
+        final PDBEntry[] pe = pdbe.values().toArray(new PDBEntry[pdbe.size()]);
+        final JMenuItem gpdbview;
+        structureMenu.add(gpdbview=new JMenuItem("View "+pdbe.size()+" structures."));
+        gpdbview.setToolTipText("Open a new Jmol view with all structures associated with the current selection and superimpose them using the alignment.");
+        gpdbview.addActionListener(new ActionListener()
+        {
+          
+          @Override
+          public void actionPerformed(ActionEvent e)
+          {
+            new AppJmol(ap, pe, ap.av.collateForPDB(pe));
+          }
+        });
+      }
     }
     else
     {
@@ -988,6 +1036,8 @@ public class PopupMenu extends JPopupMenu
     colourMenu.add(turnColour);
     colourMenu.add(buriedColour);
     colourMenu.add(nucleotideMenuItem);
+    colourMenu.add(purinePyrimidineColour);
+    //colourMenu.add(covariationColour);
     colourMenu.add(userDefinedColour);
 
     if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)
@@ -1139,6 +1189,23 @@ public class PopupMenu extends JPopupMenu
         BLOSUM62Colour_actionPerformed();
       }
     });
+    purinePyrimidineColour.setText("Purine/Pyrimidine");
+    purinePyrimidineColour.addActionListener(new java.awt.event.ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+         purinePyrimidineColour_actionPerformed();
+      }
+    });
+   /* 
+    covariationColour.addActionListener(new java.awt.event.ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+         covariationColour_actionPerformed();
+      }
+    });*/
+    
     conservationMenuItem.setText("Conservation");
     conservationMenuItem
             .addActionListener(new java.awt.event.ActionListener()
@@ -1277,7 +1344,19 @@ public class PopupMenu extends JPopupMenu
     getGroup().cs = new NucleotideColourScheme();
     refresh();
   }
-
+  
+  protected void purinePyrimidineColour_actionPerformed()
+  {
+    getGroup().cs = new PurinePyrimidineColourScheme();
+    refresh();
+  }
+  /*
+  protected void covariationColour_actionPerformed()
+  {
+    getGroup().cs = new CovariationColourScheme(sequence.getAnnotation()[0]);
+    refresh();
+  }
+*/
   /**
    * DOCUMENT ME!
    * 
@@ -1826,8 +1905,7 @@ public class PopupMenu extends JPopupMenu
 
   public void colourByStructure(String pdbid)
   {
-    Annotation[] anots = jalview.structure.StructureSelectionManager
-            .getStructureSelectionManager().colourSequenceFromStructure(
+    Annotation[] anots = ap.av.getStructureSelectionManager().colourSequenceFromStructure(
                     sequence, pdbid);
 
     AlignmentAnnotation an = new AlignmentAnnotation("Structure",