Merge develop to Release_2_8_3_Branch
[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 java.awt.Color;
24 import java.awt.Graphics;
25 import java.awt.Image;
26 import java.awt.event.MouseEvent;
27 import java.awt.event.MouseListener;
28 import java.awt.event.MouseMotionListener;
29
30 import javax.swing.JPanel;
31
32 /**
33  * DOCUMENT ME!
34  * 
35  * @author $author$
36  * @version $Revision$
37  */
38 public class IdwidthAdjuster extends JPanel implements MouseListener,
39         MouseMotionListener
40 {
41   boolean active = false;
42
43   int oldX = 0;
44
45   Image image;
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
59     java.net.URL url = getClass().getResource("/images/idwidth.gif");
60
61     if (url != null)
62     {
63       image = java.awt.Toolkit.getDefaultToolkit().createImage(url);
64     }
65
66     addMouseListener(this);
67     addMouseMotionListener(this);
68   }
69
70   /**
71    * DOCUMENT ME!
72    * 
73    * @param evt
74    *          DOCUMENT ME!
75    */
76   public void mousePressed(MouseEvent evt)
77   {
78     oldX = evt.getX();
79   }
80
81   /**
82    * DOCUMENT ME!
83    * 
84    * @param evt
85    *          DOCUMENT ME!
86    */
87   public void mouseReleased(MouseEvent evt)
88   {
89     active = false;
90     repaint();
91   }
92
93   /**
94    * DOCUMENT ME!
95    * 
96    * @param evt
97    *          DOCUMENT ME!
98    */
99   public void mouseEntered(MouseEvent evt)
100   {
101     active = true;
102     repaint();
103   }
104
105   /**
106    * DOCUMENT ME!
107    * 
108    * @param evt
109    *          DOCUMENT ME!
110    */
111   public void mouseExited(MouseEvent evt)
112   {
113     active = false;
114     repaint();
115   }
116
117   /**
118    * DOCUMENT ME!
119    * 
120    * @param evt
121    *          DOCUMENT ME!
122    */
123   public void mouseDragged(MouseEvent evt)
124   {
125     active = true;
126
127     int curwidth = ap.getAlignViewport().getIdWidth();
128     int dif = evt.getX() - oldX;
129
130     if (((curwidth + dif) > 20) || (dif > 0))
131     {
132       ap.getAlignViewport().setIdWidth(curwidth + dif);
133
134       ap.paintAlignment(true);
135     }
136
137     oldX = evt.getX();
138   }
139
140   /**
141    * DOCUMENT ME!
142    * 
143    * @param evt
144    *          DOCUMENT ME!
145    */
146   public void mouseMoved(MouseEvent evt)
147   {
148   }
149
150   /**
151    * DOCUMENT ME!
152    * 
153    * @param evt
154    *          DOCUMENT ME!
155    */
156   public void mouseClicked(MouseEvent evt)
157   {
158   }
159
160   /**
161    * DOCUMENT ME!
162    * 
163    * @param g
164    *          DOCUMENT ME!
165    */
166   public void paintComponent(Graphics g)
167   {
168     g.setColor(Color.white);
169     g.fillRect(0, 0, getWidth(), getHeight());
170
171     if (active)
172     {
173       if (image != null)
174       {
175         g.drawImage(image, getWidth() - 20, 2, this);
176       }
177     }
178   }
179 }