JAL-2034 disable overview updates when extent of a transient selection group is changed
authorJim Procter <jprocter@issues.jalview.org>
Fri, 25 Mar 2016 15:21:53 +0000 (15:21 +0000)
committerJim Procter <jprocter@issues.jalview.org>
Fri, 25 Mar 2016 15:21:53 +0000 (15:21 +0000)
src/jalview/appletgui/SeqPanel.java
src/jalview/gui/SeqPanel.java

index d88add1..a8397ba 100644 (file)
@@ -927,6 +927,13 @@ public class SeqPanel extends Panel implements MouseMotionListener,
    */
   private boolean needOverviewUpdate; // TODO: refactor to avcontroller
 
+  /**
+   * set if av.getSelectionGroup() refers to a group that is defined on the
+   * alignment view, rather than a transient selection
+   */
+  private boolean editingDefinedGroup = false; // TODO: refactor to avcontroller
+                                               // or viewModel
+
   @Override
   public void mouseDragged(MouseEvent evt)
   {
@@ -1429,10 +1436,12 @@ public class SeqPanel extends Panel implements MouseMotionListener,
               && res < stretchGroup.getEndRes())
       {
         av.setSelectionGroup(stretchGroup);
+        editingDefinedGroup = true;
       }
       else
       {
         stretchGroup = null;
+        editingDefinedGroup = false;
       }
     }
 
@@ -1452,6 +1461,7 @@ public class SeqPanel extends Panel implements MouseMotionListener,
                   && allGroups[i].getEndRes() >= res)
           {
             stretchGroup = allGroups[i];
+            editingDefinedGroup = true;
             break;
           }
         }
@@ -1507,6 +1517,7 @@ public class SeqPanel extends Panel implements MouseMotionListener,
       sg.setEndRes(res);
       sg.addSequence(sequence, false);
       av.setSelectionGroup(sg);
+      editingDefinedGroup = false;
       stretchGroup = sg;
 
       if (av.getConservationSelected())
@@ -1529,9 +1540,10 @@ public class SeqPanel extends Panel implements MouseMotionListener,
     {
       return;
     }
-
-    stretchGroup.recalcConservation(); // always do this - annotation has own
-                                       // state
+    // always do this - annotation has own state
+    // but defer colourscheme update until hidden sequences are passed in
+    boolean vischange = stretchGroup.recalcConservation(true);
+    needOverviewUpdate |= vischange && editingDefinedGroup;
     if (stretchGroup.cs != null)
     {
       stretchGroup.cs.alignmentChanged(stretchGroup,
@@ -1550,6 +1562,8 @@ public class SeqPanel extends Panel implements MouseMotionListener,
     }
     PaintRefresher.Refresh(ap, av.getSequenceSetId());
     ap.paintAlignment(needOverviewUpdate);
+    needOverviewUpdate =false;
+    editingDefinedGroup = false;
     changeEndRes = false;
     changeStartRes = false;
     stretchGroup = null;
@@ -1604,6 +1618,7 @@ public class SeqPanel extends Panel implements MouseMotionListener,
       if (res > (stretchGroup.getStartRes() - 1))
       {
         stretchGroup.setEndRes(res);
+        needOverviewUpdate |= editingDefinedGroup;
       }
     }
     else if (changeStartRes)
@@ -1611,6 +1626,7 @@ public class SeqPanel extends Panel implements MouseMotionListener,
       if (res < (stretchGroup.getEndRes() + 1))
       {
         stretchGroup.setStartRes(res);
+        needOverviewUpdate |= editingDefinedGroup;
       }
     }
 
@@ -1644,6 +1660,7 @@ public class SeqPanel extends Panel implements MouseMotionListener,
       if (stretchGroup.getSequences(null).contains(nextSeq))
       {
         stretchGroup.deleteSequence(seq, false);
+        needOverviewUpdate |= editingDefinedGroup;
       }
       else
       {
@@ -1653,6 +1670,7 @@ public class SeqPanel extends Panel implements MouseMotionListener,
         }
 
         stretchGroup.addSequence(nextSeq, false);
