JAL-3490 unit test for ignore hidden regions with selection group
[jalview.git] / src / jalview / gui / IdwidthAdjuster.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.gui;
22
23 import jalview.api.AlignViewportI;
24
25 import java.awt.Color;
26 import java.awt.Cursor;
27 import java.awt.Graphics;
28 import java.awt.event.MouseEvent;
29 import java.awt.event.MouseListener;
30 import java.awt.event.MouseMotionListener;
31
32 import javax.swing.JPanel;
33
34 /**
35  * DOCUMENT ME!
36  * 
37  * @author $author$
38  * @version $Revision$
39  */
40 public class IdwidthAdjuster extends JPanel
41         implements MouseListener, MouseMotionListener
42 {
43   boolean active = false;
44
45   int oldX = 0;
46
47   AlignmentPanel ap;
48
49   /**
50    * Creates a new IdwidthAdjuster object.
51    * 
52    * @param ap
53    *          DOCUMENT ME!
54    */
55   public IdwidthAdjuster(AlignmentPanel ap)
56   {
57     this.ap = ap;
58     setBackground(Color.white);
59     addMouseListener(this);
60     addMouseMotionListener(this);
61   }
62
63   /**
64    * DOCUMENT ME!
65    * 
66    * @param evt
67    *          DOCUMENT ME!
68    */
69   @Override
70   public void mousePressed(MouseEvent evt)
71   {
72     oldX = evt.getX();
73   }
74
75   /**
76    * DOCUMENT ME!
77    * 
78    * @param evt
79    *          DOCUMENT ME!
80    */
81   @Override
82   public void mouseReleased(MouseEvent evt)
83   {
84     active = false;
85     repaint();
86
87     /*
88      * If in a SplitFrame with co-scaled alignments, set the other's id width to
89      * match
90      */
91     final AlignViewportI viewport = ap.getAlignViewport();
92     if (viewport.getCodingComplement() != null
93             && viewport.isScaleProteinAsCdna())
94     {
95       viewport.getCodingComplement().setIdWidth(viewport.getIdWidth());
96       SplitFrame sf = (SplitFrame) ap.alignFrame.getSplitViewContainer();
97       sf.repaint();
98     }
99
100   }
101
102   /**
103    * DOCUMENT ME!
104    * 
105    * @param evt
106    *          DOCUMENT ME!
107    */
108   @Override
109   public void mouseEntered(MouseEvent evt)
110   {
111     active = true;
112     repaint();
113   }
114
115   /**
116    * DOCUMENT ME!
117    * 
118    * @param evt
119    *          DOCUMENT ME!
120    */
121   @Override
122   public void mouseExited(MouseEvent evt)
123   {
124     active = false;
125     repaint();
126   }
127
128   /**
129    * DOCUMENT ME!
130    * 
131    * @param evt
132    *          DOCUMENT ME!
133    */
134   @Override
135   public void mouseDragged(MouseEvent evt)
136   {
137     active = true;
138
139     final AlignViewportI viewport = ap.getAlignViewport();
140     int curwidth = viewport.getIdWidth();
141     int dif = evt.getX() - oldX;
142
143     final int newWidth = curwidth + dif;
144     if ((newWidth > 20) || (dif > 0))
145     {
146       viewport.setIdWidth(newWidth);
147
148       ap.paintAlignment(true, false);
149     }
150
151     oldX = evt.getX();
152   }
153
154   /**
155    * DOCUMENT ME!
156    * 
157    * @param evt
158    *          DOCUMENT ME!
159    */
160   @Override
161   public void mouseMoved(MouseEvent evt)
162   {
163   }
164
165   /**
166    * DOCUMENT ME!
167    * 
168    * @param evt
169    *          DOCUMENT ME!
170    */
171   @Override
172   public void mouseClicked(MouseEvent evt)
173   {
174   }
175
176   /**
177    * DOCUMENT ME!
178    * 
179    * @param g
180    *          DOCUMENT ME!
181    */
182   @Override
183   public void paintComponent(Graphics g)
184   {
185     g.setColor(Color.white);
186     g.fillRect(0, 0, getWidth(), getHeight());
187
188     if (active)
189     {
190         setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
191     }
192   }
193 }