X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignmentPanel.java;h=874b552f443310726d10179c9ed99ad066cdd68b;hb=336e0c59bfd53d054da0bb332f858834f57e7bec;hp=6b292e9cba71acf8199e17ae6e47570b15a18727;hpb=439d669683b672ec800579c7f734a8aaa701751b;p=jalview.git diff --git a/src/jalview/appletgui/AlignmentPanel.java b/src/jalview/appletgui/AlignmentPanel.java index 6b292e9..874b552 100755 --- a/src/jalview/appletgui/AlignmentPanel.java +++ b/src/jalview/appletgui/AlignmentPanel.java @@ -1,22 +1,21 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * + * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) + * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ - package jalview.appletgui; import java.awt.*; @@ -24,18 +23,25 @@ import java.awt.event.*; import jalview.datamodel.*; -public class AlignmentPanel - extends Panel implements AdjustmentListener +public class AlignmentPanel extends Panel implements AdjustmentListener { public AlignViewport av; + OverviewPanel overviewPanel; + SeqPanel seqPanel; + IdPanel idPanel; + IdwidthAdjuster idwidthAdjuster; + public AlignFrame alignFrame; + ScalePanel scalePanel; + AnnotationPanel annotationPanel; + AnnotationLabels alabels; // this value is set false when selection area being dragged @@ -46,8 +52,7 @@ public class AlignmentPanel try { jbInit(); - } - catch (Exception e) + } catch (Exception e) { e.printStackTrace(); } @@ -94,7 +99,7 @@ public class AlignmentPanel idPanel.idCanvas.setSize(d.width, seqPanel.seqCanvas.getSize().height); annotationSpaceFillerHolder.setSize(d.width, - annotationPanel.getSize().height); + annotationPanel.getSize().height); alabels.setSize(d.width, annotationPanel.getSize().height); final AlignmentPanel ap = this; @@ -104,10 +109,7 @@ public class AlignmentPanel { if (evt.getPropertyName().equals("alignment")) { - PaintRefresher.Refresh(ap, - av.getSequenceSetId(), - true, - true); + PaintRefresher.Refresh(ap, av.getSequenceSetId(), true, true); alignmentChanged(); } } @@ -147,7 +149,8 @@ public class AlignmentPanel FontMetrics fm = getFontMetrics(av.getFont()); scalePanel.setSize(new Dimension(10, av.charHeight + fm.getDescent())); - idwidthAdjuster.setSize(new Dimension(10, av.charHeight + fm.getDescent())); + idwidthAdjuster.setSize(new Dimension(10, av.charHeight + + fm.getDescent())); av.updateSequenceIdColours(); annotationPanel.image = null; int ap = annotationPanel.adjustPanelHeight(); @@ -225,19 +228,43 @@ public class AlignmentPanel 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) || (av.getEndRes() < start) || - ( (av.getStartSeq() > seqIndex) || (av.getEndSeq() < seqIndex))) + if ((av.getStartRes() > end) + || (av.getEndRes() < start) + || ((av.getStartSeq() > seqIndex) || (av.getEndSeq() < seqIndex))) { if (start > av.alignment.getWidth() - hextent) { @@ -269,8 +296,8 @@ public class AlignmentPanel void scrollToWrappedVisible(int res) { - int cwidth = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas. - getSize().width); + int cwidth = seqPanel.seqCanvas + .getWrappedCanvasWidth(seqPanel.seqCanvas.getSize().width); if (res <= av.getStartRes() || res >= (av.getStartRes() + cwidth)) { vscroll.setValue(res / cwidth); @@ -321,7 +348,7 @@ public class AlignmentPanel idSpaceFillerPanel1.setVisible(!wrap); - fontChanged(); //This is so that the scalePanel is resized correctly + fontChanged(); // This is so that the scalePanel is resized correctly validate(); repaint(); @@ -329,6 +356,7 @@ public class AlignmentPanel } int hextent = 0; + int vextent = 0; // return value is true if the scroll is valid @@ -389,7 +417,8 @@ public class AlignmentPanel } av.setStartRes(x); - av.setEndRes( (x + (seqPanel.seqCanvas.getSize().width / av.charWidth)) - 1); + av + .setEndRes((x + (seqPanel.seqCanvas.getSize().width / av.charWidth)) - 1); hextent = seqPanel.seqCanvas.getSize().width / av.charWidth; vextent = seqPanel.seqCanvas.getSize().height / av.charHeight; @@ -404,12 +433,12 @@ public class AlignmentPanel vextent = height; } - if ( (hextent + x) > width) + if ((hextent + x) > width) { x = width - hextent; } - if ( (vextent + y) > height) + if ((vextent + y) > height) { y = height - vextent; } @@ -452,8 +481,8 @@ public class AlignmentPanel { int x = hscroll.getValue(); av.setStartRes(x); - av.setEndRes(x + seqPanel.seqCanvas.getSize().width / av.getCharWidth() - - 1); + av.setEndRes(x + seqPanel.seqCanvas.getSize().width + / av.getCharWidth() - 1); } if (evt == null || evt.getSource() == vscroll) @@ -461,16 +490,16 @@ public class AlignmentPanel int offy = vscroll.getValue(); if (av.getWrapAlignment()) { - int rowSize = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel. - seqCanvas.getSize().width); + int rowSize = seqPanel.seqCanvas + .getWrappedCanvasWidth(seqPanel.seqCanvas.getSize().width); av.setStartRes(vscroll.getValue() * rowSize); - av.setEndRes( (vscroll.getValue() + 1) * rowSize); + av.setEndRes((vscroll.getValue() + 1) * rowSize); } else { av.setStartSeq(offy); - av.setEndSeq(offy + - seqPanel.seqCanvas.getSize().height / av.getCharHeight()); + av.setEndSeq(offy + seqPanel.seqCanvas.getSize().height + / av.getCharHeight()); } } @@ -500,8 +529,7 @@ public class AlignmentPanel } idPanel.idCanvas.fastPaint(scrollY); - seqPanel.seqCanvas.fastPaint(scrollX, - scrollY); + seqPanel.seqCanvas.fastPaint(scrollX, scrollY); scalePanel.repaint(); if (av.getShowAnnotation()) @@ -516,10 +544,10 @@ public class AlignmentPanel { repaint(); - if(updateOverview) + if (updateOverview) { - jalview.structure.StructureSelectionManager.getStructureSelectionManager() - .sequenceColoursChanged(this); + jalview.structure.StructureSelectionManager + .getStructureSelectionManager().sequenceColoursChanged(this); if (overviewPanel != null) { @@ -539,7 +567,7 @@ public class AlignmentPanel Dimension d = idPanel.idCanvas.getSize(); idPanel.idCanvas.setSize(d.width, seqPanel.seqCanvas.getSize().height); annotationSpaceFillerHolder.setSize(d.width, - annotationPanel.getSize().height); + annotationPanel.getSize().height); alabels.setSize(d.width, annotationPanel.getSize().height); @@ -552,8 +580,8 @@ public class AlignmentPanel maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1; } - int canvasWidth = seqPanel.seqCanvas.getWrappedCanvasWidth - (seqPanel.seqCanvas.getSize().width); + int canvasWidth = seqPanel.seqCanvas + .getWrappedCanvasWidth(seqPanel.seqCanvas.getSize().width); if (canvasWidth > 0) { @@ -577,32 +605,49 @@ public class AlignmentPanel } protected Panel sequenceHolderPanel = new Panel(); + protected Scrollbar vscroll = new Scrollbar(); + protected Scrollbar hscroll = new Scrollbar(); + protected Panel seqPanelHolder = new Panel(); + BorderLayout borderLayout1 = new BorderLayout(); + BorderLayout borderLayout3 = new BorderLayout(); + protected Panel scalePanelHolder = new Panel(); + protected Panel idPanelHolder = new Panel(); + BorderLayout borderLayout5 = new BorderLayout(); + protected Panel idSpaceFillerPanel1 = new Panel(); + public Panel annotationSpaceFillerHolder = new Panel(); + BorderLayout borderLayout6 = new BorderLayout(); + BorderLayout borderLayout7 = new BorderLayout(); + Panel hscrollHolder = new Panel(); + BorderLayout borderLayout10 = new BorderLayout(); + protected Panel hscrollFillerPanel = new Panel(); + BorderLayout borderLayout11 = new BorderLayout(); + BorderLayout borderLayout4 = new BorderLayout(); + BorderLayout borderLayout2 = new BorderLayout(); - private void jbInit() - throws Exception + private void jbInit() throws Exception { - // idPanelHolder.setPreferredSize(new Dimension(70, 10)); + // idPanelHolder.setPreferredSize(new Dimension(70, 10)); this.setLayout(borderLayout7); - // sequenceHolderPanel.setPreferredSize(new Dimension(150, 150)); + // sequenceHolderPanel.setPreferredSize(new Dimension(150, 150)); sequenceHolderPanel.setLayout(borderLayout3); seqPanelHolder.setLayout(borderLayout1); scalePanelHolder.setBackground(Color.white); @@ -612,28 +657,28 @@ public class AlignmentPanel idPanelHolder.setLayout(borderLayout5); idSpaceFillerPanel1.setBackground(Color.white); - // idSpaceFillerPanel1.setPreferredSize(new Dimension(10, 30)); + // idSpaceFillerPanel1.setPreferredSize(new Dimension(10, 30)); idSpaceFillerPanel1.setLayout(borderLayout11); annotationSpaceFillerHolder.setBackground(Color.white); - // annotationSpaceFillerHolder.setPreferredSize(new Dimension(10, 80)); + // annotationSpaceFillerHolder.setPreferredSize(new Dimension(10, 80)); annotationSpaceFillerHolder.setLayout(borderLayout4); hscroll.setOrientation(Scrollbar.HORIZONTAL); hscrollHolder.setLayout(borderLayout10); hscrollFillerPanel.setBackground(Color.white); - // hscrollFillerPanel.setPreferredSize(new Dimension(70, 10)); + // hscrollFillerPanel.setPreferredSize(new Dimension(70, 10)); hscrollHolder.setBackground(Color.white); - // annotationScroller.setPreferredSize(new Dimension(10, 80)); - // this.setPreferredSize(new Dimension(220, 166)); + // annotationScroller.setPreferredSize(new Dimension(10, 80)); + // this.setPreferredSize(new Dimension(220, 166)); seqPanelHolder.setBackground(Color.white); idPanelHolder.setBackground(Color.white); sequenceHolderPanel.add(scalePanelHolder, BorderLayout.NORTH); sequenceHolderPanel.add(seqPanelHolder, BorderLayout.CENTER); seqPanelHolder.add(vscroll, BorderLayout.EAST); - // Panel3.add(secondaryPanelHolder, BorderLayout.SOUTH); + // Panel3.add(secondaryPanelHolder, BorderLayout.SOUTH); this.add(idPanelHolder, BorderLayout.WEST); idPanelHolder.add(idSpaceFillerPanel1, BorderLayout.NORTH); idPanelHolder.add(annotationSpaceFillerHolder, BorderLayout.SOUTH);