+        needOverviewUpdate |= editingDefinedGroup;
       }
     }
 
index 362e7f9..903f868 100644 (file)
@@ -830,6 +830,12 @@ public class SeqPanel extends JPanel implements MouseListener,
   private boolean needOverviewUpdate = false; // TODO: refactor to avcontroller
 
   /**
+   * set if av.getSelectionGroup() refers to a group that is defined on the
+   * alignment view, rather than a transient selection
+   */
+  private boolean editingDefinedGroup = false;  // TODO: refactor to avcontroller or viewModel
+
+  /**
    * Set status message in alignment panel
    * 
    * @param sequence
@@ -1574,10 +1580,12 @@ public class SeqPanel extends JPanel implements MouseListener,
               && (res < stretchGroup.getEndRes()))
       {
         av.setSelectionGroup(stretchGroup);
+        editingDefinedGroup = true;
       }
       else
       {
         stretchGroup = null;
+        editingDefinedGroup = false;
       }
     }
     else if (!stretchGroup.getSequences(null).contains(sequence)
@@ -1596,6 +1604,7 @@ public class SeqPanel extends JPanel implements MouseListener,
                   && (allGroups[i].getEndRes() >= res))
           {
             stretchGroup = allGroups[i];
+            editingDefinedGroup = true;
             break;
           }
         }
@@ -1645,7 +1654,7 @@ public class SeqPanel extends JPanel implements MouseListener,
       sg.setEndRes(res);
       sg.addSequence(sequence, false);
       av.setSelectionGroup(sg);
-
+      editingDefinedGroup = false;
       stretchGroup = sg;
 
       if (av.getConservationSelected())
@@ -1688,9 +1697,10 @@ public class SeqPanel extends JPanel implements MouseListener,
     {
       return;
     }
-
-    stretchGroup.recalcConservation(); // always do this - annotation has own
-                                       // state
+    // always do this - annotation has own state
+    // but defer colourscheme update until hidden sequences are passed in
+    boolean vischange = stretchGroup.recalcConservation(true);
+    needOverviewUpdate |= vischange && editingDefinedGroup;
     if (stretchGroup.cs != null)
     {
       stretchGroup.cs.alignmentChanged(stretchGroup,
@@ -1709,7 +1719,8 @@ public class SeqPanel extends JPanel implements MouseListener,
     }
     PaintRefresher.Refresh(this, av.getSequenceSetId());
     ap.paintAlignment(needOverviewUpdate);
-
+    needOverviewUpdate =false;
+    editingDefinedGroup = false;
     changeEndRes = false;
     changeStartRes = false;
     stretchGroup = null;
@@ -1763,6 +1774,7 @@ public class SeqPanel extends JPanel implements MouseListener,
       if (res > (stretchGroup.getStartRes() - 1))
       {
         stretchGroup.setEndRes(res);
+        needOverviewUpdate |= editingDefinedGroup;
       }
     }
     else if (changeStartRes)
@@ -1770,6 +1782,7 @@ public class SeqPanel extends JPanel implements MouseListener,
       if (res < (stretchGroup.getEndRes() + 1))
       {
         stretchGroup.setStartRes(res);
+        needOverviewUpdate |= editingDefinedGroup;
       }
     }
 
@@ -1803,6 +1816,7 @@ public class SeqPanel extends JPanel implements MouseListener,
       if (stretchGroup.getSequences(null).contains(nextSeq))
       {
         stretchGroup.deleteSequence(seq, false);
+        needOverviewUpdate |= editingDefinedGroup;
       }
       else
       {
@@ -1812,6 +1826,7 @@ public class SeqPanel extends JPanel implements MouseListener,
         }
 
         stretchGroup.addSequence(nextSeq, false);
+        needOverviewUpdate |= editingDefinedGroup;
       }
     }