apply version 2.7 copyright
[jalview.git] / src / jalview / appletgui / APopupMenu.java
index eab52f2..7e17cc5 100755 (executable)
@@ -1,20 +1,19 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
- * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
  * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This file is part of Jalview.
  * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
  */
 package jalview.appletgui;
 
@@ -113,6 +112,11 @@ public class APopupMenu extends java.awt.PopupMenu implements
 
   MenuItem revealAll = new MenuItem();
 
+  MenuItem revealSeq = new MenuItem();
+  /**
+   * index of sequence to be revealed
+   */
+  int revealSeq_index=-1;
   Menu menu1 = new Menu();
 
   public APopupMenu(AlignmentPanel apanel, final Sequence seq, Vector links)
@@ -148,11 +152,11 @@ public class APopupMenu extends java.awt.PopupMenu implements
 
     if (sg != null && sg.getSize() > 0)
     {
-      editGroupName.setLabel(sg.getName());
+      editGroupName.setLabel("Name: "+sg.getName());
       showText.setState(sg.getDisplayText());
       showColourText.setState(sg.getColourText());
       showBoxes.setState(sg.getDisplayBoxes());
-      displayNonconserved.setState(sg.getShowunconserved());
+      displayNonconserved.setState(sg.getShowNonconserved());
       if (!ap.av.alignment.getGroups().contains(sg))
       {
         groupMenu.remove(unGroupMenuItem);
@@ -165,7 +169,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
       remove(groupMenu);
     }
 
-    if (links != null && links.size() > 0)
+    if (seq!=null && links != null && links.size() > 0)
     {
       Menu linkMenu = new Menu("Link");
       String link;
@@ -181,13 +185,13 @@ public class APopupMenu extends java.awt.PopupMenu implements
         final String target = urlLink.getTarget(); // link.substring(0,
         // link.indexOf("|"));
         final String label = urlLink.getLabel();
-        if (urlLink.isDynamic())
+        if (seq!=null && urlLink.isDynamic())
         {
 
           // collect matching db-refs
-          DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs(seq
-                  .getDBRef(), new String[]
-          { target });
+          DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs(
+                  seq.getDBRef(), new String[]
+                  { target });
           // collect id string too
           String id = seq.getName();
           String descr = seq.getDescription();
@@ -285,6 +289,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
         }
       }
     }
+    // TODO: add group link menu entry here
     if (seq != null)
     {
       seqMenu.setLabel(seq.getName());
@@ -298,6 +303,17 @@ public class APopupMenu extends java.awt.PopupMenu implements
     if (!ap.av.hasHiddenRows)
     {
       remove(revealAll);
+      remove(revealSeq);
+    } else {
+      final int index = ap.av.alignment.findIndex(seq);
+
+      if (ap.av.adjustForHiddenSeqs(index)
+              - ap.av.adjustForHiddenSeqs(index - 1) > 1)
+      {
+        revealSeq_index=index;
+      } else {
+        remove(revealSeq);
+      }
     }
   }
 
@@ -446,6 +462,10 @@ public class APopupMenu extends java.awt.PopupMenu implements
     {
       hideSequences(true);
     }
+    else if (source == revealSeq)
+    {
+      ap.av.showSequence(revealSeq_index);
+    }
     else if (source == revealAll)
     {
       ap.av.showAllHiddenSeqs();
@@ -492,8 +512,8 @@ public class APopupMenu extends java.awt.PopupMenu implements
         {
           EditCommand editCommand = new EditCommand("Edit Sequences",
                   EditCommand.REPLACE, dialog.getName().replace(' ',
-                          ap.av.getGapCharacter()), sg
-                          .getSequencesAsArray(ap.av.hiddenRepSequences),
+                          ap.av.getGapCharacter()),
+                  sg.getSequencesAsArray(ap.av.hiddenRepSequences),
                   sg.getStartRes(), sg.getEndRes() + 1, ap.av.alignment);
 
           ap.alignFrame.addHistoryItem(editCommand);
@@ -586,18 +606,28 @@ public class APopupMenu extends java.awt.PopupMenu implements
         return;
       }
 
