automatic scrolling option added to view
authorjprocter <Jim Procter>
Wed, 12 Nov 2008 15:20:09 +0000 (15:20 +0000)
committerjprocter <Jim Procter>
Wed, 12 Nov 2008 15:20:09 +0000 (15:20 +0000)
src/jalview/appletgui/AlignFrame.java
src/jalview/appletgui/AlignViewport.java
src/jalview/appletgui/AlignmentPanel.java
src/jalview/appletgui/SeqPanel.java

index 3e214b8..3280815 100755 (executable)
@@ -542,11 +542,20 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     else if (evt.getSource() == this.centreColumnLabelFlag)
     {
       centreColumnLabelFlag_stateChanged();
+    } else if (evt.getSource() == this.followMouseOverFlag)
+    {
+      mouseOverFlag_stateChanged();
     }
 
     alignPanel.paintAlignment(true);
   }
 
+  private void mouseOverFlag_stateChanged()
+  {
+    viewport.followHighlight = followMouseOverFlag.getState();
+    // TODO: could kick the scrollTo mechanism to reset view for current searchresults.
+  }
+
   private void centreColumnLabelFlag_stateChanged()
   {
     viewport.centreColumnLabels = centreColumnLabelFlag.getState();
@@ -2565,6 +2574,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   CheckboxMenuItem centreColumnLabelFlag = new CheckboxMenuItem();
 
+  CheckboxMenuItem followMouseOverFlag = new CheckboxMenuItem();
+
   private void jbInit() throws Exception
   {
 
@@ -2732,7 +2743,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     inputText.addActionListener(this);
     centreColumnLabelFlag.setLabel("Centre column labels");
     centreColumnLabelFlag.addItemListener(this);
-
+    followMouseOverFlag.setLabel("Automatic Scrolling");
+    followMouseOverFlag.addItemListener(this);
     helpMenu.setLabel("Help");
     documentation.setLabel("Documentation");
     documentation.addActionListener(this);
@@ -2809,6 +2821,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     viewMenu.add(menu1);
     viewMenu.add(menu2);
     viewMenu.addSeparator();
+    viewMenu.add(followMouseOverFlag);
     viewMenu.add(annotationPanelMenuItem);
     viewMenu.addSeparator();
     viewMenu.add(sequenceFeatures);
index b39aaeb..9512c5a 100755 (executable)
@@ -1476,6 +1476,7 @@ public class AlignViewport
 
   boolean centreColumnLabels;
 
+  
   public boolean getCentreColumnLabels()
   {
     return centreColumnLabels;
@@ -1497,5 +1498,8 @@ public class AlignViewport
       }
     }
   }
-
+  public boolean followHighlight=false;
+  public boolean getFollowHighlight() {
+    return followHighlight;
+  }
 }
index c2bdaf0..7e42d34 100755 (executable)
@@ -228,15 +228,38 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
   public void highlightSearchResults(SearchResults results)
   {
     seqPanel.seqCanvas.highlightSearchResults(results);
-
+  }
+  /**
+   * scroll the view to show the position of the highlighted
+   * region in results (if any)
+   * @param results
+   */
+  public void scrollToPosition(SearchResults results)
+  {
     // do we need to scroll the panel?
-    if (results != null)
+    if (results != null && results.getSize()>0)
     {
-      SequenceI seq = results.getResultSequence(0);
-      int seqIndex = av.alignment.findIndex(seq);
-      int start = seq.findIndex(results.getResultStart(0)) - 1;
-      int end = seq.findIndex(results.getResultEnd(0)) - 1;
-
+      int seqIndex = av.alignment.findIndex(results);
+      if (seqIndex==-1)
+      {
+        return;
+      }
+      SequenceI seq = av.alignment.getSequenceAt(seqIndex);
+      int [] r = results.getResults(seq, seq.getStart(), seq.getEnd());
+      if (r==null)
+      {
+        return;
+      }
+      int start = r[0];
+      int end = r[1];
+      if (start<0)
+      {
+        return;
+      }
+      if (end==seq.getEnd())
+      {
+        return;
+      }
       if (!av.wrapAlignment)
       {
         if ((av.getStartRes() > end)
index bf392e9..c5352f5 100755 (executable)
@@ -640,6 +640,10 @@ public class SeqPanel extends Panel implements MouseMotionListener,
   public void highlightSequence(SearchResults results)
   {
     seqCanvas.highlightSearchResults(results);
+    if (av.followHighlight)
+    { 
+      ap.scrollToPosition(results);
+    }
   }
 
   public void updateColours(SequenceI seq, int index)