only make a link menu when there are links
[jalview.git] / src / jalview / gui / PopupMenu.java
index d89c776..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();
@@ -456,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]);
+                  }
                 }
               }
             }
@@ -469,29 +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]);
+                }
               }
             }
           }
-          // hard-disable construction of URLs from regexes that match the description
-          // TODO: introduce a Cache preferences option to dis/en/able URl generation from description
-//          if (descr != null)
-//          {
-//            // create link for this URL from description where regex matches
-//            String[] urls = urlLink.makeUrls(descr, false);
-//            if (urls != null)
-//            {
-//              for (int u = 0; u < urls.length; u += 2)
-//              {
-//                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)
@@ -617,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()
@@ -782,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);
@@ -902,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()
   {
@@ -1383,6 +1416,7 @@ public class PopupMenu extends JPopupMenu
     }
 
     ap.av.hideSequence(hseqs);
+    ap.av.sendSelection();
   }
 
   public void copy_actionPerformed()
@@ -1569,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);
     }
   }