1 package jalview.viewmodel;
3 import jalview.api.AlignmentColsCollectionI;
4 import jalview.api.AlignmentRowsCollectionI;
5 import jalview.datamodel.AlignmentI;
6 import jalview.datamodel.HiddenColumns;
7 import jalview.datamodel.HiddenSequences;
8 import jalview.datamodel.VisibleColsCollection;
9 import jalview.datamodel.VisibleRowsCollection;
11 public class OverviewDimensionsAllVisible extends OverviewDimensions
13 private ViewportRanges alRanges;
15 public OverviewDimensionsAllVisible(ViewportRanges ranges,
16 boolean showAnnotationPanel)
18 super(ranges, showAnnotationPanel);
24 public void updateViewportFromMouse(int mousex, int mousey,
25 HiddenSequences hiddenSeqs, HiddenColumns hiddenCols)
43 // Convert x value to residue position
46 // need to determine where scrollCol should be, given x
47 // to do this also need to know width of viewport, and some hidden column
50 // convert x to residues - this is an absolute position
51 int xAsRes = Math.round((float) x * alwidth / width);
53 // get viewport width in residues
54 int vpwidth = alRanges.getEndRes() - alRanges.getStartRes() + 1;
56 if (xAsRes + vpwidth > alwidth)
58 // went past the end of the alignment, adjust backwards
60 // if last position was before the end of the alignment, need to update
61 if ((scrollCol + vpwidth - 1) < alwidth)
63 xAsRes = alwidth - vpwidth;
73 // Convert y value to sequence position
76 // convert y to residues
77 int yAsSeq = Math.round((float) y * alheight / sequencesHeight);
79 // get viewport height in sequences
80 // add 1 because height includes both endSeq and startSeq
81 int vpheight = alRanges.getEndSeq() - alRanges.getStartSeq() + 1;
83 if (yAsSeq + vpheight > alheight)
85 // went past the end of the alignment, adjust backwards
86 if ((scrollRow + vpheight - 1) < alheight)
88 yAsSeq = alheight - vpheight;
96 // update scroll values
103 public void setBoxPosition(HiddenSequences hiddenSeqs,
104 HiddenColumns hiddenCols)
106 resetAlignmentDims();
108 // work with visible values of startRes and endRes
109 int startRes = alRanges.getStartRes();
110 int endRes = alRanges.getEndRes();
112 // work with visible values of startSeq and endSeq
113 int startSeq = alRanges.getStartSeq();
114 int endSeq = alRanges.getEndSeq();
116 // boxX, boxY is the x,y location equivalent to startRes, startSeq
117 boxX = Math.round((float) startRes * width / alwidth);
118 boxY = Math.round((float) startSeq * sequencesHeight / alheight);
120 // boxWidth is the width in residues translated to pixels
121 // since the box includes both the start and end residues, add 1 to the
124 .round((float) (endRes - startRes + 1) * width / alwidth);
125 // boxHeight is the height in sequences translated to pixels
126 boxHeight = Math.round((float) (endSeq - startSeq + 1)
127 * sequencesHeight / alheight);
132 public AlignmentColsCollectionI getColumns(HiddenColumns hiddenCols)
134 return new VisibleColsCollection(0,
135 alRanges.getAbsoluteAlignmentWidth() - 1, hiddenCols);
139 public AlignmentRowsCollectionI getRows(AlignmentI al)
141 return new VisibleRowsCollection(0,
142 alRanges.getAbsoluteAlignmentHeight() - 1, al);
146 protected void resetAlignmentDims()
148 alwidth = alRanges.getVisibleAlignmentWidth();
149 alheight = alRanges.getVisibleAlignmentHeight();