Need reference to mainApplet
[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, ap.alignFrame.applet);\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 \r
125     if (aa[selectedRow].label.equals("Consensus"))\r
126     {\r
127       pop.addSeparator();\r
128       final CheckboxMenuItem cbmi = new CheckboxMenuItem(\r
129           "Ignore Gaps In Consensus",\r
130           ap.av.getIgnoreGapsConsensus());\r
131 \r
132       cbmi.addItemListener(new ItemListener()\r
133       {\r
134         public void itemStateChanged(ItemEvent e)\r
135         {\r
136           ap.av.setIgnoreGapsConsensus(cbmi.getState());\r
137           ap.repaint();\r
138         }\r
139       });\r
140       pop.add(cbmi);\r
141     }\r
142 \r
143      pop.show(this, evt.getX(), evt.getY());\r
144 \r
145   }\r
146 \r
147   public void paint(Graphics g)\r
148   {\r
149     drawComponent(g);\r
150   }\r
151 \r
152   public void drawComponent(Graphics g)\r
153   {\r
154     FontMetrics fm = g.getFontMetrics(g.getFont());\r
155     g.setColor(Color.white);\r
156     g.fillRect(0, 0, getSize().width, getSize().height);\r
157 \r
158     g.translate(0, scrollOffset);\r
159     g.setColor(Color.black);\r
160 \r
161     AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
162     int y = g.getFont().getSize();\r
163     int x = 0;\r
164 \r
165     if (aa != null)\r
166     {\r
167       for (int i = 0; i < aa.length; i++)\r
168       {\r
169         if (!aa[i].visible)\r
170         {\r
171           continue;\r
172         }\r
173 \r
174         x = getSize().width - fm.stringWidth(aa[i].label) - 3;\r
175 \r
176         if (aa[i].isGraph)\r
177         {\r
178           y += (aa[i].height / 3);\r
179         }\r
180 \r
181         g.drawString(aa[i].label, x, y);\r
182 \r
183         if (aa[i].isGraph)\r
184         {\r
185           y += (2 * aa[i].height / 3);\r
186         }\r
187         else\r
188         {\r
189           y += aa[i].height;\r
190         }\r
191       }\r
192     }\r
193   }\r
194 \r
195 }\r