Merge branch 'develop' into bug/JAL-1608createGroups
[jalview.git] / src / jalview / gui / AlignFrame.java
index cf6a901..445e967 100644 (file)
@@ -86,6 +86,7 @@ import jalview.schemes.ResidueProperties;
 import jalview.schemes.TCoffeeColourScheme;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
+import jalview.viewmodel.ViewportRanges;
 import jalview.ws.DBRefFetcher;
 import jalview.ws.DBRefFetcher.FetchFinishedListenerI;
 import jalview.ws.jws1.Discoverer;
@@ -160,6 +161,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   AlignViewport viewport;
 
+  ViewportRanges vpRanges;
+
   public AlignViewControllerI avc;
 
   List<AlignmentPanel> alignPanels = new ArrayList<AlignmentPanel>();
@@ -331,6 +334,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       progressBar = new ProgressBar(this.statusPanel, this.statusBar);
     }
 
+    vpRanges = viewport.getRanges();
     avc = new jalview.controller.AlignViewController(this, viewport,
             alignPanel);
     if (viewport.getAlignmentConservationAnnotation() == null)
@@ -640,8 +644,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                   new String[] { (viewport.cursorMode ? "on" : "off") }));
           if (viewport.cursorMode)
           {
-            alignPanel.getSeqPanel().seqCanvas.cursorX = viewport.startRes;
-            alignPanel.getSeqPanel().seqCanvas.cursorY = viewport.startSeq;
+            alignPanel.getSeqPanel().seqCanvas.cursorX = vpRanges
+                    .getStartRes();
+            alignPanel.getSeqPanel().seqCanvas.cursorY = vpRanges
+                    .getStartSeq();
           }
           alignPanel.getSeqPanel().seqCanvas.repaint();
           break;
@@ -679,8 +685,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           }
           else
           {
-            alignPanel.setScrollValues(viewport.startRes, viewport.startSeq
-                    - viewport.endSeq + viewport.startSeq);
+            alignPanel.setScrollValues(vpRanges.getStartRes(),
+                    2 * vpRanges.getStartSeq() - vpRanges.getEndSeq());
           }
           break;
         case KeyEvent.VK_PAGE_DOWN:
@@ -690,8 +696,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           }
           else
           {
-            alignPanel.setScrollValues(viewport.startRes, viewport.startSeq
-                    + viewport.endSeq - viewport.startSeq);
+            alignPanel.setScrollValues(vpRanges.getStartRes(),
+                    vpRanges.getEndSeq());
           }
           break;
         }
@@ -2141,7 +2147,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       {
 
         // propagate alignment changed.
-        viewport.setEndSeq(alignment.getHeight());
+        vpRanges.setEndSeq(alignment.getHeight());
         if (annotationAdded)
         {
           // Duplicate sequence annotation in all views.
@@ -2545,7 +2551,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       {
         trimRegion = new TrimRegionCommand("Remove Left", true, seqs,
                 column, viewport.getAlignment());
-        viewport.setStartRes(0);
+        vpRanges.setStartRes(0);
       }
       else
       {
@@ -2612,13 +2618,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     // This is to maintain viewport position on first residue
     // of first sequence
     SequenceI seq = viewport.getAlignment().getSequenceAt(0);
-    int startRes = seq.findPosition(viewport.startRes);
+    int startRes = seq.findPosition(vpRanges.getStartRes());
     // ShiftList shifts;
     // viewport.getAlignment().removeGaps(shifts=new ShiftList());
     // edit.alColumnChanges=shifts.getInverse();
     // if (viewport.hasHiddenColumns)
     // viewport.getColumnSelection().compensateForEdits(shifts);
-    viewport.setStartRes(seq.findIndex(startRes) - 1);
+    vpRanges.setStartRes(seq.findIndex(startRes) - 1);
     viewport.firePropertyChange("alignment", null, viewport.getAlignment()
             .getSequences());
 
@@ -2651,12 +2657,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     // This is to maintain viewport position on first residue
     // of first sequence
     SequenceI seq = viewport.getAlignment().getSequenceAt(0);
-    int startRes = seq.findPosition(viewport.startRes);
+    int startRes = seq.findPosition(vpRanges.getStartRes());
 
     addHistoryItem(new RemoveGapsCommand("Remove Gaps", seqs, start, end,
             viewport.getAlignment()));
 
-    viewport.setStartRes(seq.findIndex(startRes) - 1);
+    vpRanges.setStartRes(seq.findIndex(startRes) - 1);
 
     viewport.firePropertyChange("alignment", null, viewport.getAlignment()
             .getSequences());
@@ -3359,7 +3365,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   protected void modifyPID_actionPerformed()
   {
     SliderPanel.setPIDSliderSource(alignPanel,
-            viewport.getViewportColourScheme(), alignPanel.getViewName());
+            viewport.getResidueShading(), alignPanel.getViewName());
     SliderPanel.showPIDSlider();
   }
 
@@ -3370,7 +3376,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   protected void modifyConservation_actionPerformed()
   {
     SliderPanel.setConservationSlider(alignPanel,
-            viewport.getViewportColourScheme(), alignPanel.getViewName());
+            viewport.getResidueShading(), alignPanel.getViewName());
     SliderPanel.showConservationSlider();
   }
 
@@ -3382,7 +3388,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   {
     modifyConservation.setEnabled(selected);
     viewport.setConservationSelected(selected);
-    viewport.getViewportColourScheme().setConservationApplied(selected);
+    viewport.getResidueShading().setConservationApplied(selected);
 
     changeColour(viewport.getGlobalColourScheme());
     if (selected)
@@ -3405,7 +3411,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     viewport.setAbovePIDThreshold(selected);
     if (!selected)
     {
-      viewport.getViewportColourScheme().setThreshold(0,
+      viewport.getResidueShading().setThreshold(0,
               viewport.isIgnoreGapsConsensus());
     }
 
@@ -4838,7 +4844,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     if (viewport.getConservationSelected())
     {
       SliderPanel.setConservationSlider(alignPanel,
-              viewport.getViewportColourScheme(), alignPanel.getViewName());
+              viewport.getResidueShading(), alignPanel.getViewName());
     }
     else
     {
@@ -4847,7 +4853,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     if (viewport.getAbovePIDThreshold())
     {
       SliderPanel.setPIDSliderSource(alignPanel,
-              viewport.getViewportColourScheme(), alignPanel.getViewName());
+              viewport.getResidueShading(), alignPanel.getViewName());
     }
     else
     {
@@ -5699,6 +5705,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     ColourMenuHelper.setColourSelected(colourMenu, schemeName);
   }
+
+  /**
+   * Disable inapplicable items in the Select menu when it is clicked
+   */
+  @Override
+  protected void configureSelectMenu()
+  {
+    createGroup.setEnabled(false);
+    unGroup.setEnabled(false);
+    SequenceGroup sg = viewport.getSelectionGroup();
+    if (sg != null)
+    {
+      List<SequenceGroup> groups = viewport.getAlignment().getGroups();
+      createGroup.setEnabled(groups == null || !groups.contains(sg));
+      unGroup.setEnabled(groups != null && groups.contains(sg));
+    }
+  }
 }
 
 class PrintThread extends Thread