PopupMenu displays URL links
[jalview.git] / src / jalview / gui / PopupMenu.java
index 3114211..480b195 100755 (executable)
@@ -32,6 +32,8 @@ import java.awt.event.*;
 \r
 import javax.swing.*;\r
 \r
+import java.util.Vector;\r
+\r
 \r
 /**\r
  * DOCUMENT ME!\r
@@ -68,14 +70,20 @@ public class PopupMenu extends JPopupMenu
     JCheckBoxMenuItem showBoxes = new JCheckBoxMenuItem();\r
     JCheckBoxMenuItem showText = new JCheckBoxMenuItem();\r
     JCheckBoxMenuItem showColourText = new JCheckBoxMenuItem();\r
-\r
-    /**\r
+  JMenu editMenu = new JMenu();\r
+  JMenuItem cut = new JMenuItem();\r
+  JMenuItem copy = new JMenuItem();\r
+  JMenuItem upperCase = new JMenuItem();\r
+  JMenuItem lowerCase = new JMenuItem();\r
+  JMenuItem toggle = new JMenuItem();\r
+\r
+  /**\r
      * Creates a new PopupMenu object.\r
      *\r
      * @param ap DOCUMENT ME!\r
      * @param seq DOCUMENT ME!\r
      */\r
-    public PopupMenu(final AlignmentPanel ap, Sequence seq)\r
+    public PopupMenu(final AlignmentPanel ap, Sequence seq, Vector links)\r
     {\r
         ///////////////////////////////////////////////////////////\r
         // If this is activated from the sequence panel, the user may want to\r
@@ -111,28 +119,58 @@ public class PopupMenu extends JPopupMenu
         }\r
 \r
 \r
-        if ((seq != null)\r
-            && seq.getDatasetSequence().getPDBId() != null)\r
+        if (seq != null)\r
         {\r
-          java.util.Enumeration e = seq.getDatasetSequence().getPDBId().elements();\r
-          while(e.hasMoreElements())\r
+          JMenuItem menuItem;\r
+          if( seq.getDatasetSequence().getPDBId() != null)\r
           {\r
-            final PDBEntry pdb = (PDBEntry)e.nextElement();\r
-\r
-            JMenuItem pdbMenuItem = new JMenuItem();\r
-            pdbMenuItem.setText("View PDB entry: "+pdb.getId());\r
-            pdbMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+            java.util.Enumeration e = seq.getDatasetSequence().getPDBId().\r
+                elements();\r
+            while (e.hasMoreElements())\r
             {\r
+              final PDBEntry pdb = (PDBEntry) e.nextElement();\r
+\r
+              menuItem = new JMenuItem();\r
+              menuItem.setText("View PDB entry: " + pdb.getId());\r
+              menuItem.addActionListener(new java.awt.event.ActionListener()\r
+              {\r
                 public void actionPerformed(ActionEvent e)\r
                 {\r
                   new PDBViewer(pdb, sequence, ap.seqPanel.seqCanvas);\r
                 }\r
-            });\r
-            sequenceMenu.add(pdbMenuItem);\r
+              });\r
+              sequenceMenu.add(menuItem);\r
+            }\r
           }\r
 \r
+       /*   menuItem = new JMenuItem("Hide Sequences");\r
+          menuItem.addActionListener(new java.awt.event.ActionListener()\r
+              {\r
+                public void actionPerformed(ActionEvent e)\r
+                {\r
+                  hideSequences(false);\r
+                }\r
+              });\r
+          sequenceMenu.add(menuItem);\r
+\r
+          if(ap.av.getSelectionGroup() !=null && ap.av.getSelectionGroup().getSize()>1)\r
+          {\r
+            menuItem = new JMenuItem("Represent Group with " + seq.getName());\r
+            menuItem.addActionListener(new java.awt.event.ActionListener()\r
+            {\r
+              public void actionPerformed(ActionEvent e)\r
+              {\r
+                hideSequences(true);\r
+              }\r
+            });\r
+            sequenceMenu.add(menuItem);\r
+          }*/\r
+\r
+\r
         }\r
 \r
+\r
+\r
         SequenceGroup sg = ap.av.getSelectionGroup();\r
 \r
         if (sg != null)\r
