From 7f93804f766c054832f87406d9c72c87cb5f3050 Mon Sep 17 00:00:00 2001 From: jprocter Date: Wed, 12 Nov 2008 15:20:09 +0000 Subject: [PATCH] automatic scrolling option added to view --- src/jalview/appletgui/AlignFrame.java | 15 +++++++++++- src/jalview/appletgui/AlignViewport.java | 6 ++++- src/jalview/appletgui/AlignmentPanel.java | 37 +++++++++++++++++++++++------ src/jalview/appletgui/SeqPanel.java | 4 ++++ 4 files changed, 53 insertions(+), 9 deletions(-) diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 3e214b8..3280815 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -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); diff --git a/src/jalview/appletgui/AlignViewport.java b/src/jalview/appletgui/AlignViewport.java index b39aaeb..9512c5a 100755 --- a/src/jalview/appletgui/AlignViewport.java +++ b/src/jalview/appletgui/AlignViewport.java @@ -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; + } } diff --git a/src/jalview/appletgui/AlignmentPanel.java b/src/jalview/appletgui/AlignmentPanel.java index c2bdaf0..7e42d34 100755 --- a/src/jalview/appletgui/AlignmentPanel.java +++ b/src/jalview/appletgui/AlignmentPanel.java @@ -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) diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index bf392e9..c5352f5 100755 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -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) -- 1.7.10.2