Merge branch 'develop' into menard
[jalview.git] / src / jalview / gui / PopupMenu.java
index 53ef5e8..c354964 100644 (file)
@@ -23,6 +23,14 @@ import java.awt.*;
 import java.awt.event.*;
 
 import javax.swing.*;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.xml.sax.SAXException;
+
+import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax;
+import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed;
+import fr.orsay.lri.varna.exceptions.ExceptionPermissionDenied;
+import fr.orsay.lri.varna.exceptions.ExceptionUnmatchedClosingParentheses;
 
 import MCview.*;
 import jalview.analysis.*;
@@ -71,6 +79,7 @@ public class PopupMenu extends JPopupMenu
   protected JRadioButtonMenuItem BLOSUM62Colour = new JRadioButtonMenuItem();
 
   protected JRadioButtonMenuItem purinePyrimidineColour = new JRadioButtonMenuItem();
+  protected JRadioButtonMenuItem RNAInteractionColour = new JRadioButtonMenuItem();
 
   // protected JRadioButtonMenuItem covariationColour = new
   // JRadioButtonMenuItem();
@@ -84,6 +93,9 @@ public class PopupMenu extends JPopupMenu
   JMenu sequenceMenu = new JMenu();
 
   JMenuItem sequenceName = new JMenuItem();
+  
+  JMenuItem sequenceDetails = new JMenuItem();
+  JMenuItem sequenceSelDetails = new JMenuItem();
 
   SequenceI sequence;
 
@@ -189,6 +201,7 @@ public class PopupMenu extends JPopupMenu
     colours.add(PIDColour);
     colours.add(BLOSUM62Colour);
     colours.add(purinePyrimidineColour);
+    colours.add(RNAInteractionColour);
     // colours.add(covariationColour);
 
     for (int i = 0; i < jalview.io.FormatAdapter.WRITEABLE_FORMATS.length; i++)
@@ -272,13 +285,25 @@ public class PopupMenu extends JPopupMenu
             final String rnastruc = aa[i].getRNAStruc();
             final String structureLine=aa[i].label;
             menuItem = new JMenuItem();
-            menuItem.setText("RNA structure "+structureLine);
+            menuItem.setText("2D RNA "+structureLine);
             menuItem.addActionListener(new java.awt.event.ActionListener()
+            
             {
               public void actionPerformed(ActionEvent e)
               {
-                new AppVarna(structureLine, seq, seq.getSequenceAsString(), rnastruc, seq
-                        .getName(), ap);
+                       //System.out.println("1:"+structureLine);
+                       System.out.println("1:sname"+seq.getName());
+                       System.out.println("2:seq"+seq);
+                
+                       //System.out.println("3:"+seq.getSequenceAsString());
+                       System.out.println("3:strucseq"+rnastruc);
+                       //System.out.println("4:struc"+seq.getRNA());
+                       System.out.println("5:name"+seq.getName());
+                       System.out.println("6:ap"+ap);
+                       new AppVarna(structureLine, seq, seq.getSequenceAsString(), rnastruc, seq
+                            .getName(), ap);
+                       //new AppVarna(seq.getName(),seq,rnastruc,seq.getRNA(), seq.getName(), ap);
+                       System.out.println("end");
               }
             });
             viewStructureMenu.add(menuItem);
@@ -298,12 +323,14 @@ public class PopupMenu extends JPopupMenu
               
            // TODO: make rnastrucF a bit more nice
               menuItem = new JMenuItem();