@@ -197,6 +235,11 @@ public class PopupMenu extends JPopupMenu
             showColourText.setSelected(sg.getColourText());\r
             showBoxes.setSelected(sg.getDisplayBoxes());\r
         }\r
+        else\r
+        {\r
+          groupMenu.setVisible(false);\r
+          editMenu.setVisible(false);\r
+        }\r
 \r
         if (!ap.av.alignment.getGroups().contains(sg))\r
         {\r
@@ -211,24 +254,31 @@ public class PopupMenu extends JPopupMenu
         {\r
             sequenceMenu.setVisible(false);\r
         }\r
-        else\r
-        {\r
-          java.util.Vector links = Preferences.sequenceURLLinks;\r
 \r
+        if(links != null && links.size()>0)\r
+        {\r
           JMenu linkMenu = new JMenu("Link");\r
           JMenuItem item;\r
           for(int i=0; i<links.size(); i++)\r
           {\r
             String link = links.elementAt(i).toString();\r
+            final String label = link.substring(0, link.indexOf("|"));\r
+            item = new JMenuItem(label);\r
+            final String url;\r
 \r
-            item = new JMenuItem(link.substring(0, link.indexOf("|")));\r
-            String id = sequence.getName();\r
-            if(id.indexOf("|")>-1)\r
-              id = id.substring(id.lastIndexOf("|")+1);\r
-\r
-            final String url = link.substring(link.indexOf("|")+1, link.indexOf("$SEQUENCE_ID$"))\r
-                + id +\r
-                link.substring(link.indexOf("$SEQUENCE_ID$") + 13);\r
+            if (link.indexOf("$SEQUENCE_ID$") > -1)\r
+            {\r
+              String id = seq.getName();\r
+              if (id.indexOf("|") > -1)\r
+                id = id.substring(id.lastIndexOf("|") + 1);\r
+\r
+              url = link.substring(link.indexOf("|") + 1,\r
+                                   link.indexOf("$SEQUENCE_ID$"))\r
+                  + id +\r
+                  link.substring(link.indexOf("$SEQUENCE_ID$") + 13);\r
+            }\r
+            else\r
+              url = link.substring(link.lastIndexOf("|")+1);\r
 \r
 \r
             item.addActionListener(new java.awt.event.ActionListener()\r
@@ -245,6 +295,7 @@ public class PopupMenu extends JPopupMenu
         }\r
     }\r
 \r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r
@@ -253,7 +304,7 @@ public class PopupMenu extends JPopupMenu
     private void jbInit() throws Exception\r
     {\r
         groupMenu.setText("Group");\r
-        groupMenu.setText("Define");\r
+        groupMenu.setText("Group");\r
         groupName.setText("Name");\r
         groupName.addActionListener(new java.awt.event.ActionListener()\r
             {\r
@@ -263,7 +314,7 @@ public class PopupMenu extends JPopupMenu
                 }\r
             });\r
         sequenceMenu.setText("Sequence");\r
-        sequenceName.setText("Edit Name/Desciption");\r
+        sequenceName.setText("Edit Name/Description");\r
         sequenceName.addActionListener(new java.awt.event.ActionListener()\r
             {\r
                 public void actionPerformed(ActionEvent e)\r
@@ -324,9 +375,51 @@ public class PopupMenu extends JPopupMenu
                     showColourText_actionPerformed(e);\r
                 }\r
             });\r
-        add(groupMenu);\r
+    editMenu.setText("Edit");\r
+    cut.setText("Cut");\r
+    cut.addActionListener(new ActionListener()\r
+    {\r
+      public void actionPerformed(ActionEvent e)\r
+      {\r
+        cut_actionPerformed(e);\r
+      }\r
+    });\r
+    upperCase.setText("To Upper Case");\r
+    upperCase.addActionListener(new ActionListener()\r
+    {\r
+      public void actionPerformed(ActionEvent e)\r
+      {\r
+        upperCase_actionPerformed(e);\r
+      }\r
+    });\r
+    copy.setText("Copy");\r
+    copy.addActionListener(new ActionListener()\r
+    {\r
+      public void actionPerformed(ActionEvent e)\r
+      {\r
+        copy_actionPerformed(e);\r
+      }\r
+    });\r
+    lowerCase.setText("To Lower Case");\r
+    lowerCase.addActionListener(new ActionListener()\r
+    {\r
+      public void actionPerformed(ActionEvent e)\r
+      {\r
+        lowerCase_actionPerformed(e);\r
+      }\r
+    });\r
+    toggle.setText("Toggle Case");\r
+    toggle.addActionListener(new ActionListener()\r
+    {\r
+      public void actionPerformed(ActionEvent e)\r
+      {\r
+        toggle_actionPerformed(e);\r
+      }\r
+    });\r
+    add(groupMenu);\r
         add(sequenceMenu);\r
-        groupMenu.add(groupName);\r
+    this.add(editMenu);\r
+    groupMenu.add(groupName);\r
         groupMenu.addSeparator();\r
         groupMenu.add(unGroupMenuItem);\r
         groupMenu.add(colourMenu);\r
@@ -375,7 +468,12 @@ public class PopupMenu extends JPopupMenu
         colourMenu.addSeparator();\r
         colourMenu.add(abovePIDColour);\r
         colourMenu.add(conservationMenuItem);\r
-        noColourmenuItem.setText("None");\r
+    editMenu.add(copy);\r
+    editMenu.add(cut);\r
+    editMenu.add(upperCase);\r
+    editMenu.add(lowerCase);\r
+    editMenu.add(toggle);\r
+    noColourmenuItem.setText("None");\r
         noColourmenuItem.addActionListener(new java.awt.event.ActionListener()\r
             {\r
                 public void actionPerformed(ActionEvent e)\r
@@ -928,4 +1026,83 @@ public class PopupMenu extends JPopupMenu
         ex.printStackTrace();\r
       }\r
     }\r
+\r
+    void hideSequences(boolean representGroup)\r
+    {\r
+      SequenceGroup sg = ap.av.getSelectionGroup();\r
+      if(sg==null || sg.getSize()<1)\r
+      {\r
+        ap.av.hideSequence(sequence);\r
+        return;\r
+      }\r
+\r
+        int index = 0;\r
+        while(index < sg.sequences.size())\r
+        {\r
+          if(representGroup && sg.getSequenceAt(index)!=sequence)\r
+          {\r
+            sequence.addHiddenSequence(sg.getSequenceAt(index));\r
+            ap.av.hideSequence(sg.getSequenceAt(index));\r
+          }\r
+          else if(!representGroup)\r
+          {\r
+            ap.av.hideSequence(sg.getSequenceAt(index));\r
+          }\r
+          index ++;\r
+        }\r
+\r
+        ap.av.setSelectionGroup(null);\r
+        refresh();\r
+    }\r
+\r
+  public void copy_actionPerformed(ActionEvent e)\r
+  {\r
+    ap.alignFrame.copy_actionPerformed(null);\r
+  }\r
+\r
+  public void cut_actionPerformed(ActionEvent e)\r
+  {\r
+    ap.alignFrame.cut_actionPerformed(null);\r
+  }\r
+\r
+  public void upperCase_actionPerformed(ActionEvent e)\r
+  {\r
+    SequenceGroup sg = ap.av.getSelectionGroup();\r
+    if(sg==null)\r
+      return;\r
+\r
+    for(int g=0; g<sg.getSize(); g++)\r
+    {\r
+      sg.getSequenceAt(g).changeCase(true, sg.getStartRes(), sg.getEndRes()+1);\r
+    }\r
+    ap.repaint();\r
+  }\r
+\r
+  public void lowerCase_actionPerformed(ActionEvent e)\r
+  {\r
+    SequenceGroup sg = ap.av.getSelectionGroup();\r
+    if(sg==null)\r
+      return;\r
+\r
+    for(int g=0; g<sg.getSize(); g++)\r
+    {\r
+      sg.getSequenceAt(g).changeCase(false, sg.getStartRes(), sg.getEndRes()+1);\r
+    }\r
+    ap.repaint();\r
+  }\r
+\r
+  public void toggle_actionPerformed(ActionEvent e)\r
+  {\r
+    SequenceGroup sg = ap.av.getSelectionGroup();\r
+    if (sg == null)\r
+      return;\r
+\r
+    for (int g = 0; g < sg.getSize(); g++)\r
+    {\r
+      sg.getSequenceAt(g).toggleCase(sg.getStartRes(), sg.getEndRes() + 1);\r
+    }\r
+\r
+    ap.repaint();\r
+  }\r
+\r
 }\r