/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview 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 3 * of the License, or (at your option) any later version. * * Jalview 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 Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.viewmodel; import jalview.api.AlignmentColsCollectionI; import jalview.api.AlignmentRowsCollectionI; import jalview.datamodel.AlignmentI; import jalview.datamodel.HiddenColumns; import jalview.datamodel.HiddenSequences; import java.awt.Graphics; public abstract class OverviewDimensions { protected static final int MAX_WIDTH = 400; protected static final int MIN_WIDTH = 120; protected static final int MIN_SEQ_HEIGHT = 40; protected static final int MAX_SEQ_HEIGHT = 300; private static final int DEFAULT_GRAPH_HEIGHT = 20; protected int width; protected int sequencesHeight; protected int graphHeight = DEFAULT_GRAPH_HEIGHT; protected int boxX = -1; protected int boxY = -1; protected int boxWidth = -1; protected int boxHeight = -1; protected int scrollCol = -1; protected int scrollRow = -1; protected int alwidth; protected int alheight; public OverviewDimensions(ViewportRanges ranges, boolean showAnnotationPanel) { // scale the initial size of overviewpanel to shape of alignment float initialScale = (float) ranges.getAbsoluteAlignmentWidth() / (float) ranges.getAbsoluteAlignmentHeight(); if (!showAnnotationPanel) { graphHeight = 0; } if (ranges.getAbsoluteAlignmentWidth() > ranges .getAbsoluteAlignmentHeight()) { // wider width = MAX_WIDTH; sequencesHeight = Math.round(MAX_WIDTH / initialScale); if (sequencesHeight < MIN_SEQ_HEIGHT) { sequencesHeight = MIN_SEQ_HEIGHT; } } else { // taller width = Math.round(MAX_WIDTH * initialScale); sequencesHeight = MAX_SEQ_HEIGHT; if (width < MIN_WIDTH) { width = MIN_WIDTH; } } } /** * Draw the overview panel's viewport box on a graphics object * * @param g * the graphics object to draw on */ public void drawBox(Graphics g) { g.drawRect(boxX, boxY, boxWidth, boxHeight); g.drawRect(boxX + 1, boxY + 1, boxWidth - 2, boxHeight - 2); } public int getScrollCol() { return scrollCol; } public int getScrollRow() { return scrollRow; } public int getBoxX() { return boxX; } public int getBoxY() { return boxY; } public int getBoxWidth() { return boxWidth; } public int getBoxHeight() { return boxHeight; } public int getWidth() { return width; } public int getHeight() { return sequencesHeight + graphHeight; } public int getSequencesHeight() { return sequencesHeight; } public int getGraphHeight() { return graphHeight; } public float getPixelsPerCol() { resetAlignmentDims(); return (float) width / alwidth; } public float getPixelsPerSeq() { resetAlignmentDims(); return (float) sequencesHeight / alheight; } public void setWidth(int w) { width = w; } public void setHeight(int h) { sequencesHeight = h - graphHeight; } /** * 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); /** * 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( HiddenColumns hiddenCols); /** * 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(); }