+
+ public float getPixelsPerCol()
+ {
+ resetAlignmentDims();
+ return 1 / widthRatio;
+ }
+
+ public float getPixelsPerSeq()
+ {
+ resetAlignmentDims();
+ return 1 / heightRatio;
+ }
+
+ public void setWidth(int w)
+ {
+ width = w;
+ widthRatio = (float) alwidth / width;
+ }
+
+ public void setHeight(int h)
+ {
+ // BH 2019 problem was that component.resize() can come
+ // after setBoxPosition().
+ // Solution was to move setting of box dimensions to paint
+ sequencesHeight = h - graphHeight;
+ heightRatio = (float) alheight / sequencesHeight;
+ }
+
+ /**
+ * Update the viewport location from a mouse click in the overview panel
+ *
+ * @param mousex
+ * x location of mouse
+ * @param mousey
+ * y location of mouse
+ * @param hiddenSeqs
+ * the alignment's hidden sequences
+ * @param hiddenCols
+ * the alignment's hidden columns
+ */
+ public abstract void updateViewportFromMouse(int mousex, int mousey,
+ HiddenSequences hiddenSeqs, HiddenColumns hiddenCols);
+
+ /**
+ * Update the viewport location from a mouse drag within the overview's box
+ *
+ * @param mousex
+ * x location of mouse
+ * @param mousey
+ * y location of mouse
+ * @param hiddenSeqs
+ * the alignment's hidden sequences
+ * @param hiddenCols
+ * the alignment's hidden columns
+ */
+ public abstract void adjustViewportFromMouse(int mousex, int mousey,
+ HiddenSequences hiddenSeqs, HiddenColumns hiddenCols);
+
+ /**
+ * Initialise dragging from the mouse - must be called on initial mouse click
+ * before using adjustViewportFromMouse in drag operations
+ *
+ * @param mousex
+ * x location of mouse
+ * @param mousey
+ * y location of mouse
+ * @param hiddenSeqs
+ * the alignment's hidden sequences
+ * @param hiddenCols
+ * the alignment's hidden columns
+ */
+ public abstract void setDragPoint(int x, int y,
+ HiddenSequences hiddenSeqs, HiddenColumns hiddenCols);
+
+ /*
+ * Move the viewport so that the top left corner of the overview's box
+ * is at the mouse position (leftx, topy)
+ */
+ protected abstract void updateViewportFromTopLeft(int leftx, int topy,
+ HiddenSequences hiddenSeqs, HiddenColumns hiddenCols);
+
+ /**
+ * Set the overview panel's box position to match the viewport
+ *
+ * @param hiddenSeqs
+ * the alignment's hidden sequences
+ * @param hiddenCols
+ * the alignment's hidden columns
+ */
+ public abstract void setBoxPosition(HiddenSequences hiddenSeqs,
+ HiddenColumns hiddenCols);
+
+ /**
+ * Get the collection of columns used by this overview dimensions object
+ *
+ * @param hiddenCols
+ * the alignment's hidden columns
+ * @return a column collection
+ */
+ public abstract AlignmentColsCollectionI getColumns(AlignmentI al);
+
+ /**
+ * Get the collection of rows used by this overview dimensions object
+ *
+ * @param al
+ * the alignment
+ * @return a row collection
+ */
+ public abstract AlignmentRowsCollectionI getRows(AlignmentI al);
+
+ /**
+ * Updates overview dimensions to account for current alignment dimensions
+ */
+ protected abstract void resetAlignmentDims();
+
+ /*
+ * Given the box coordinates in residues and sequences, set the box dimensions in the overview window
+ */
+ protected void setBoxPosition(int startRes, int startSeq, int vpwidth,
+ int vpheight)
+ {
+ resetAlignmentDims();
+ vpbox = new Rectangle(startRes, startSeq, vpwidth, vpheight);
+ updateBox();
+ }
+
+ public void updateBox()
+ {
+ // boxX, boxY is the x,y location equivalent to startRes, startSeq
+ int xPos = Math.min(vpbox.x, alwidth - vpbox.width + 1);
+ boxX = Math.round(xPos / widthRatio);
+ boxY = Math.round(vpbox.y / heightRatio);
+
+ // boxWidth is the width in residues translated to pixels
+ boxWidth = Math.max(1, Math.round(vpbox.width / widthRatio));
+
+ // boxHeight is the height in sequences translated to pixels
+ boxHeight = Math.max(1, Math.round(vpbox.height / heightRatio));
+ }
+
+ /**
+ * Answers if a mouse position is in the overview's red box
+ *
+ * @param x
+ * mouse x position
+ * @param y
+ * mouse y position
+ * @return true if (x,y) is inside the box
+ */
+ public boolean isPositionInBox(int x, int y)
+ {
+ return (x > boxX && y > boxY && x < boxX + boxWidth
+ && y < boxY + boxHeight);
+ }
+
+ /*
+ * Given the centre x position, calculate the box's left x position
+ */
+ protected abstract int getLeftXFromCentreX(int mousex,
+ HiddenColumns hidden);
+
+ /*
+ * Given the centre y position, calculate the box's top y position
+ */
+ protected abstract int getTopYFromCentreY(int mousey,
+ HiddenSequences hidden);
+
+}
\ No newline at end of file