JAL-2388 Working hidden regions hide/show in desktop
[jalview.git] / src / jalview / viewmodel / ViewportRanges.java
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 jalview.datamodel.AlignmentI;
24
25 /**
26  * Embryonic class which: Supplies and updates viewport properties relating to
27  * position such as: start and end residues and sequences; ideally will serve
28  * hidden columns/rows too. Intention also to support calculations for
29  * positioning, scrolling etc. such as finding the middle of the viewport,
30  * checking for scrolls off screen
31  */
32 public class ViewportRanges extends ViewportProperties
33 {
34   // start residue of viewport
35   private int startRes;
36
37   // end residue of viewport
38   private int endRes;
39
40   // start sequence of viewport
41   private int startSeq;
42
43   // end sequence of viewport
44   private int endSeq;
45
46   // alignment
47   private AlignmentI al;
48
49   /**
50    * Constructor
51    * 
52    * @param alignment
53    *          the viewport's alignment
54    */
55   public ViewportRanges(AlignmentI alignment)
56   {
57     // initial values of viewport settings
58     this.startRes = 0;
59     this.endRes = alignment.getWidth() - 1;
60     this.startSeq = 0;
61     this.endSeq = alignment.getHeight() - 1;
62     this.al = alignment;
63   }
64
65   /**
66    * Get alignment width in cols, including hidden cols
67    */
68   public int getAbsoluteAlignmentWidth()
69   {
70     return al.getWidth();
71   }
72
73   /**
74    * Get alignment height in rows, including hidden rows
75    */
76   public int getAbsoluteAlignmentHeight()
77   {
78     return al.getHeight() + al.getHiddenSequences().getSize();
79   }
80
81   /**
82    * Get alignment width in cols, excluding hidden cols
83    */
84   public int getVisibleAlignmentWidth()
85   {
86     return al.getWidth() - al.getHiddenColumns().getSize();
87   }
88
89   /**
90    * Get alignment height in rows, excluding hidden rows
91    */
92   public int getVisibleAlignmentHeight()
93   {
94     return al.getHeight();
95   }
96
97   /**
98    * Set first residue visible in the viewport
99    * 
100    * @param res
101    *          residue position
102    */
103   public void setStartRes(int res)
104   {
105     if (res > al.getWidth() - 1)
106     {
107       res = al.getWidth() - 1;
108     }
109     else if (res < 0)
110     {
111       res = 0;
112     }
113     this.startRes = res;
114   }
115
116   /**
117    * Set last residue visible in the viewport
118    * 
119    * @param res
120    *          residue position
121    */
122   public void setEndRes(int res)
123   {
124     if (res >= al.getWidth())
125     {
126       res = al.getWidth() - 1;
127     }
128     else if (res < 0)
129     {
130       res = 0;
131     }
132     this.endRes = res;
133   }
134
135   /**
136    * Set the first sequence visible in the viewport
137    * 
138    * @param seq
139    *          sequence position
140    */
141   public void setStartSeq(int seq)
142   {
143     if (seq > al.getHeight() - 1)
144     {
145       seq = al.getHeight() - 1;
146     }
147     else if (seq < 0)
148     {
149       seq = 0;
150     }
151     this.startSeq = seq;
152   }
153
154   /**
155    * Set the last sequence visible in the viewport
156    * 
157    * @param seq
158    *          sequence position
159    */
160   public void setEndSeq(int seq)
161   {
162     if (seq >= al.getHeight())
163     {
164       seq = al.getHeight() - 1;
165     }
166     else if (seq < 0)
167     {
168       seq = 0;
169     }
170     this.endSeq = seq;
171   }
172
173   /**
174    * Get start residue of viewport
175    */
176   public int getStartRes()
177   {
178     return startRes;
179   }
180
181   /**
182    * Get end residue of viewport
183    */
184   public int getEndRes()
185   {
186     return endRes;
187   }
188
189   /**
190    * Get start sequence of viewport
191    */
192   public int getStartSeq()
193   {
194     return startSeq;
195   }
196
197   /**
198    * Get end sequence of viewport
199    */
200   public int getEndSeq()
201   {
202     return endSeq;
203   }
204 }