-      int gSize = sg.getSize();
-      SequenceI[] seqs = new SequenceI[gSize];
-      SequenceFeature[] features = new SequenceFeature[gSize];
+      int rsize = 0, gSize = sg.getSize();
+      SequenceI[] rseqs, seqs = new SequenceI[gSize];
+      SequenceFeature[] tfeatures, features = new SequenceFeature[gSize];
 
       for (int i = 0; i < gSize; i++)
       {
-        seqs[i] = sg.getSequenceAt(i);
         int start = sg.getSequenceAt(i).findPosition(sg.getStartRes());
         int end = sg.findEndRes(sg.getSequenceAt(i));
-        features[i] = new SequenceFeature(null, null, null, start, end,
-                "Jalview");
+        if (start <= end)
+        {
+          seqs[rsize] = sg.getSequenceAt(i);
+          features[rsize] = new SequenceFeature(null, null, null, start,
+                  end, "Jalview");
+          rsize++;
+        }
       }
+      rseqs = new SequenceI[rsize];
+      tfeatures = new SequenceFeature[rsize];
+      System.arraycopy(seqs, 0, rseqs, 0, rsize);
+      System.arraycopy(features, 0, tfeatures, 0, rsize);
+      features = tfeatures;
+      seqs = rseqs;
 
       if (ap.seqPanel.seqCanvas.getFeatureRenderer().amendFeatures(seqs,
               features, true, ap))
@@ -620,19 +650,20 @@ public class APopupMenu extends java.awt.PopupMenu implements
 
     Frame frame = new Frame();
     frame.add(cap);
-    jalview.bin.JalviewLite.addFrame(frame, "Selection output - "
-            + e.getActionCommand(), 600, 500);
+    jalview.bin.JalviewLite.addFrame(frame,
+            "Selection output - " + e.getActionCommand(), 600, 500);
 
-    cap.setText(new jalview.io.AppletFormatAdapter().formatSequences(e
-            .getActionCommand(), new Alignment(ap.av
-            .getSelectionAsNewSequence()), ap.av.showJVSuffix));
+    cap.setText(new jalview.io.AppletFormatAdapter().formatSequences(
+            e.getActionCommand(),
+            new Alignment(ap.av.getSelectionAsNewSequence()),
+            ap.av.showJVSuffix));
 
   }
 
   void editName()
   {
-    EditNameDialog dialog = new EditNameDialog(seq.getName(), seq
-            .getDescription(), "       Sequence Name",
+    EditNameDialog dialog = new EditNameDialog(seq.getName(),
+            seq.getDescription(), "       Sequence Name",
             "Sequence Description", ap.alignFrame,
             "Edit Sequence Name / Description", 500, 100, true);
 
@@ -665,7 +696,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
       cap.setPDBImport(seq);
       Frame frame = new Frame();
       frame.add(cap);
-      jalview.bin.JalviewLite.addFrame(frame, "Paste PDB file ", 400, 300);
+      jalview.bin.JalviewLite.addFrame(frame, "Paste PDB file for sequence "+seq.getName(), 400, 300);
     }
   }
 
@@ -701,10 +732,12 @@ public class APopupMenu extends java.awt.PopupMenu implements
     hideSeqs.setLabel("Hide Sequences");
     repGroup.setLabel("Represent Group with");
     revealAll.setLabel("Reveal All");
+    revealSeq.setLabel("Reveal Sequences");
     menu1.setLabel("Group");
     add(groupMenu);
     this.add(seqMenu);
     this.add(hideSeqs);
+    this.add(revealSeq);
     this.add(revealAll);
     groupMenu.add(editGroupName);
     groupMenu.add(editMenu);