-              menuItem.setText("RNA structure - "+seq.getName());
+              menuItem.setText("2D RNA - "+seq.getName());
               menuItem.addActionListener(new java.awt.event.ActionListener()
               {
                 public void actionPerformed(ActionEvent e)
                 {
                   // TODO: VARNA does'nt print gaps in the sequence
+                
+                  //new AppVarna(seq.getName()+" structure",seq,rnastruc,seq.getRNA(), seq.getName(), ap);
                   new AppVarna(seq.getName()+" structure",seq,seq.getSequenceAsString(), rnastruc, seq
                           .getName(), ap);
                 }
@@ -439,6 +466,11 @@ public class PopupMenu extends JPopupMenu
       {
         purinePyrimidineColour.setSelected(true);
       }
+      
+      else if (sg.cs instanceof RNAInteractionColourScheme)
+      {
+        RNAInteractionColour.setSelected(true);
+      }
       /*
        * else if (sg.cs instanceof CovariationColourScheme) {
        * covariationColour.setSelected(true); }
@@ -895,6 +927,20 @@ public class PopupMenu extends JPopupMenu
         sequenceName_actionPerformed();
       }
     });
+    sequenceDetails.setText("Sequence Details ...");
+    sequenceDetails.addActionListener(new java.awt.event.ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        sequenceDetails_actionPerformed();
+     }});
+    sequenceSelDetails.setText("Sequence Details ...");
+    sequenceSelDetails.addActionListener(new java.awt.event.ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        sequenceSelectionDetails_actionPerformed();
+     }});    
     PIDColour.setFocusPainted(false);
     unGroupMenuItem.setText("Remove Group");
     unGroupMenuItem.addActionListener(new java.awt.event.ActionListener()
@@ -1004,7 +1050,30 @@ public class PopupMenu extends JPopupMenu
     {
       public void actionPerformed(ActionEvent e)
       {
-        pdbFromFile_actionPerformed();
+        try {
+                       pdbFromFile_actionPerformed();
+               } catch (ExceptionFileFormatOrSyntax e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               } catch (ParserConfigurationException e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               } catch (SAXException e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               } catch (ExceptionPermissionDenied e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               } catch (ExceptionLoadingFailed e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               } catch (InterruptedException e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               } catch (ExceptionUnmatchedClosingParentheses e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               }
       }
     });
     enterPDB.setText("Enter PDB Id");
@@ -1052,15 +1121,15 @@ public class PopupMenu extends JPopupMenu
         editSequence_actionPerformed(actionEvent);
       }
     });
+    
     /*
      * annotationMenuItem.setText("By Annotation");
      * annotationMenuItem.addActionListener(new ActionListener() { public void
      * actionPerformed(ActionEvent actionEvent) {
      * annotationMenuItem_actionPerformed(actionEvent); } });
      */
-
+    groupMenu.add(sequenceSelDetails);
     add(groupMenu);
-
     add(sequenceMenu);
     this.add(structureMenu);
     groupMenu.add(editMenu);
@@ -1068,6 +1137,7 @@ public class PopupMenu extends JPopupMenu
     groupMenu.add(sequenceFeature);
     groupMenu.add(jMenu1);
     sequenceMenu.add(sequenceName);
+    sequenceMenu.add(sequenceDetails);
     colourMenu.add(textColour);
     colourMenu.add(noColourmenuItem);
     colourMenu.add(clustalColour);
@@ -1081,6 +1151,7 @@ public class PopupMenu extends JPopupMenu
     colourMenu.add(turnColour);
     colourMenu.add(buriedColour);
     colourMenu.add(nucleotideMenuItem);
+    colourMenu.add(RNAInteractionColour);
     if (ap.getAlignment().isNucleotide()) {
        colourMenu.add(purinePyrimidineColour);
     }
@@ -1245,6 +1316,16 @@ public class PopupMenu extends JPopupMenu
                 purinePyrimidineColour_actionPerformed();
               }
             });
+    
+    RNAInteractionColour.setText("RNA Interaction type");
+    RNAInteractionColour
+            .addActionListener(new java.awt.event.ActionListener()
+            {
+              public void actionPerformed(ActionEvent e)
+              {
+                RNAInteractionColour_actionPerformed();
+              }
+            });
     /*
      * covariationColour.addActionListener(new java.awt.event.ActionListener() {
      * public void actionPerformed(ActionEvent e) {
@@ -1262,6 +1343,40 @@ public class PopupMenu extends JPopupMenu
             });
   }
 
+  protected void sequenceSelectionDetails_actionPerformed()
+  {
+    createSequenceDetailsReport(ap.av.getSequenceSelection());
+  }
+
+  protected void sequenceDetails_actionPerformed()
+  {
+    createSequenceDetailsReport(new SequenceI[]{sequence});
+  }
+  public void createSequenceDetailsReport(SequenceI[] sequences)
+  {
+    CutAndPasteHtmlTransfer cap = new CutAndPasteHtmlTransfer();
+    StringBuffer contents = new StringBuffer();
+    for (SequenceI seq:sequences)
+    {
+    contents.append("<p><h2>Annotation for "+seq.getDisplayId(true)+"</h2></p><p>");
+    new SequenceAnnotationReport(null)
+            .createSequenceAnnotationReport(
+                    contents,
+                    seq,
+                    true,
+                    true,false, 
+                    (ap.seqPanel.seqCanvas.fr != null) ? ap.seqPanel.seqCanvas.fr.minmax
+                            : null);
+    contents.append("</p>");
+    }
+    cap.setText("<html>" + contents.toString() + "</html>");
+    
+    Desktop.instance.addInternalFrame(cap, 
+            "Sequence Details for " + (sequences.length==1 ? sequences[0].getDisplayId(true) : "Selection") 
+, 500, 400);
+    
+  }
+
   protected void showNonconserved_actionPerformed()
   {
     getGroup().setShowNonconserved(displayNonconserved.isSelected());
@@ -1289,8 +1404,7 @@ public class PopupMenu extends JPopupMenu
   {
     SequenceGroup sg = getGroup();
     sg.cs = new ClustalxColourScheme(
-            sg.getSequences(ap.av.getHiddenRepSequences()),
-            ap.av.getAlignment().getWidth());
+            sg,ap.av.getHiddenRepSequences());
     refresh();
   }
 
@@ -1396,6 +1510,11 @@ public class PopupMenu extends JPopupMenu
     refresh();
   }
 
+  protected void RNAInteractionColour_actionPerformed()
+  {
+    getGroup().cs = new RNAInteractionColourScheme();
+    refresh();
+  }
   /*
    * protected void covariationColour_actionPerformed() { getGroup().cs = new
    * CovariationColourScheme(sequence.getAnnotation()[0]); refresh(); }
@@ -1848,7 +1967,7 @@ public class PopupMenu extends JPopupMenu
     oal = null;
   }
 
-  public void pdbFromFile_actionPerformed()
+  public void pdbFromFile_actionPerformed() throws ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed, InterruptedException, ExceptionUnmatchedClosingParentheses
   {
     jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(
             jalview.bin.Cache.getProperty("LAST_DIRECTORY"));