Further structure accessing feature
[jalview.git] / src / jalview / gui / PopupMenu.java
old mode 100755 (executable)
new mode 100644 (file)
index 7a82a96..8197688
@@ -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();
 
@@ -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,40 @@ public class PopupMenu extends JPopupMenu
         }
       }
       else
-      {
-        structureMenu.remove(viewStructureMenu);
+      {          
+        //JAN structureMenu.remove(viewStructureMenu);
         // structureMenu.remove(colStructureMenu);
       }
+      
+      //if(seq.getAnnotation()[0].annotations[0].secondaryStructure == 'S'){
+      //TODO: Something to check if it's an RNA
+         //like: if(seq.getAnnotation()[0].annotations[0].secondaryStructure == 'S')
+         final SequenceI seqI = seq.getDatasetSequence();
+         AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
+       
+
+         //for(int i=0; i<aa.length;i++){
+         final String rnastruc=aa[0].getRNAStruc();
+                 if(aa[0]._rnasecstr != null){
+                         System.out.println("Is RNA: "+aa[0].getRNAStruc()+" "+aa.length);
+                         
+                 }             
+         
+         menuItem = new JMenuItem();
+         menuItem.setText("RNA structure");
+      menuItem.addActionListener(new java.awt.event.ActionListener()
+      {
+        public void actionPerformed(ActionEvent e)
+        {
+               System.out.println("Call Varna "+seqI.getSequenceAsString()+" "+seqI.getName());
+               new AppVarna(seqI.getSequenceAsString(),rnastruc,seqI.getName());
+               
+        }
+      });        
+      viewStructureMenu.add(menuItem);
+         
+      //}
+     
 
       menuItem = new JMenuItem("Hide Sequences");
       menuItem.addActionListener(new java.awt.event.ActionListener()
@@ -341,7 +356,8 @@ public class PopupMenu extends JPopupMenu
 
     if (sg != null)
     {
-      groupName.setText(sg.getName());
+      groupName.setText("Name: "+sg.getName());
+      groupName.setText("Edit name and description of current group.");
 
       if (sg.cs instanceof ZappoColourScheme)
       {
@@ -387,6 +403,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);
@@ -405,6 +429,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
     {
@@ -987,6 +1039,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)
@@ -1138,6 +1192,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()
@@ -1276,7 +1347,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!
    * 
@@ -1825,8 +1908,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",