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 OverviewDimensionsHideHidden extends OverviewDimensions
13 private ViewportRanges ranges;
15 private int xdiff; // when dragging, difference in alignment units between
16 // start residue and original mouse click position
18 private int ydiff; // when dragging, difference in alignment units between
19 // start sequence and original mouse click position
21 public OverviewDimensionsHideHidden(ViewportRanges vpranges,
22 boolean showAnnotationPanel)
24 super(vpranges, showAnnotationPanel);
30 public void updateViewportFromMouse(int mousex, int mousey,
31 HiddenSequences hiddenSeqs, HiddenColumns hiddenCols)
33 int xAsRes = getLeftXFromCentreX(mousex, hiddenCols);
34 int yAsSeq = getTopYFromCentreY(mousey, hiddenSeqs);
36 updateViewportFromTopLeft(xAsRes, yAsSeq, hiddenSeqs, hiddenCols);
41 public void adjustViewportFromMouse(int mousex, int mousey,
42 HiddenSequences hiddenSeqs, HiddenColumns hiddenCols)
44 // calculate translation in pixel terms:
45 // get mouse location in viewport coords, add translation in viewport
46 // coords, and update viewport as usual
47 int vpx = Math.round((float) mousex * alwidth / width);
48 int vpy = Math.round((float) mousey * alheight / sequencesHeight);
50 updateViewportFromTopLeft(vpx + xdiff, vpy + ydiff, hiddenSeqs,
56 protected void updateViewportFromTopLeft(int leftx, int topy,
57 HiddenSequences hiddenSeqs, HiddenColumns hiddenCols)
73 // Determine where scrollCol should be, given visXAsRes
75 // get viewport width in residues
76 int vpwidth = ranges.getViewportWidth();
78 if (xAsRes + vpwidth > alwidth)
80 // went past the end of the alignment, adjust backwards
82 // if last position was before the end of the alignment, need to update
83 if (ranges.getStartRes() < alwidth)
85 xAsRes = alwidth - vpwidth;
89 xAsRes = ranges.getStartRes();
93 // Determine where scrollRow should be, given visYAsSeq
95 // get viewport height in sequences
96 // add 1 because height includes both endSeq and startSeq
97 int vpheight = ranges.getViewportHeight();
99 if (yAsSeq + vpheight > alheight)
101 // went past the end of the alignment, adjust backwards
102 if (ranges.getEndSeq() < alheight)
104 yAsSeq = alheight - vpheight;
108 yAsSeq = ranges.getStartSeq();
113 ranges.setStartRes(xAsRes);
114 ranges.setStartSeq(yAsSeq);
118 public void setBoxPosition(HiddenSequences hiddenSeqs,
119 HiddenColumns hiddenCols)
121 setBoxPosition(ranges.getStartRes(), ranges.getStartSeq(),
122 ranges.getViewportWidth(), ranges.getViewportHeight());
126 public AlignmentColsCollectionI getColumns(AlignmentI al)
128 return new VisibleColsCollection(0,
129 ranges.getAbsoluteAlignmentWidth() - 1, al);
133 public AlignmentRowsCollectionI getRows(AlignmentI al)
135 return new VisibleRowsCollection(0,
136 ranges.getAbsoluteAlignmentHeight() - 1, al);
140 protected void resetAlignmentDims()
142 alwidth = ranges.getVisibleAlignmentWidth();
143 alheight = ranges.getVisibleAlignmentHeight();
147 protected int getLeftXFromCentreX(int mousex, HiddenColumns hidden)
149 int vpx = Math.round((float) mousex * alwidth / width);
150 return vpx - ranges.getViewportWidth() / 2;
154 protected int getTopYFromCentreY(int mousey, HiddenSequences hidden)
156 int vpy = Math.round((float) mousey * alheight / sequencesHeight);
157 return vpy - ranges.getViewportHeight() / 2;
161 public void setDragPoint(int x, int y, HiddenSequences hiddenSeqs,
162 HiddenColumns hiddenCols)
164 // get alignment position of x and box (can get directly from vpranges) and
165 // calculate difference between the positions
166 int vpx = Math.round((float) x * alwidth / width);
167 int vpy = Math.round((float) y * alheight / sequencesHeight);
169 xdiff = ranges.getStartRes() - vpx;
170 ydiff = ranges.getStartSeq() - vpy;