Merge branch 'features/JAL-1667_PDBe_Search_API' into develop
[jalview.git] / src / jalview / gui / PopupMenu.java
index 06efcf3..766d44b 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.gui;
 
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Hashtable;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JColorChooser;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPopupMenu;
+import javax.swing.JRadioButtonMenuItem;
+
 import jalview.analysis.AAFrequency;
 import jalview.analysis.AlignmentAnnotationUtils;
 import jalview.analysis.Conservation;
@@ -58,29 +81,6 @@ import jalview.util.GroupUrlLink.UrlStringTooLongException;
 import jalview.util.MessageManager;
 import jalview.util.UrlLink;
 
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Hashtable;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.Vector;
-
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JColorChooser;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPopupMenu;
-import javax.swing.JRadioButtonMenuItem;
-
 /**
  * DOCUMENT ME!
  * 
@@ -125,9 +125,6 @@ public class PopupMenu extends JPopupMenu
 
   protected JRadioButtonMenuItem RNAInteractionColour = new JRadioButtonMenuItem();
 
-  // protected JRadioButtonMenuItem covariationColour = new
-  // JRadioButtonMenuItem();
-
   JRadioButtonMenuItem noColourmenuItem = new JRadioButtonMenuItem();
 
   protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem();
@@ -182,12 +179,6 @@ public class PopupMenu extends JPopupMenu
 
   JMenuItem pdbFromFile = new JMenuItem();
 
-  // JBPNote: Commented these out - Should add these services via the web
-  // services menu system.
-  // JMenuItem ContraFold = new JMenuItem();
-
-  // JMenuItem RNAFold = new JMenuItem();
-
   JMenuItem enterPDB = new JMenuItem();
 
   JMenuItem discoverPDB = new JMenuItem();
@@ -212,15 +203,12 @@ public class PopupMenu extends JPopupMenu
 
   JMenu jMenu1 = new JMenu();
 
-  JMenu structureMenu = new JMenu();
+  JMenuItem structureMenu = new JMenuItem();
 
   JMenu viewStructureMenu = new JMenu();
 
-  // JMenu colStructureMenu = new JMenu();
   JMenuItem editSequence = new JMenuItem();
 
-  // JMenuItem annotationMenuItem = new JMenuItem();
-
   JMenu groupLinksMenu;
 
   JMenuItem hideInsertions = new JMenuItem();
@@ -273,7 +261,6 @@ public class PopupMenu extends JPopupMenu
     colours.add(BLOSUM62Colour);
     colours.add(purinePyrimidineColour);
     colours.add(RNAInteractionColour);
-    // colours.add(covariationColour);
 
     for (int i = 0; i < jalview.io.FormatAdapter.WRITEABLE_FORMATS.length; i++)
     {
@@ -378,7 +365,6 @@ public class PopupMenu extends JPopupMenu
         {
           structureMenu.remove(viewStructureMenu);
         }
-        // structureMenu.remove(colStructureMenu);
       }
       if (ap.av.getAlignment().isNucleotide() == true)
       {
@@ -392,26 +378,15 @@ public class PopupMenu extends JPopupMenu
             final String structureLine = aa[i].label + " (alignment)";
             menuItem = new JMenuItem();
             menuItem.setText(MessageManager.formatMessage(
-                    "label.2d_rna_structure_line", new String[]
+                    "label.2d_rna_structure_line", new Object[]
                     { structureLine }));
             menuItem.addActionListener(new java.awt.event.ActionListener()
             {
               @Override
               public void actionPerformed(ActionEvent e)
               {
-                // // 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");
               }
             });
@@ -419,7 +394,6 @@ public class PopupMenu extends JPopupMenu
           }
         }
 
-        // SequenceFeatures[] test = seq.getSequenceFeatures();
 
         if (seq.getAnnotation() != null)
         {
@@ -433,7 +407,7 @@ public class PopupMenu extends JPopupMenu
               // TODO: make rnastrucF a bit more nice
               menuItem = new JMenuItem();
               menuItem.setText(MessageManager.formatMessage(
-                      "label.2d_rna_sequence_name", new String[]
+                      "label.2d_rna_sequence_name", new Object[]
                       { seq.getName() }));
               menuItem.addActionListener(new java.awt.event.ActionListener()
               {
@@ -469,7 +443,7 @@ public class PopupMenu extends JPopupMenu
               && ap.av.getSelectionGroup().getSize() > 1)
       {
         menuItem = new JMenuItem(MessageManager.formatMessage(
-                "label.represent_group_with", new String[]
+                "label.represent_group_with", new Object[]
                 { seq.getName() }));
         menuItem.addActionListener(new java.awt.event.ActionListener()
         {
@@ -538,7 +512,7 @@ public class PopupMenu extends JPopupMenu
     if (sg != null && sg.getSize() > 0)
     {
       groupName.setText(MessageManager.formatMessage("label.name_param",
-              new String[]
+              new Object[]
               { sg.getName() }));
       groupName.setText(MessageManager
               .getString("label.edit_name_and_description_current_group"));
@@ -639,50 +613,6 @@ public class PopupMenu extends JPopupMenu
                 new PDBEntry[pdbe.size()]), pr = reppdb.values().toArray(
                 new PDBEntry[reppdb.size()]);
         final JMenuItem gpdbview, rpdbview;
-        if (pdbe.size() == 1)
-        {
-          structureMenu.add(gpdbview = new JMenuItem(MessageManager
-                  .formatMessage("label.view_structure_for", new String[]
-                  { sqass.getDisplayId(false) })));
-        }
-        else
-        {
-          structureMenu.add(gpdbview = new JMenuItem(MessageManager
-                  .formatMessage("label.view_all_structures", new String[]
-                  { new Integer(pdbe.size()).toString() })));
-        }
-        gpdbview.setToolTipText(MessageManager
-                .getString("label.open_new_jmol_view_with_all_structures_associated_current_selection_superimpose_using_alignment"));
-        gpdbview.addActionListener(new ActionListener()
-        {
-
-          @Override
-          public void actionPerformed(ActionEvent e)
-          {
-            new StructureViewer(ap.getStructureSelectionManager())
-                    .viewStructures(ap, pe, ap.av.collateForPDB(pe));
-          }
-        });
-        if (reppdb.size() > 1 && reppdb.size() < pdbe.size())
-        {
-          structureMenu.add(rpdbview = new JMenuItem(MessageManager
-                  .formatMessage(
-                          "label.view_all_representative_structures",
-                          new String[]
-                          { new Integer(reppdb.size()).toString() })));
-          rpdbview.setToolTipText(MessageManager
-                  .getString("label.open_new_jmol_view_with_all_representative_structures_associated_current_selection_superimpose_using_alignment"));
-          rpdbview.addActionListener(new ActionListener()
-          {
-
-            @Override
-            public void actionPerformed(ActionEvent e)
-            {
-              new StructureViewer(ap.getStructureSelectionManager())
-                      .viewStructures(ap, pr, ap.av.collateForPDB(pr));
-            }
-          });
-        }
       }
     }
     else
@@ -1116,8 +1046,6 @@ public class PopupMenu extends JPopupMenu
       if (urlset != null)
       {
         int type = urlLink.getGroupURLType() & 3;
-        // System.out.println(urlLink.getGroupURLType()
-        // +" "+((String[])urlset[3])[0]);
         // first two bits ofurlLink type bitfield are sequenceids and sequences
         // TODO: FUTURE: ensure the groupURL menu structure can be generalised
         addshowLink(linkMenus[type], label
@@ -1157,7 +1085,7 @@ public class PopupMenu extends JPopupMenu
   {
     JMenuItem item = new JMenuItem(label);
     item.setToolTipText(MessageManager.formatMessage(
-            "label.open_url_param", new String[]
+            "label.open_url_param", new Object[]
             { url }));
     item.addActionListener(new java.awt.event.ActionListener()
     {
@@ -1428,32 +1356,7 @@ public class PopupMenu extends JPopupMenu
         pdbFromFile_actionPerformed();
       }
     });
-    // RNAFold.setText("From RNA Fold with predict2D");
-    // RNAFold.addActionListener(new ActionListener()
-    // {
-    // public void actionPerformed(ActionEvent e)
-    // {
-    // try {
-    // RNAFold_actionPerformed();
-    // } catch (Exception e1) {
-    // // TODO Auto-generated catch block
-    // e1.printStackTrace();
-    // }
-    // }
-    // });
-    // ContraFold.setText("From Contra Fold with predict2D");
-    // ContraFold.addActionListener(new ActionListener()
-    // {
-    // public void actionPerformed(ActionEvent e)
-    // {
-    // try {
-    // ContraFold_actionPerformed();
-    // } catch (Exception e1) {
-    // // TODO Auto-generated catch block
-    // e1.printStackTrace();
-    // }
-    // }
-    // });
+
     enterPDB.setText(MessageManager.getString("label.enter_pdb_id"));
     enterPDB.addActionListener(new ActionListener()
     {
@@ -1502,7 +1405,22 @@ public class PopupMenu extends JPopupMenu
       }
     });
     jMenu1.setText(MessageManager.getString("label.group"));
-    structureMenu.setText(MessageManager.getString("label.structure"));
+    structureMenu.setText(MessageManager.getString("label.view_structure"));
+    structureMenu.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent actionEvent)
+      {
+        SequenceI[] selectedSeqs = new SequenceI[]
+        { sequence };
+        if (ap.av.getSelectionGroup() != null)
+        {
+          selectedSeqs = ap.av.getSequenceSelection();
+        }
+        new StructureChooser(selectedSeqs, sequence, ap);
+      }
+    });
+
     viewStructureMenu.setText(MessageManager
             .getString("label.view_structure"));
     // colStructureMenu.setText("Colour By Structure");
@@ -1590,10 +1508,8 @@ public class PopupMenu extends JPopupMenu
     if (ap.getAlignment().isNucleotide())
     {
       // JBPNote - commented since the colourscheme isn't functional
-      // colourMenu.add(RNAInteractionColour);
       colourMenu.add(purinePyrimidineColour);
     }
-    // colourMenu.add(covariationColour);
     colourMenu.add(userDefinedColour);
 
     if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)
@@ -1619,7 +1535,6 @@ public class PopupMenu extends JPopupMenu
     colourMenu.addSeparator();
     colourMenu.add(abovePIDColour);
     colourMenu.add(conservationMenuItem);
-    // colourMenu.add(annotationMenuItem);
     editMenu.add(copy);
     editMenu.add(cut);
     editMenu.add(editSequence);
@@ -1640,9 +1555,6 @@ public class PopupMenu extends JPopupMenu
     jMenu1.add(showColourText);
     jMenu1.add(outline);
     jMenu1.add(displayNonconserved);
-    structureMenu.add(pdbMenu);
-    structureMenu.add(viewStructureMenu);
-    // structureMenu.add(colStructureMenu);
     noColourmenuItem.setText(MessageManager.getString("label.none"));
     noColourmenuItem.addActionListener(new java.awt.event.ActionListener()
     {
@@ -2006,7 +1918,7 @@ public class PopupMenu extends JPopupMenu
               + MessageManager
                       .formatMessage(
                               "label.create_sequence_details_report_annotation_for",
-                              new String[]
+                              new Object[]
                               { seq.getDisplayId(true) }) + "</h2></p><p>");
       new SequenceAnnotationReport(null)
               .createSequenceAnnotationReport(
@@ -2023,10 +1935,10 @@ public class PopupMenu extends JPopupMenu
     }
     cap.setText("<html>" + contents.toString() + "</html>");
 
-    Desktop.instance.addInternalFrame(cap, MessageManager.formatMessage(
-            "label.sequece_details_for",
-            (sequences.length == 1 ? new String[]
-            { sequences[0].getDisplayId(true) } : new String[]
+    Desktop.addInternalFrame(cap, MessageManager.formatMessage(
+            "label.sequence_details_for",
+            (sequences.length == 1 ? new Object[]
+            { sequences[0].getDisplayId(true) } : new Object[]
             { MessageManager.getString("label.selection") })), 500, 400);
 
   }
@@ -2572,7 +2484,8 @@ public class PopupMenu extends JPopupMenu
 
     if (sg != null)
     {
-      int[][] startEnd = ap.av.getVisibleRegionBoundaries(sg.getStartRes(),
+      List<int[]> startEnd = ap.av.getVisibleRegionBoundaries(
+              sg.getStartRes(),
               sg.getEndRes() + 1);
 
       String description;
@@ -2611,7 +2524,7 @@ public class PopupMenu extends JPopupMenu
     CutAndPasteTransfer cap = new CutAndPasteTransfer();
     cap.setForInput(null);
     Desktop.addInternalFrame(cap, MessageManager.formatMessage(
-            "label.alignment_output_command", new String[]
+            "label.alignment_output_command", new Object[]
             { e.getActionCommand() }), 600, 500);
 
     String[] omitHidden = null;
@@ -2630,10 +2543,10 @@ public class PopupMenu extends JPopupMenu
             jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
     chooser.setFileView(new jalview.io.JalviewFileView());
     chooser.setDialogTitle(MessageManager.formatMessage(
-            "label.select_pdb_file_for", new String[]
+            "label.select_pdb_file_for", new Object[]
             { sequence.getDisplayId(false) }));
     chooser.setToolTipText(MessageManager.formatMessage(
-            "label.load_pdb_file_associate_with_sequence", new String[]
+            "label.load_pdb_file_associate_with_sequence", new Object[]
             { sequence.getDisplayId(false) }));
 
     int value = chooser.showOpenDialog(null);
@@ -2649,18 +2562,7 @@ public class PopupMenu extends JPopupMenu
 
   }
 
-  // JBNote: commented out - these won't be instantiated here...!
-  // public void RNAFold_actionPerformed() throws Exception
-  // {
-  // Predict2D P2D = new Predict2D();
-  // P2D.getStructure2DFromRNAFold("toto");
-  // }
-  //
-  // public void ContraFold_actionPerformed() throws Exception
-  // {
-  // Predict2D P2D = new Predict2D();
-  // P2D.getStructure2DFromContraFold("toto");
-  // }
+
   public void enterPDB_actionPerformed()
   {
     String id = JOptionPane.showInternalInputDialog(Desktop.desktop,