*/
package jalview.viewmodel;
-import jalview.api.AlignViewportI;
import jalview.datamodel.ColumnSelection;
import jalview.datamodel.HiddenSequences;
private static final int MAX_SEQ_HEIGHT = 300;
- private AlignViewportI av;
-
- private ViewportPositionProps posProps;
-
// width of the overview panel
private int width;
// height of box
private int boxHeight = -1;
+ // scroll position in viewport corresponding to boxX
private int scrollCol = -1;
+ // scroll position in viewport corresponding to boxY
private int scrollRow = -1;
- public OverviewDimensions(AlignViewportI avi, boolean showAnnotationPanel)
+ /**
+ * Create an OverviewDimensions object
+ *
+ * @param props
+ * positional properties of the viewport
+ * @param showAnnotationPanel
+ * true if the annotation panel is to be shown, false otherwise
+ */
+ public OverviewDimensions(ViewportPositionProps props,
+ boolean showAnnotationPanel)
{
- this.av = avi;
- this.posProps = av.getPosProps();
-
// scale the initial size of overviewpanel to shape of alignment
- float initialScale = (float) posProps.getAlignmentWidthInCols()
- / (float) posProps.getAlignmentHeightInRows();
+ float initialScale = (float) props.getAbsoluteAlignmentWidth()
+ / (float) props.getAbsoluteAlignmentHeight();
if (!showAnnotationPanel)
{
graphHeight = 0;
}
- if (posProps.getAlignmentWidthInCols() > posProps
- .getAlignmentHeightInRows())
+ if (props.getAbsoluteAlignmentWidth() > props
+ .getAbsoluteAlignmentHeight())
{
// wider
width = MAX_WIDTH;
/**
* Check box dimensions and scroll positions and correct if necessary
+ *
+ * @param mousex
+ * x position in overview panel
+ * @param mousey
+ * y position in overview panel
+ * @param hiddenSeqs
+ * hidden sequences
+ * @param hiddenCols
+ * hidden columns
+ * @param props
+ * viewport position properties
*/
- public void updateViewportFromMouse(int x, int y)
+ public void updateViewportFromMouse(int mousex, int mousey,
+ HiddenSequences hiddenSeqs, ColumnSelection hiddenCols,
+ ViewportPositionProps props)
{
- int alwidth = av.getAlignment().getWidth();
- int alheight = av.getAlignment().getAbsoluteHeight();
+ int x = mousex;
+ int y = mousey;
- HiddenSequences hiddenSeqs = av.getAlignment().getHiddenSequences();
- ColumnSelection hiddenCols = av.getColumnSelection();
+ int alwidth = props.getAbsoluteAlignmentWidth();
+ int alheight = props.getAbsoluteAlignmentHeight();
if (x < 0)
{
int xAsRes = Math.round((float) x * alwidth / width);
// get viewport width in residues
- int vpwidth = av.getPosProps().getEndRes()
- - av.getPosProps().getStartRes() + 1;
+ int vpwidth = props.getEndRes() - props.getStartRes() + 1;
// get where x should be when accounting for hidden cols
// if x is in a hidden col region, shift to left - but we still need
int yAsSeq = Math.round((float) y * alheight / sequencesHeight);
// get viewport height in sequences
- int vpheight = av.getPosProps().getEndSeq()
- - av.getPosProps().getStartSeq();
+ int vpheight = props.getEndSeq() - props.getStartSeq();
// get where y should be when accounting for hidden rows
// if y is in a hidden row region, shift up - but we still need absolute
* Update the overview panel box when the associated alignment panel is
* changed
*
+ * @param hiddenSeqs
+ * hidden sequences
+ * @param hiddenCols
+ * hidden columns
+ * @param props
+ * viewport position properties
*/
- public void setBoxPosition()
+ public void setBoxPosition(HiddenSequences hiddenSeqs,
+ ColumnSelection hiddenCols, ViewportPositionProps props)
{
- int alwidth = av.getAlignment().getWidth();
- int alheight = av.getAlignment().getAbsoluteHeight();
+ int alwidth = props.getAbsoluteAlignmentWidth();
+ int alheight = props.getAbsoluteAlignmentHeight();
- int startRes = av.getPosProps().getAbsoluteStartRes();
- int endRes = av.getPosProps().getAbsoluteEndRes();
+ // work with absolute values of startRes and endRes
+ int startRes = hiddenCols.adjustForHiddenColumns(props.getStartRes());
+ int endRes = hiddenCols.adjustForHiddenColumns(props.getEndRes());
- int startSeq = av.getPosProps().getAbsoluteStartSeq();
- int endSeq = av.getPosProps().getAbsoluteEndSeq();
+ // work with absolute values of startSeq and endSeq
+ int startSeq = hiddenSeqs.adjustForHiddenSeqs(props.getStartSeq());
+ int endSeq = hiddenSeqs.adjustForHiddenSeqs(props.getEndSeq());
+ // boxX, boxY is the x,y location equivalent to startRes, startSeq
boxX = Math.round((float) startRes * width / alwidth);
boxY = Math.round((float) startSeq * sequencesHeight / alheight);
+ // boxWidth is the width in residues translated to pixels
boxWidth = Math
.round((float) (endRes - startRes + 1) * width / alwidth);
+ // boxHeight is the height in sequences translated to pixels
boxHeight = Math.round((float) (endSeq - startSeq) * sequencesHeight
/ alheight);
}
return boxHeight;
}
- public void setBoxX(int x)
- {
- boxX = x;
- }
-
- public void setBoxY(int y)
- {
- boxY = y;
- }
-
public void setWidth(int w)
{
width = w;
av = af.getViewport();
- od = new OverviewDimensions(av, true);
+ od = new OverviewDimensions(av.getPosProps(), true);
while (av.isCalcInProgress())
{
}
// Initial box sizing - default path through code
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
init();
}
viewWidth = av.getEndRes() - av.getStartRes();
// wait for gui to get set up
+ // this does actually appear to be necessary
while (viewHeight != 17 || viewWidth != 62)
{
try
al1.setDataset(null);
AlignViewport av1 = new AlignViewport(al1);
- OverviewDimensions od = new OverviewDimensions(av1, true);
+ OverviewDimensions od = new OverviewDimensions(av1.getPosProps(), true);
int scaledHeight = 266;
assertEquals(od.getGraphHeight(), defaultGraphHeight);
assertEquals(od.getSequencesHeight(), scaledHeight);
al2.setDataset(null);
AlignViewport av2 = new AlignViewport(al2);
- od = new OverviewDimensions(av2, true);
+ od = new OverviewDimensions(av2.getPosProps(), true);
int scaledWidth = 300;
assertEquals(od.getGraphHeight(), defaultGraphHeight);
assertEquals(od.getSequencesHeight(), maxSeqHeight);
al3.setDataset(null);
AlignViewport av3 = new AlignViewport(al3);
- od = new OverviewDimensions(av3, true);
+ od = new OverviewDimensions(av3.getPosProps(), true);
assertEquals(od.getGraphHeight(), defaultGraphHeight);
assertEquals(od.getSequencesHeight(), minSeqHeight);
assertEquals(od.getWidth(), maxWidth);
al4.setDataset(null);
AlignViewport av4 = new AlignViewport(al4);
- od = new OverviewDimensions(av4, true);
+ od = new OverviewDimensions(av4.getPosProps(), true);
assertEquals(od.getGraphHeight(), defaultGraphHeight);
assertEquals(od.getSequencesHeight(), maxSeqHeight);
assertEquals(od.getWidth(), minWidth);
al5.setDataset(null);
AlignViewport av5 = new AlignViewport(al5);
- od = new OverviewDimensions(av5, false);
+ od = new OverviewDimensions(av5.getPosProps(), false);
assertEquals(od.getGraphHeight(), 0);
assertEquals(od.getSequencesHeight(), maxSeqHeight);
assertEquals(od.getWidth(), minWidth);
@Test(groups = { "Functional" })
public void testSetBoxFromMouseClick()
{
- od.updateViewportFromMouse(0, 0);
+ od.updateViewportFromMouse(0, 0,
+ av.getAlignment().getHiddenSequences(),
+ av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
assertEquals(od.getBoxWidth(), boxWidth);
@Test(groups = { "Functional" })
public void testFromMouseWithHiddenColsAtStart()
{
- od.updateViewportFromMouse(0, 0);
+ od.updateViewportFromMouse(0, 0,
+ av.getAlignment().getHiddenSequences(),
+ av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
assertEquals(od.getBoxWidth(), boxWidth);
int lastHiddenCol = 30;
hideColumns(0, lastHiddenCol);
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(),
Math.round((float) (lastHiddenCol + 1) * od.getWidth()
/ alwidth));
@Test(groups = { "Functional" })
public void testFromMouseWithHiddenColsInMiddle()
{
- od.updateViewportFromMouse(0, 0);
+ od.updateViewportFromMouse(0, 0,
+ av.getAlignment().getHiddenSequences(),
+ av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
assertEquals(od.getBoxWidth(), boxWidth);
int lastHidden = 73;
hideColumns(firstHidden, lastHidden);
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
assertEquals(od.getBoxWidth(), boxWidth);
@Test(groups = { "Functional" })
public void testFromMouseWithHiddenColsAtEnd()
{
- od.updateViewportFromMouse(0, 0);
+ od.updateViewportFromMouse(0, 0,
+ av.getAlignment().getHiddenSequences(),
+ av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
assertEquals(od.getBoxWidth(), boxWidth);
int firstHidden = 140;
int lastHidden = 157;
hideColumns(firstHidden, lastHidden);
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
assertEquals(od.getBoxWidth(), boxWidth);
@Test(groups = { "Functional" })
public void testFromMouseWithHiddenRowsAtStart()
{
- od.updateViewportFromMouse(0, 0);
+ od.updateViewportFromMouse(0, 0,
+ av.getAlignment().getHiddenSequences(),
+ av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
assertEquals(od.getBoxHeight(), boxHeight);
int lastHiddenRow = 30;
hideSequences(0, lastHiddenRow + 1, lastHiddenRow + 1);
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(),
Math.round((float) (lastHiddenRow + 1)
@Test(groups = { "Functional" })
public void testFromMouseWithHiddenRowsInMiddle()
{
- od.updateViewportFromMouse(0, 0);
+ od.updateViewportFromMouse(0, 0,
+ av.getAlignment().getHiddenSequences(),
+ av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
int lastHiddenRow = 60;
hideSequences(firstHiddenRow, lastHiddenRow + 1, lastHiddenRow + 1);
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
@Test(groups = { "Functional" })
public void testFromMouseWithHiddenRowsAtEnd()
{
- od.updateViewportFromMouse(0, 0);
+ od.updateViewportFromMouse(0, 0,
+ av.getAlignment().getHiddenSequences(),
+ av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
assertEquals(od.getBoxWidth(), boxWidth);
int lastHidden = 524;
hideSequences(firstHidden - 1, lastHidden, firstHidden - 1);
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
assertEquals(od.getBoxX(), 0);
assertEquals(od.getBoxY(), 0);
assertEquals(od.getBoxWidth(), boxWidth);
{
av.setStartRes(startRes);
av.setEndRes(startRes + viewWidth);
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
}
/*
{
av.setStartSeq(startSeq);
av.setEndSeq(startSeq + viewHeight);
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
}
/*
av.setEndRes(startRes + viewWidth);
av.setStartSeq(startSeq);
av.setEndSeq(startSeq + viewHeight);
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
}
/*
*/
private void mouseClick(OverviewDimensions od, int x, int y)
{
- od.updateViewportFromMouse(x, y);
+ od.updateViewportFromMouse(x, y,
+ av.getAlignment().getHiddenSequences(),
+ av.getColumnSelection(), av.getPosProps());
// updates require an OverviewPanel to exist which it doesn't here
// so call setBoxPosition() as it would be called by the AlignmentPanel
// normally
av.setEndRes(od.getScrollCol() + viewWidth);
av.setStartSeq(od.getScrollRow());
av.setEndSeq(od.getScrollRow() + viewHeight);
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getPosProps());
}
private void testBoxIsAtClickPoint(int xpos, int ypos)