X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2FOverviewDimensionsHideHidden.java;h=de90a216c701fe455be222cd14b7f3bace894686;hb=ccebd462f3616f4c08cda443d246c0c7c0d54e00;hp=513596e25acabb84cf015e475949d2a3bc431f6c;hpb=24b3db7a46158fe7bf82c208472740f8b7c76448;p=jalview.git diff --git a/src/jalview/viewmodel/OverviewDimensionsHideHidden.java b/src/jalview/viewmodel/OverviewDimensionsHideHidden.java index 513596e..de90a21 100644 --- a/src/jalview/viewmodel/OverviewDimensionsHideHidden.java +++ b/src/jalview/viewmodel/OverviewDimensionsHideHidden.java @@ -1,3 +1,23 @@ +/* + * 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; @@ -12,6 +32,12 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions { private ViewportRanges ranges; + private int xdiff; // when dragging, difference in alignment units between + // start residue and original mouse click position + + private int ydiff; // when dragging, difference in alignment units between + // start sequence and original mouse click position + public OverviewDimensionsHideHidden(ViewportRanges vpranges, boolean showAnnotationPanel) { @@ -24,6 +50,8 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions public void updateViewportFromMouse(int mousex, int mousey, HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) { + resetAlignmentDims(); + int xAsRes = getLeftXFromCentreX(mousex, hiddenCols); int yAsSeq = getTopYFromCentreY(mousey, hiddenSeqs); @@ -35,23 +63,29 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions public void adjustViewportFromMouse(int mousex, int mousey, HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) { + resetAlignmentDims(); + // calculate translation in pixel terms: // get mouse location in viewport coords, add translation in viewport // coords, and update viewport as usual - int vpx = Math.round((float) mousex * alwidth / width); - int vpy = Math.round((float) mousey * alheight / sequencesHeight); + int vpx = Math.round(mousex * widthRatio); + int vpy = Math.round(mousey * heightRatio); - updateViewportFromTopLeft(vpx + fixedX, vpy + fixedY, hiddenSeqs, + updateViewportFromTopLeft(vpx + xdiff, vpy + ydiff, hiddenSeqs, hiddenCols); } + /** + * {@inheritDoc} Callers should have already called resetAlignmentDims to + * refresh alwidth, alheight and width/height ratios + */ @Override - protected void updateViewportFromTopLeft(int xAsRes, int yAsSeq, + protected void updateViewportFromTopLeft(int leftx, int topy, HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) { - - resetAlignmentDims(); + int xAsRes = leftx; + int yAsSeq = topy; if (xAsRes < 0) { @@ -63,16 +97,10 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions yAsSeq = 0; } - // - // Convert x value to residue position - // - - // need to determine where scrollCol should be, given x - // to do this also need to know width of viewport, and some hidden column - // correction - - // convert x to residues - this is an absolute position - // int xAsRes = Math.round((float) x * alwidth / width); + if (ranges.isWrappedMode()) + { + yAsSeq = 0; // sorry, no vertical scroll when wrapped + } // get viewport width in residues int vpwidth = ranges.getViewportWidth(); @@ -92,10 +120,7 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions } } - - // - // Convert y value to sequence position - // + // Determine where scrollRow should be, given visYAsSeq // get viewport height in sequences // add 1 because height includes both endSeq and startSeq @@ -114,10 +139,7 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions } } - // update viewport - ranges.setStartRes(xAsRes); - ranges.setStartSeq(yAsSeq); - + ranges.setStartResAndSeq(xAsRes, yAsSeq); } @Override @@ -132,7 +154,7 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions public AlignmentColsCollectionI getColumns(AlignmentI al) { return new VisibleColsCollection(0, - ranges.getAbsoluteAlignmentWidth() - 1, al); + ranges.getAbsoluteAlignmentWidth() - 1, al.getHiddenColumns()); } @Override @@ -147,19 +169,30 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions { alwidth = ranges.getVisibleAlignmentWidth(); alheight = ranges.getVisibleAlignmentHeight(); + + widthRatio = (float) alwidth / width; + heightRatio = (float) alheight / sequencesHeight; } + /** + * {@inheritDoc} Callers should have already called resetAlignmentDims to + * refresh widthRatio + */ @Override protected int getLeftXFromCentreX(int mousex, HiddenColumns hidden) { - int vpx = Math.round((float) mousex * alwidth / width); + int vpx = Math.round(mousex * widthRatio); return vpx - ranges.getViewportWidth() / 2; } + /** + * {@inheritDoc} Callers should have already called resetAlignmentDims to + * refresh heightRatio + */ @Override protected int getTopYFromCentreY(int mousey, HiddenSequences hidden) { - int vpy = Math.round((float) mousey * alheight / sequencesHeight); + int vpy = Math.round(mousey * heightRatio); return vpy - ranges.getViewportHeight() / 2; } @@ -167,15 +200,15 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions public void setDragPoint(int x, int y, HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) { - // get alignment position of x and box (can get directly from vpranges) and - // calc difference - int vpx = Math.round((float) x * alwidth / width); - - int vpy = Math.round((float) y * alheight / sequencesHeight); + resetAlignmentDims(); - fixedX = ranges.getStartRes() - vpx; - fixedY = ranges.getStartSeq() - vpy; + // get alignment position of x and box (can get directly from vpranges) and + // calculate difference between the positions + int vpx = Math.round(x * widthRatio); + int vpy = Math.round(y * heightRatio); + xdiff = ranges.getStartRes() - vpx; + ydiff = ranges.getStartSeq() - vpy; } }