JAL-1645 Version-Rel Version 2.9 Year-Rel 2015 Licensing glob
[jalview.git] / src / jalview / appletgui / IdwidthAdjuster.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
3  * Copyright (C) 2015 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.appletgui;
22
23 import java.awt.Color;
24 import java.awt.Dimension;
25 import java.awt.Graphics;
26 import java.awt.Image;
27 import java.awt.Panel;
28 import java.awt.event.MouseEvent;
29 import java.awt.event.MouseListener;
30 import java.awt.event.MouseMotionListener;
31
32 public class IdwidthAdjuster extends Panel implements MouseListener,
33         MouseMotionListener
34 {
35   boolean active = false;
36
37   int oldX = 0;
38
39   Image image;
40
41   AlignmentPanel ap;
42
43   public IdwidthAdjuster(AlignmentPanel ap)
44   {
45     setLayout(null);
46     this.ap = ap;
47     java.net.URL url = getClass().getResource("/images/idwidth.gif");
48     if (url != null)
49     {
50       image = java.awt.Toolkit.getDefaultToolkit().getImage(url);
51     }
52
53     addMouseListener(this);
54     addMouseMotionListener(this);
55   }
56
57   public void mousePressed(MouseEvent evt)
58   {
59     oldX = evt.getX();
60   }
61
62   public void mouseReleased(MouseEvent evt)
63   {
64     active = false;
65     repaint();
66
67     /*
68      * If in a SplitFrame with co-scaled alignments, set the other's id width to
69      * match; note applet does not (yet) store this in ViewStyle
70      */
71     /*
72      * Code disabled for now as it doesn't work, don't know why; idCanvas width
73      * keeps resetting to a previous value (actually two alternating values!)
74      */
75     // final AlignViewportI viewport = ap.getAlignViewport();
76     // if (viewport.getCodingComplement() != null
77     // && viewport.isScaleProteinAsCdna())
78     // {
79     // Dimension d = ap.idPanel.idCanvas.getSize();
80     // SplitFrame sf = ap.alignFrame.getSplitFrame();
81     // final AlignmentPanel otherPanel =
82     // sf.getComplement(ap.alignFrame).alignPanel;
83     // otherPanel.setIdWidth(d.width, d.height);
84     // otherPanel.repaint();
85     // }
86   }
87
88   public void mouseEntered(MouseEvent evt)
89   {
90     active = true;
91     repaint();
92   }
93
94   public void mouseExited(MouseEvent evt)
95   {
96     active = false;
97     repaint();
98   }
99
100   public void mouseDragged(MouseEvent evt)
101   {
102     active = true;
103     Dimension d = ap.idPanel.idCanvas.getSize();
104     int dif = evt.getX() - oldX;
105
106     final int newWidth = d.width + dif;
107     if (newWidth > 20 || dif > 0)
108     {
109       ap.setIdWidth(newWidth, d.height);
110       this.setSize(newWidth, getSize().height);
111       oldX = evt.getX();
112     }
113   }
114
115   public void mouseMoved(MouseEvent evt)
116   {
117   }
118
119   public void mouseClicked(MouseEvent evt)
120   {
121   }
122
123   public void paint(Graphics g)
124   {
125     g.setColor(Color.white);
126     g.fillRect(0, 0, getSize().width, getSize().height);
127     if (active)
128     {
129       if (image != null)
130       {
131         g.drawImage(image, getSize().width - 20, 2, this);
132       }
133     }
134   }
135
136 }