only make a link menu when there are links
[jalview.git] / src / jalview / gui / PopupMenu.java
index a7e853a..e2865a8 100755 (executable)
@@ -94,6 +94,8 @@ public class PopupMenu extends JPopupMenu
 
   JCheckBoxMenuItem showColourText = new JCheckBoxMenuItem();
 
+  JCheckBoxMenuItem displayNonconserved = new JCheckBoxMenuItem();
+
   JMenu editMenu = new JMenu();
 
   JMenuItem cut = new JMenuItem();
@@ -378,7 +380,7 @@ public class PopupMenu extends JPopupMenu
       {
         conservationMenuItem.setSelected(true);
       }
-
+      displayNonconserved.setSelected(sg.getShowunconserved());
       showText.setSelected(sg.getDisplayText());
       showColourText.setSelected(sg.getColourText());
       showBoxes.setSelected(sg.getDisplayBoxes());
@@ -403,7 +405,7 @@ public class PopupMenu extends JPopupMenu
     if (links != null && links.size() > 0)
     {
       JMenu linkMenu = new JMenu("Link");
-
+      Vector linkset = new Vector();
       for (int i = 0; i < links.size(); i++)
       {
         String link = links.elementAt(i).toString();
@@ -433,6 +435,12 @@ public class PopupMenu extends JPopupMenu
           { urlLink.getTarget() });
           // collect id string too
           String id = seq.getName();
+          String descr = seq.getDescription();
+          if (descr!=null && descr.length()<1)
+          {
+            descr = null;
+          }
+
           if (dbr != null)
           {
             for (int r = 0; r < dbr.length; r++)
@@ -450,7 +458,11 @@ public class PopupMenu extends JPopupMenu
               {
                 for (int u = 0; u < urls.length; u += 2)
                 {
-                  addshowLink(linkMenu, label + "|" + urls[u], urls[u + 1]);
+                  if (!linkset.contains(urls[u]+"|"+urls[u+1]))
+                  {
+                    linkset.addElement(urls[u]+"|"+urls[u+1]);
+                    addshowLink(linkMenu, label + "|" + urls[u], urls[u + 1]);
+                  }
                 }
               }
             }
@@ -463,15 +475,40 @@ public class PopupMenu extends JPopupMenu
             {
               for (int u = 0; u < urls.length; u += 2)
               {
-                addshowLink(linkMenu, label, urls[u + 1]);
+                if (!linkset.contains(urls[u]+"|"+urls[u+1]))
+                {
+                  linkset.addElement(urls[u]+"|"+urls[u+1]);
+                  addshowLink(linkMenu, label, urls[u + 1]);
+                }
+              }
+            }
+          }
+          // Create urls from description but only for URL links which are regex links
+          if (descr != null && urlLink.getRegexReplace()!=null)
+          {
+            // create link for this URL from description where regex matches
+            String[] urls = urlLink.makeUrls(descr, true);
+            if (urls != null)
+            {
+              for (int u = 0; u < urls.length; u += 2)
+              {
+                if (!linkset.contains(urls[u]+"|"+urls[u+1]))
+                {
+                  linkset.addElement(urls[u]+"|"+urls[u+1]);
+                  addshowLink(linkMenu, label, urls[u + 1]);
+                }
               }
             }
           }
         }
         else
         {
-          // Add a non-dynamic link
-          addshowLink(linkMenu, label, urlLink.getUrl_prefix());
+          if (!linkset.contains(label+"|"+urlLink.getUrl_prefix()))
+          {
+            linkset.addElement(label+"|"+urlLink.getUrl_prefix());
+            // Add a non-dynamic link
+            addshowLink(linkMenu, label, urlLink.getUrl_prefix());
+          }
         }
       }
       if (sequence != null)
@@ -597,6 +634,15 @@ public class PopupMenu extends JPopupMenu
         showColourText_actionPerformed();
       }
     });
+    displayNonconserved.setText("Show Nonconserved");
+    displayNonconserved.setState(true);
+    displayNonconserved.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        showNonconserved_actionPerformed();
+      }
+    });
     editMenu.setText("Edit");
     cut.setText("Cut");
     cut.addActionListener(new ActionListener()
@@ -762,6 +808,7 @@ public class PopupMenu extends JPopupMenu
     jMenu1.add(showText);
     jMenu1.add(showColourText);
     jMenu1.add(outline);
+    jMenu1.add(displayNonconserved);
     structureMenu.add(pdbMenu);
     structureMenu.add(viewStructureMenu);
     // structureMenu.add(colStructureMenu);
@@ -882,8 +929,14 @@ public class PopupMenu extends JPopupMenu
             });
   }
 
+  protected void showNonconserved_actionPerformed()
+  {
+    getGroup().setShowunconserved(displayNonconserved.isSelected());
+    refresh();
+  }
+
   /**
-   * DOCUMENT ME!
+   * call to refresh view after settings change
    */
   void refresh()
   {
@@ -1363,6 +1416,7 @@ public class PopupMenu extends JPopupMenu
     }
 
     ap.av.hideSequence(hseqs);
+    ap.av.sendSelection();
   }
 
   public void copy_actionPerformed()
@@ -1549,8 +1603,7 @@ public class PopupMenu extends JPopupMenu
     if (ap.seqPanel.seqCanvas.getFeatureRenderer().amendFeatures(seqs,
             features, true, ap))
     {
-      ap.alignFrame.showSeqFeatures.setSelected(true);
-      ap.av.setShowSequenceFeatures(true);
+      ap.alignFrame.setShowSeqFeatures(true);
       ap.highlightSearchResults(null);
     }
   }