Formatted source
[jalview.git] / src / jalview / appletgui / AnnotationLabels.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 \r
20 package jalview.appletgui;\r
21 \r
22 import java.awt.*;\r
23 import java.awt.event.*;\r
24 \r
25 import jalview.datamodel.*;\r
26 \r
27 public class AnnotationLabels\r
28     extends Panel implements ActionListener\r
29 {\r
30   boolean active = false;\r
31   AlignmentPanel ap;\r
32   boolean resizing = false;\r
33   int oldY, mouseX;\r
34   static String ADDNEW = "Add new row";\r
35   static String HIDE = "Hide this row";\r
36   static String DELETE = "Delete this row";\r
37   static String SHOWALL = "Show all hidden rows";\r
38   static String OUTPUT_TEXT = "Show Values In Textbox";\r
39   int selectedRow = 0;\r
40   int scrollOffset = 0;\r
41 \r
42   public AnnotationLabels(AlignmentPanel ap)\r
43   {\r
44     this.ap = ap;\r
45     setLayout(null);\r
46     addMouseListener(new MouseAdapter()\r
47     {\r
48       public void mousePressed(MouseEvent evt)\r
49       {\r
50         doMousePressed(evt);\r
51       }\r
52     });\r
53   }\r
54 \r
55   public void setScrollOffset(int y)\r
56   {\r
57     scrollOffset = y;\r
58     repaint();\r
59   }\r
60 \r
61   public void actionPerformed(ActionEvent evt)\r
62   {\r
63     AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
64 \r
65     if (evt.getActionCommand().equals(HIDE))\r
66     {\r
67       aa[selectedRow].visible = false;\r
68     }\r
69     else if (evt.getActionCommand().equals(SHOWALL))\r
70     {\r
71       for (int i = 0; i < aa.length; i++)\r
72       {\r
73         aa[i].visible = true;\r
74       }\r
75     }\r
76     else if (evt.getActionCommand().equals(OUTPUT_TEXT))\r
77     {\r
78       CutAndPasteTransfer cap = new CutAndPasteTransfer(false);\r
79       Frame frame = new Frame();\r
80       frame.add(cap);\r
81       jalview.bin.JalviewLite.addFrame(frame,\r
82                                        ap.alignFrame.getTitle() + " - " +\r
83                                        aa[selectedRow].label, 500, 100);\r
84       cap.setText(aa[selectedRow].toString());\r
85     }\r
86 \r
87     ap.annotationPanel.adjustPanelHeight();\r
88     setSize(getSize().width, ap.annotationPanel.getSize().height);\r
89     ap.validate();\r
90     ap.repaint();\r
91   }\r
92 \r
93   public void doMousePressed(MouseEvent evt)\r
94   {\r
95     int y = evt.getY() - scrollOffset;\r
96     AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
97     int height = 0;\r
98     for (int i = 0; i < aa.length; i++)\r
99     {\r
100       if (!aa[i].visible)\r
101       {\r
102         continue;\r
103       }\r
104 \r
105       height += aa[i].height;\r
106       if (y < height)\r
107       {\r
108         selectedRow = i;\r
109         break;\r
110       }\r
111     }\r
112 \r
113     PopupMenu pop = new PopupMenu("Annotations");\r
114     MenuItem item = new MenuItem(HIDE);\r
115     item.addActionListener(this);\r
116     pop.add(item);\r
117     item = new MenuItem(SHOWALL);\r
118     item.addActionListener(this);\r
119     pop.add(item);\r
120     this.add(pop);\r
121     item = new MenuItem(OUTPUT_TEXT);\r
122     item.addActionListener(this);\r
123     pop.add(item);\r
124     pop.show(this, evt.getX(), evt.getY());\r
125 \r
126   }\r
127 \r
128   public void paint(Graphics g)\r
129   {\r
130     drawComponent(g);\r
131   }\r
132 \r
133   public void drawComponent(Graphics g)\r
134   {\r
135     FontMetrics fm = g.getFontMetrics(g.getFont());\r
136     g.setColor(Color.white);\r
137     g.fillRect(0, 0, getSize().width, getSize().height);\r
138 \r
139     g.translate(0, scrollOffset);\r
140     g.setColor(Color.black);\r
141 \r
142     AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
143     int y = g.getFont().getSize();\r
144     int x = 0;\r
145 \r
146     if (aa != null)\r
147     {\r
148       for (int i = 0; i < aa.length; i++)\r
149       {\r
150         if (!aa[i].visible)\r
151         {\r
152           continue;\r
153         }\r
154 \r
155         x = getSize().width - fm.stringWidth(aa[i].label) - 3;\r
156 \r
157         if (aa[i].isGraph)\r
158         {\r
159           y += (aa[i].height / 3);\r
160         }\r
161 \r
162         g.drawString(aa[i].label, x, y);\r
163 \r
164         if (aa[i].isGraph)\r
165         {\r
166           y += (2 * aa[i].height / 3);\r
167         }\r
168         else\r
169         {\r
170           y += aa[i].height;\r
171         }\r
172       }\r
173     }\r
174   }\r
175 \r
176 }\r