viewport flag to indicate when structure view needs updating
authorJim Procter <jprocter@issues.jalview.org>
Tue, 16 Oct 2018 15:34:53 +0000 (16:34 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Tue, 16 Oct 2018 15:34:53 +0000 (16:34 +0100)
JAL-3127 fix regression on JAL-868 due to JAL-2773

src/jalview/api/AlignViewportI.java
src/jalview/gui/AlignmentPanel.java
src/jalview/gui/TreeCanvas.java
src/jalview/viewmodel/AlignmentViewport.java

index 931eba6..5180e20 100644 (file)
@@ -490,4 +490,24 @@ public interface AlignViewportI extends ViewStyleI
   public abstract TreeModel getCurrentTree();
 
   public abstract void setCurrentTree(TreeModel tree);
+
+  /**
+   * @param update
+   *          - set the flag for updating structures on next repaint
+   */
+  void setUpdateStructures(boolean update);
+
+  /**
+   *
+   * @return true if structure views will be updated on next refresh
+   */
+  boolean isUpdateStructures();
+
+  /**
+   * check if structure views need to be updated, and clear the flag afterwards.
+   * 
+   * @return if an update is needed
+   */
+  boolean needToUpdateStructureViews();
+
 }
index 60ef480..86e7489 100644 (file)
@@ -536,7 +536,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
     addNotify();
     // TODO: many places call this method and also paintAlignment with various
     // different settings. this means multiple redraws are triggered...
-    paintAlignment(true, false);
+    paintAlignment(true, av.needToUpdateStructureViews());
   }
 
   /**
index 278e682..dbb7e2b 100755 (executable)
@@ -1065,15 +1065,16 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
             }
           }
         }
+        // indicate that associated structure views will need an update
+        aps[a].av.setUpdateStructures(true);
       }
     }
 
-    // notify the panel(s) to redo any group specific stuff.
+    // notify the panel(s) to redo any group specific stuff
+    // also updates structure views if necessary
     for (int a = 0; a < aps.length; a++)
     {
       aps[a].updateAnnotation();
-      // TODO: JAL-868 - need to ensure view colour change message is broadcast
-      // to any Jmols listening in
       final AlignViewportI codingComplement = aps[a].av
               .getCodingComplement();
       if (codingComplement != null)
index 1366ada..c4923cf 100644 (file)
@@ -2954,4 +2954,32 @@ public abstract class AlignmentViewport
   {
     return currentTree;
   }
+
+  /**
+   * flag set to indicate if structure views might be out of sync with sequences
+   * in the alignment
+   */
+
+  private boolean needToUpdateStructureViews = false;
+
+  @Override
+  public boolean isUpdateStructures()
+  {
+    return needToUpdateStructureViews;
+  }
+
+  @Override
+  public void setUpdateStructures(boolean update)
+  {
+    needToUpdateStructureViews = update;
+  }
+
+  @Override
+  public boolean needToUpdateStructureViews()
+  {
+    boolean update = needToUpdateStructureViews;
+    needToUpdateStructureViews = false;
+    return update;
+  }
+
 }