JAL-966 @mungo TODO complete: List rather than bare int array
[jalview.git] / src / jalview / appletgui / APopupMenu.java
index 5e72242..bb290d4 100644 (file)
  */
 package jalview.appletgui;
 
-import java.util.*;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import jalview.analysis.*;
-import jalview.commands.*;
-import jalview.datamodel.*;
-import jalview.schemes.*;
-import jalview.util.MessageManager;
-import jalview.util.UrlLink;
+import jalview.analysis.AAFrequency;
+import jalview.analysis.Conservation;
+import jalview.commands.ChangeCaseCommand;
+import jalview.commands.EditCommand;
+import jalview.commands.EditCommand.Action;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
 import jalview.io.AppletFormatAdapter;
 import jalview.io.SequenceAnnotationReport;
+import jalview.schemes.Blosum62ColourScheme;
+import jalview.schemes.BuriedColourScheme;
+import jalview.schemes.ClustalxColourScheme;
+import jalview.schemes.HelixColourScheme;
+import jalview.schemes.HydrophobicColourScheme;
+import jalview.schemes.NucleotideColourScheme;
+import jalview.schemes.PIDColourScheme;
+import jalview.schemes.ResidueProperties;
+import jalview.schemes.StrandColourScheme;
+import jalview.schemes.TaylorColourScheme;
+import jalview.schemes.TurnColourScheme;
+import jalview.schemes.ZappoColourScheme;
+import jalview.util.MessageManager;
+import jalview.util.UrlLink;
+
+import java.awt.CheckboxMenuItem;
+import java.awt.Frame;
+import java.awt.Menu;
+import java.awt.MenuItem;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.List;
+import java.util.Vector;
 
 public class APopupMenu extends java.awt.PopupMenu implements
         ActionListener, ItemListener
@@ -128,6 +153,8 @@ public class APopupMenu extends java.awt.PopupMenu implements
   MenuItem selSeqDetails = new MenuItem(
           MessageManager.getString("label.sequence_details") + "...");
 
+  MenuItem makeReferenceSeq = new MenuItem();
+  
   Sequence seq;
 
   MenuItem revealAll = new MenuItem();
@@ -323,6 +350,17 @@ public class APopupMenu extends java.awt.PopupMenu implements
     if (seq != null)
     {
       seqMenu.setLabel(seq.getName());
+      if (seq == ap.av.getAlignment().getSeqrep())
+      {
+        makeReferenceSeq.setLabel(MessageManager
+                .getString("action.unmark_as_reference"));// Unmark
+                                                          // representative");
+      }
+      else
+      {
+        makeReferenceSeq.setLabel(MessageManager
+                .getString("action.set_as_reference")); // );
+      }
       repGroup.setLabel(MessageManager.formatMessage(
               "label.represent_group_with", new String[]
               { seq.getName() }));
@@ -491,6 +529,10 @@ public class APopupMenu extends java.awt.PopupMenu implements
     {
       editName();
     }
+    else if (source == makeReferenceSeq)
+    {
+      makeReferenceSeq_actionPerformed();
+    }
     else if (source == sequenceDetails)
     {
       showSequenceDetails();
@@ -549,7 +591,9 @@ public class APopupMenu extends java.awt.PopupMenu implements
       if (sg != null)
       {
         if (seq == null)
+        {
           seq = (Sequence) sg.getSequenceAt(0);
+        }
 
         EditNameDialog dialog = new EditNameDialog(seq.getSequenceAsString(
                 sg.getStartRes(), sg.getEndRes() + 1), null,
@@ -560,7 +604,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
         if (dialog.accept)
         {
           EditCommand editCommand = new EditCommand(MessageManager.getString("label.edit_sequences"),
-                  EditCommand.REPLACE, dialog.getName().replace(' ',
+                  Action.REPLACE, dialog.getName().replace(' ',
                           ap.av.getGapCharacter()),
                   sg.getSequencesAsArray(ap.av.getHiddenRepSequences()),
                   sg.getStartRes(), sg.getEndRes() + 1,
@@ -576,10 +620,9 @@ public class APopupMenu extends java.awt.PopupMenu implements
     else if (source == toUpper || source == toLower || source == toggleCase)
     {
       SequenceGroup sg = ap.av.getSelectionGroup();
-      Vector regions = new Vector();
       if (sg != null)
       {
-        int[][] startEnd = ap.av.getVisibleRegionBoundaries(
+        List<int[]> startEnd = ap.av.getVisibleRegionBoundaries(
                 sg.getStartRes(), sg.getEndRes() + 1);
 
         String description;
@@ -672,8 +715,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
     // TODO consider using getSequenceSelection instead here
 
     cap.setText(new jalview.io.AppletFormatAdapter().formatSequences(
-            e.getActionCommand(), 
-            ap.av.showJVSuffix, ap.av, true));
+            e.getActionCommand(), ap.av.getShowJVSuffix(), ap.av, true));
 
   }
 
@@ -742,11 +784,15 @@ public class APopupMenu extends java.awt.PopupMenu implements
       PDBEntry entry = (PDBEntry) seq.getPDBId().firstElement();
 
       if (ap.av.applet.jmolAvailable)
+      {
         new jalview.appletgui.AppletJmol(entry, new Sequence[]
         { seq }, null, ap, AppletFormatAdapter.URL);
+      }
       else
+      {
         new MCview.AppletPDBViewer(entry, new Sequence[]
         { seq }, null, ap, AppletFormatAdapter.URL);
+      }
 
     }
     else
@@ -879,6 +925,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
     toLower.addActionListener(this);
     editMenu.add(toggleCase);
     seqMenu.add(sequenceName);
+    seqMenu.add(makeReferenceSeq);
     // seqMenu.add(sequenceDetails);
 
     if (!ap.av.applet.useXtrnalSviewer)
@@ -898,6 +945,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
     repGroup.addActionListener(this);
     revealAll.addActionListener(this);
     revealSeq.addActionListener(this);
+    makeReferenceSeq.addActionListener(this);
   }
 
   void refresh()
@@ -975,7 +1023,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
       int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup()
               .getName());
 
-      sg.cs.setThreshold(threshold, ap.av.getIgnoreGapsConsensus());
+      sg.cs.setThreshold(threshold, ap.av.isIgnoreGapsConsensus());
 
       SliderPanel.showPIDSlider();
 
@@ -983,7 +1031,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
     else
     // remove PIDColouring
     {
-      sg.cs.setThreshold(0, ap.av.getIgnoreGapsConsensus());
+      sg.cs.setThreshold(0, ap.av.isIgnoreGapsConsensus());
     }
 
     refresh();
@@ -1087,6 +1135,28 @@ public class APopupMenu extends java.awt.PopupMenu implements
     getGroup().setDisplayText(showText.getState());
     refresh();
   }
+  public void makeReferenceSeq_actionPerformed()
+  {
+    if (!ap.av.getAlignment().hasSeqrep())
+    {
+      // initialise the display flags so the user sees something happen
+      ap.av.setDisplayReferenceSeq(true);
+      ap.av.setColourByReferenceSeq(true);
+      ap.av.getAlignment().setSeqrep(seq);
+    }
+    else
+    {
+      if (ap.av.getAlignment().getSeqrep() == seq)
+      {
+        ap.av.getAlignment().setSeqrep(null);
+      }
+      else
+      {
+        ap.av.getAlignment().setSeqrep(seq);
+      }
+    }
+    refresh();
+  }
 
   public void showNonconserved_itemStateChanged()
   {