@@ -772,7 +805,10 @@ public class APopupMenu extends java.awt.PopupMenu implements
     toLower.addActionListener(this);
     editMenu.add(toggleCase);
     seqMenu.add(sequenceName);
-    seqMenu.add(pdb);
+    if (!ap.av.applet.useXtrnalSviewer)
+    {
+      seqMenu.add(pdb);
+    }
     seqMenu.add(repGroup);
     menu1.add(unGroupMenuItem);
     menu1.add(colourMenu);
@@ -785,6 +821,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
     hideSeqs.addActionListener(this);
     repGroup.addActionListener(this);
     revealAll.addActionListener(this);
+    revealSeq.addActionListener(this);
   }
 
   void refresh()
@@ -795,9 +832,9 @@ public class APopupMenu extends java.awt.PopupMenu implements
   protected void clustalColour_actionPerformed()
   {
     SequenceGroup sg = getGroup();
-    sg.cs = new ClustalxColourScheme(sg
-            .getSequences(ap.av.hiddenRepSequences), ap.av.alignment
-            .getWidth());
+    sg.cs = new ClustalxColourScheme(
+            sg.getSequences(ap.av.hiddenRepSequences),
+            ap.av.alignment.getWidth());
     refresh();
   }
 
@@ -859,9 +896,9 @@ public class APopupMenu extends java.awt.PopupMenu implements
 
     if (abovePIDColour.getState())
     {
-      sg.cs.setConsensus(AAFrequency.calculate(sg
-              .getSequences(ap.av.hiddenRepSequences), 0, ap.av.alignment
-              .getWidth()));
+      sg.cs.setConsensus(AAFrequency.calculate(
+              sg.getSequences(ap.av.hiddenRepSequences), 0,
+              ap.av.alignment.getWidth()));
       int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup()
               .getName());
 
@@ -889,9 +926,9 @@ public class APopupMenu extends java.awt.PopupMenu implements
   {
     SequenceGroup sg = getGroup();
     sg.cs = new PIDColourScheme();
-    sg.cs.setConsensus(AAFrequency.calculate(sg
-            .getSequences(ap.av.hiddenRepSequences), 0, ap.av.alignment
-            .getWidth()));
+    sg.cs.setConsensus(AAFrequency.calculate(
+            sg.getSequences(ap.av.hiddenRepSequences), 0,
+            ap.av.alignment.getWidth()));
     refresh();
   }
 
@@ -901,9 +938,9 @@ public class APopupMenu extends java.awt.PopupMenu implements
 
     sg.cs = new Blosum62ColourScheme();
 
-    sg.cs.setConsensus(AAFrequency.calculate(sg
-            .getSequences(ap.av.hiddenRepSequences), 0, ap.av.alignment
-            .getWidth()));
+    sg.cs.setConsensus(AAFrequency.calculate(
+            sg.getSequences(ap.av.hiddenRepSequences), 0,
+            ap.av.alignment.getWidth()));
 
     refresh();
   }
@@ -926,8 +963,8 @@ public class APopupMenu extends java.awt.PopupMenu implements
     {
 
       Conservation c = new Conservation("Group",
-              ResidueProperties.propHash, 3, sg
-                      .getSequences(ap.av.hiddenRepSequences), 0,
+              ResidueProperties.propHash, 3,
+              sg.getSequences(ap.av.hiddenRepSequences), 0,
               ap.av.alignment.getWidth());
 
       c.calculate();
@@ -982,7 +1019,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
 
   public void showNonconserved_itemStateChanged()
   {
-    getGroup().setShowunconserved(this.displayNonconserved.getState());
+    getGroup().setShowNonconserved(this.displayNonconserved.getState());
     refresh();
   }
 
@@ -1023,6 +1060,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
     }
 
     ap.av.hideSequence(hseqs);
+    ap.av.sendSelection();
   }
 
 }