1. Project Clover database Fri Dec 6 2024 13:47:14 GMT
  2. Package jalview.viewmodel

File OverviewDimensions.java

 

Coverage histogram

../../img/srcFileCovDistChart10.png
0% of files have more coverage

Code metrics

12
37
16
1
319
143
22
0.59
2.31
16
1.38

Classes

Class
Line #
Actions
OverviewDimensions 31 37 22
0.969230896.9%
 

Contributing tests

This file is covered by 46 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
7    * Jalview is free software: you can redistribute it and/or
8    * modify it under the terms of the GNU General Public License
9    * as published by the Free Software Foundation, either version 3
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    package jalview.viewmodel;
22   
23    import java.awt.Graphics;
24   
25    import jalview.api.AlignmentColsCollectionI;
26    import jalview.api.AlignmentRowsCollectionI;
27    import jalview.datamodel.AlignmentI;
28    import jalview.datamodel.HiddenColumns;
29    import jalview.datamodel.HiddenSequences;
30   
 
31    public abstract class OverviewDimensions
32    {
33    protected static final int MAX_WIDTH = 400;
34   
35    protected static final int MIN_WIDTH = 120;
36   
37    protected static final int MIN_SEQ_HEIGHT = 40;
38   
39    protected static final int MAX_SEQ_HEIGHT = 300;
40   
41    private static final int DEFAULT_GRAPH_HEIGHT = 20;
42   
43    protected int width;
44   
45    protected int sequencesHeight;
46   
47    protected int graphHeight = DEFAULT_GRAPH_HEIGHT;
48   
49    protected int boxX = -1;
50   
51    protected int boxY = -1;
52   
53    protected int boxWidth = -1;
54   
55    protected int boxHeight = -1;
56   
57    protected int alwidth;
58   
59    protected int alheight;
60   
61    protected float widthRatio;
62   
63    protected float heightRatio;
64   
65    /**
66    * Create an OverviewDimensions object
67    *
68    * @param ranges
69    * positional properties of the viewport
70    * @param showAnnotationPanel
71    * true if the annotation panel is to be shown, false otherwise
72    */
 
73  88 toggle public OverviewDimensions(ViewportRanges ranges,
74    boolean showAnnotationPanel)
75    {
76    // scale the initial size of overviewpanel to shape of alignment
77  88 float initialScale = (float) ranges.getAbsoluteAlignmentWidth()
78    / (float) ranges.getAbsoluteAlignmentHeight();
79   
80  88 if (!showAnnotationPanel)
81    {
82  2 graphHeight = 0;
83    }
84   
85  88 if (ranges.getAbsoluteAlignmentWidth() > ranges
86    .getAbsoluteAlignmentHeight())
87    {
88    // wider
89  47 width = MAX_WIDTH;
90  47 sequencesHeight = Math.round(MAX_WIDTH / initialScale);
91  47 if (sequencesHeight < MIN_SEQ_HEIGHT)
92    {
93  25 sequencesHeight = MIN_SEQ_HEIGHT;
94    }
95    }
96    else
97    {
98    // taller
99  41 width = Math.round(MAX_WIDTH * initialScale);
100  41 sequencesHeight = MAX_SEQ_HEIGHT;
101   
102  41 if (width < MIN_WIDTH)
103    {
104  4 width = MIN_WIDTH;
105    }
106    }
107    }
108   
109    /**
110    * Draw the overview panel's viewport box on a graphics object
111    *
112    * @param g
113    * the graphics object to draw on
114    */
 
115  24 toggle public void drawBox(Graphics g)
116    {
117  24 g.drawRect(boxX, boxY, boxWidth, boxHeight);
118  24 g.drawRect(boxX + 1, boxY + 1, boxWidth - 2, boxHeight - 2);
119    }
120   
 
121  374 toggle public int getBoxX()
122    {
123  374 return boxX;
124    }
125   
 
126  365 toggle public int getBoxY()
127    {
128  365 return boxY;
129    }
130   
 
131  369 toggle public int getBoxWidth()
132    {
133  369 return boxWidth;
134    }
135   
 
136  351 toggle public int getBoxHeight()
137    {
138  351 return boxHeight;
139    }
140   
 
141  1523 toggle public int getWidth()
142    {
143  1523 return width;
144    }
145   
 
146  1400 toggle public int getHeight()
147    {
148  1400 return sequencesHeight + graphHeight;
149    }
150   
 
151  690 toggle public int getSequencesHeight()
152    {
153  690 return sequencesHeight;
154    }
155   
 
156  614 toggle public int getGraphHeight()
157    {
158  614 return graphHeight;
159    }
160   
 
161  306 toggle public float getPixelsPerCol()
162    {
163  306 resetAlignmentDims();
164  306 return 1 / widthRatio;
165    }
166   
 
167  306 toggle public float getPixelsPerSeq()
168    {
169  306 resetAlignmentDims();
170  306 return 1 / heightRatio;
171    }
172   
 
173  579 toggle public void setWidth(int w)
174    {
175  579 width = w < 1 ? 1 : w;
176  579 widthRatio = (float) alwidth / width;
177    }
178   
 
179  579 toggle public void setHeight(int h)
180    {
181  579 sequencesHeight = (h < 1 ? 1 : h) - graphHeight;
182  579 heightRatio = (float) alheight / sequencesHeight;
183    }
184   
185    /**
186    * Update the viewport location from a mouse click in the overview panel
187    *
188    * @param mousex
189    * x location of mouse
190    * @param mousey
191    * y location of mouse
192    * @param hiddenSeqs
193    * the alignment's hidden sequences
194    * @param hiddenCols
195    * the alignment's hidden columns
196    */
197    public abstract void updateViewportFromMouse(int mousex, int mousey,
198    HiddenSequences hiddenSeqs, HiddenColumns hiddenCols);
199   
200    /**
201    * Update the viewport location from a mouse drag within the overview's box
202    *
203    * @param mousex
204    * x location of mouse
205    * @param mousey
206    * y location of mouse
207    * @param hiddenSeqs
208    * the alignment's hidden sequences
209    * @param hiddenCols
210    * the alignment's hidden columns
211    */
212    public abstract void adjustViewportFromMouse(int mousex, int mousey,
213    HiddenSequences hiddenSeqs, HiddenColumns hiddenCols);
214   
215    /**
216    * Initialise dragging from the mouse - must be called on initial mouse click
217    * before using adjustViewportFromMouse in drag operations
218    *
219    * @param mousex
220    * x location of mouse
221    * @param mousey
222    * y location of mouse
223    * @param hiddenSeqs
224    * the alignment's hidden sequences
225    * @param hiddenCols
226    * the alignment's hidden columns
227    */
228    public abstract void setDragPoint(int x, int y,
229    HiddenSequences hiddenSeqs, HiddenColumns hiddenCols);
230   
231    /*
232    * Move the viewport so that the top left corner of the overview's box
233    * is at the mouse position (leftx, topy)
234    */
235    protected abstract void updateViewportFromTopLeft(int leftx, int topy,
236    HiddenSequences hiddenSeqs, HiddenColumns hiddenCols);
237   
238    /**
239    * Set the overview panel's box position to match the viewport
240    *
241    * @param hiddenSeqs
242    * the alignment's hidden sequences
243    * @param hiddenCols
244    * the alignment's hidden columns
245    */
246    public abstract void setBoxPosition(HiddenSequences hiddenSeqs,
247    HiddenColumns hiddenCols);
248   
249    /**
250    * Get the collection of columns used by this overview dimensions object
251    *
252    * @param hiddenCols
253    * the alignment's hidden columns
254    * @return a column collection
255    */
256    public abstract AlignmentColsCollectionI getColumns(AlignmentI al);
257   
258    /**
259    * Get the collection of rows used by this overview dimensions object
260    *
261    * @param al
262    * the alignment
263    * @return a row collection
264    */
265    public abstract AlignmentRowsCollectionI getRows(AlignmentI al);
266   
267    /**
268    * Updates overview dimensions to account for current alignment dimensions
269    */
270    protected abstract void resetAlignmentDims();
271   
272    /*
273    * Given the box coordinates in residues and sequences, set the box dimensions in the overview window
274    */
 
275  456 toggle protected void setBoxPosition(int startRes, int startSeq, int vpwidth,
276    int vpheight)
277    {
278  456 resetAlignmentDims();
279   
280    // boxX, boxY is the x,y location equivalent to startRes, startSeq
281  456 int xPos = Math.min(startRes, alwidth - vpwidth + 1);
282  456 boxX = Math.round(xPos / widthRatio);
283  456 boxY = Math.round(startSeq / heightRatio);
284   
285    // boxWidth is the width in residues translated to pixels
286  456 boxWidth = Math.round(vpwidth / widthRatio);
287   
288    // boxHeight is the height in sequences translated to pixels
289  456 boxHeight = Math.round(vpheight / heightRatio);
290    }
291   
292    /**
293    * Answers if a mouse position is in the overview's red box
294    *
295    * @param x
296    * mouse x position
297    * @param y
298    * mouse y position
299    * @return true if (x,y) is inside the box
300    */
 
301  42 toggle public boolean isPositionInBox(int x, int y)
302    {
303  42 return (x > boxX && y > boxY && x < boxX + boxWidth
304    && y < boxY + boxHeight);
305    }
306   
307    /*
308    * Given the centre x position, calculate the box's left x position
309    */
310    protected abstract int getLeftXFromCentreX(int mousex,
311    HiddenColumns hidden);
312   
313    /*
314    * Given the centre y position, calculate the box's top y position
315    */
316    protected abstract int getTopYFromCentreY(int mousey,
317    HiddenSequences hidden);
318   
319    }