X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignmentPanel.java;h=af7e9cde3ea9e0e512f2de7ab6178e5f93b4fd72;hb=d559b47886de6427219011e6e355320a0babd757;hp=463c6c3caf142d2902255d92528a6e67cec73510;hpb=fddf3084802b37e5cee17829e32692a4aac3e60d;p=jalview.git diff --git a/src/jalview/appletgui/AlignmentPanel.java b/src/jalview/appletgui/AlignmentPanel.java index 463c6c3..af7e9cd 100644 --- a/src/jalview/appletgui/AlignmentPanel.java +++ b/src/jalview/appletgui/AlignmentPanel.java @@ -25,7 +25,7 @@ import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; import jalview.bin.JalviewLite; import jalview.datamodel.AlignmentI; -import jalview.datamodel.SearchResults; +import jalview.datamodel.SearchResultsI; import jalview.datamodel.SequenceI; import jalview.structure.StructureSelectionManager; @@ -68,7 +68,8 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, // this value is set false when selection area being dragged boolean fastPaint = true; - public void finalize() + @Override + public void finalize() throws Throwable { alignFrame = null; av = null; @@ -80,6 +81,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, annotationPanel = null; annotationPanelHolder = null; annotationSpaceFillerHolder = null; + super.finalize(); } public AlignmentPanel(AlignFrame af, final AlignViewport av) @@ -121,6 +123,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, addComponentListener(new ComponentAdapter() { + @Override public void componentResized(ComponentEvent evt) { setScrollValues(av.getStartRes(), av.getStartSeq()); @@ -146,6 +149,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, final AlignmentPanel ap = this; av.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + @Override public void propertyChange(java.beans.PropertyChangeEvent evt) { if (evt.getPropertyName().equals("alignment")) @@ -162,15 +166,18 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, { return av; } + public SequenceRenderer getSequenceRenderer() { return seqPanel.seqCanvas.sr; } + @Override public jalview.api.FeatureRenderer getFeatureRenderer() { return seqPanel.seqCanvas.fr; } + @Override public jalview.api.FeatureRenderer cloneFeatureRenderer() { @@ -178,6 +185,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, nfr.transferSettings(seqPanel.seqCanvas.fr); return nfr; } + public void alignmentChanged() { av.alignmentChanged(this); @@ -285,7 +293,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, * Highlight the given results on the alignment. * */ - public void highlightSearchResults(SearchResults results) + public void highlightSearchResults(SearchResultsI results) { scrollToPosition(results); seqPanel.seqCanvas.highlightSearchResults(results); @@ -298,7 +306,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, * @param results * @return false if results were not found */ - public boolean scrollToPosition(SearchResults results) + public boolean scrollToPosition(SearchResultsI results) { return scrollToPosition(results, true); } @@ -312,10 +320,10 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, * - when set, the overview will be recalculated (takes longer) * @return false if results were not found */ - public boolean scrollToPosition(SearchResults results, + public boolean scrollToPosition(SearchResultsI results, boolean redrawOverview) { - return scrollToPosition(results, redrawOverview, false); + return scrollToPosition(results, 0, redrawOverview, false); } /** @@ -327,7 +335,8 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, * - when set, the overview will be recalculated (takes longer) * @return false if results were not found */ - public boolean scrollToPosition(SearchResults results, + public boolean scrollToPosition(SearchResultsI results, + int verticalOffset, boolean redrawOverview, boolean centre) { // do we need to scroll the panel? @@ -339,6 +348,10 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, { return false; } + /* + * allow for offset of target sequence (actually scroll to one above it) + */ + SequenceI seq = alignment.getSequenceAt(seqIndex); int[] r = results.getResults(seq, 0, alignment.getWidth()); if (r == null) @@ -383,6 +396,11 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, { return false; } + + /* + * allow for offset of target sequence (actually scroll to one above it) + */ + seqIndex = Math.max(0, seqIndex - verticalOffset); return scrollTo(start, end, seqIndex, false, redrawOverview); } return true; @@ -411,6 +429,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, { start = ostart; } + if (!av.getWrapAlignment()) { /* @@ -449,37 +468,37 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, // setScrollValues(start, seqIndex); // } // logic copied from jalview.gui.AlignmentPanel: - if ((startv = av.getStartRes()) >= start) - { - /* - * Scroll left to make start of search results visible - */ - setScrollValues(start - 1, seqIndex); - } - else if ((endv = av.getEndRes()) <= end) - { - /* - * Scroll right to make end of search results visible - */ - setScrollValues(startv + 1 + end - endv, seqIndex); - } - else if ((starts = av.getStartSeq()) > seqIndex) - { - /* - * Scroll up to make start of search results visible - */ - setScrollValues(av.getStartRes(), seqIndex); - } - else if ((ends = av.getEndSeq()) <= seqIndex) - { - /* - * Scroll down to make end of search results visible - */ - setScrollValues(av.getStartRes(), starts + seqIndex - ends + 1); - } + if ((startv = av.getStartRes()) >= start) + { /* - * Else results are already visible - no need to scroll + * Scroll left to make start of search results visible */ + setScrollValues(start - 1, seqIndex); + } + else if ((endv = av.getEndRes()) <= end) + { + /* + * Scroll right to make end of search results visible + */ + setScrollValues(startv + 1 + end - endv, seqIndex); + } + else if ((starts = av.getStartSeq()) > seqIndex) + { + /* + * Scroll up to make start of search results visible + */ + setScrollValues(av.getStartRes(), seqIndex); + } + else if ((ends = av.getEndSeq()) <= seqIndex) + { + /* + * Scroll down to make end of search results visible + */ + setScrollValues(av.getStartRes(), starts + seqIndex - ends + 1); + } + /* + * Else results are already visible - no need to scroll + */ } else { @@ -500,7 +519,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, if (res <= av.getStartRes() || res >= (av.getStartRes() + cwidth)) { vscroll.setValue(res / cwidth); - av.startRes = vscroll.getValue() * cwidth; + av.setStartRes(vscroll.getValue() * cwidth); } } @@ -534,6 +553,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, * automatically adjust annotation panel height for new annotation whilst * ensuring the alignment is still visible. */ + @Override public void adjustAnnotationHeight() { // TODO: display vertical annotation scrollbar if necessary @@ -612,8 +632,8 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, public void setWrapAlignment(boolean wrap) { - av.startSeq = 0; - av.startRes = 0; + av.setStartSeq(0); + av.setStartRes(0); scalePanelHolder.setVisible(!wrap); hscroll.setVisible(!wrap); @@ -766,6 +786,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, } + @Override public void adjustmentValueChanged(AdjustmentEvent evt) { int oldX = av.getStartRes(); @@ -811,8 +832,8 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, overviewPanel.setBoxPosition(); } - int scrollX = av.startRes - oldX; - int scrollY = av.startSeq - oldY; + int scrollX = av.getStartRes() - oldX; + int scrollY = av.getStartSeq() - oldY; if (av.getWrapAlignment() || !fastPaint || av.MAC) { @@ -822,13 +843,13 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, { // Make sure we're not trying to draw a panel // larger than the visible window - if (scrollX > av.endRes - av.startRes) + if (scrollX > av.getEndRes() - av.getStartRes()) { - scrollX = av.endRes - av.startRes; + scrollX = av.getEndRes() - av.getStartRes(); } - else if (scrollX < av.startRes - av.endRes) + else if (scrollX < av.getStartRes() - av.getEndRes()) { - scrollX = av.startRes - av.endRes; + scrollX = av.getStartRes() - av.getEndRes(); } idPanel.idCanvas.fastPaint(scrollY); @@ -892,14 +913,14 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, * @param seqOffset * the number of visible sequences to show above the mapped region */ - protected void scrollToCentre(SearchResults sr, int seqOffset) + protected void scrollToCentre(SearchResultsI sr, int seqOffset) { /* * To avoid jumpy vertical scrolling (if some sequences are gapped or not * mapped), we can make the scroll-to location a sequence above the one * actually mapped. */ - SequenceI mappedTo = sr.getResultSequence(0); + SequenceI mappedTo = sr.getResults().get(0).getSequence(); List seqs = av.getAlignment().getSequences(); /* @@ -921,28 +942,27 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, { return; // failsafe, shouldn't happen } - sequenceIndex = Math.max(0, sequenceIndex - seqOffset); - sr.getResults().get(0) - .setSequence(av.getAlignment().getSequenceAt(sequenceIndex)); /* * Scroll to position but centring the target residue. Also set a state flag * to prevent adjustmentValueChanged performing this recursively. */ setFollowingComplementScroll(true); - scrollToPosition(sr, true, true); + // this should be scrollToPosition(sr,verticalOffset, + scrollToPosition(sr, seqOffset, true, true); } private void sendViewPosition() { StructureSelectionManager.getStructureSelectionManager(av.applet) - .sendViewPosition(this, av.startRes, av.endRes, av.startSeq, - av.endSeq); + .sendViewPosition(this, av.getStartRes(), av.getEndRes(), + av.getStartSeq(), av.getEndSeq()); } /** * Repaint the alignment and annotations, and, optionally, any overview window */ + @Override public void paintAlignment(boolean updateOverview) { final AnnotationSorter sorter = new AnnotationSorter(getAlignment(), @@ -953,6 +973,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, if (updateOverview) { + // TODO: determine if this paintAlignment changed structure colours jalview.structure.StructureSelectionManager .getStructureSelectionManager(av.applet) .sequenceColoursChanged(this); @@ -964,11 +985,13 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, } } + @Override public void update(Graphics g) { paint(g); } + @Override public void paint(Graphics g) { invalidate();