2 * Jalview - A Sequence Alignment Editor and Viewer
\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
\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
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
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
19 package jalview.gui;
\r
22 import java.awt.event.*;
\r
23 import java.awt.image.*;
\r
24 import javax.swing.*;
\r
26 import jalview.datamodel.*;
\r
28 public class AnnotationLabels
\r
29 extends JPanel implements MouseListener,
\r
30 MouseMotionListener, ActionListener
\r
32 static String ADDNEW = "Add New Row";
\r
33 static String HIDE = "Hide This Row";
\r
34 static String DELETE = "Delete This Row";
\r
35 static String SHOWALL = "Show All Hidden Rows";
\r
36 static String OUTPUT_TEXT = "Show Values In Textbox";
\r
37 boolean active = false;
\r
40 boolean resizing = false;
\r
43 int selectedRow = 0;
\r
44 int scrollOffset = 0;
\r
46 public AnnotationLabels(AlignmentPanel ap)
\r
50 java.net.URL url = getClass().getResource("/images/idwidth.gif");
\r
55 temp = java.awt.Toolkit.getDefaultToolkit().createImage(url);
\r
60 MediaTracker mt = new MediaTracker(this);
\r
61 mt.addImage(temp, 0);
\r
64 catch (Exception ex)
\r
68 BufferedImage bi = new BufferedImage(temp.getHeight(this),
\r
69 temp.getWidth(this),
\r
70 BufferedImage.TYPE_INT_RGB);
\r
71 Graphics2D g = (Graphics2D) bi.getGraphics();
\r
72 g.rotate(Math.toRadians(90));
\r
73 g.drawImage(temp, 0, -bi.getWidth(this), this);
\r
76 addMouseListener(this);
\r
77 addMouseMotionListener(this);
\r
80 public void setScrollOffset(int y)
\r
86 public void actionPerformed(ActionEvent evt)
\r
89 AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
\r
91 if (evt.getActionCommand().equals(ADDNEW))
\r
93 String label = JOptionPane.showInputDialog(this,
\r
94 "Label for annotation");
\r
98 ap.av.alignment.addAnnotation(new AlignmentAnnotation(label,
\r
100 new Annotation[ap.av.alignment.getWidth()]));
\r
102 dif = aa[aa.length-1].height;
\r
104 else if (evt.getActionCommand().equals(HIDE))
\r
106 aa[selectedRow].visible = false;
\r
108 if (aa[selectedRow].label.equals("Conservation"))
\r
110 ap.av.showConservation = false;
\r
113 if (aa[selectedRow].label.equals("Quality"))
\r
115 ap.av.showQuality = false;
\r
118 if (aa[selectedRow].label.equals("Consensus"))
\r
120 ap.av.showIdentity = false;
\r
123 dif = aa[selectedRow].height*-1;
\r
125 else if (evt.getActionCommand().equals(DELETE))
\r
127 ap.av.alignment.deleteAnnotation(aa[selectedRow]);
\r
128 dif = aa[selectedRow].height*-1;
\r
130 else if (evt.getActionCommand().equals(SHOWALL))
\r
132 for (int i = 0; i < aa.length; i++)
\r
137 aa[i].visible = true;
\r
141 else if (evt.getActionCommand().equals(OUTPUT_TEXT))
\r
143 CutAndPasteTransfer cap = new CutAndPasteTransfer();
\r
144 Desktop.addInternalFrame(cap,
\r
145 ap.alignFrame.getTitle() + " - " +
\r
146 aa[selectedRow].label, 500,
\r
148 cap.setText(aa[selectedRow].toString());
\r
151 ap.annotationPanel.adjustPanelHeight();
\r
153 Dimension d = ap.annotationScroller.getPreferredSize();
\r
154 ap.annotationScroller.setPreferredSize(new Dimension(d.width, d.height+dif));
\r
155 d = ap.annotationSpaceFillerHolder.getPreferredSize();
\r
156 ap.annotationSpaceFillerHolder.setPreferredSize(new Dimension(
\r
157 d.width, d.height+dif));
\r
164 public void mousePressed(MouseEvent evt)
\r
169 public void mouseReleased(MouseEvent evt)
\r
175 public void mouseEntered(MouseEvent evt)
\r
181 public void mouseExited(MouseEvent evt)
\r
187 public void mouseDragged(MouseEvent evt)
\r
191 Dimension d = ap.annotationScroller.getPreferredSize();
\r
192 int dif = evt.getY() - oldY;
\r
194 dif /= ap.av.charHeight;
\r
195 dif *= ap.av.charHeight;
\r
197 if ( (d.height - dif) > 20)
\r
199 ap.annotationScroller.setPreferredSize(new Dimension(d.width,
\r
201 d = ap.annotationSpaceFillerHolder.getPreferredSize();
\r
202 ap.annotationSpaceFillerHolder.setPreferredSize(new Dimension(
\r
203 d.width, d.height - dif));
\r
210 public void mouseMoved(MouseEvent evt)
\r
214 public void mouseClicked(MouseEvent evt)
\r
216 int y = evt.getY() - scrollOffset;
\r
217 AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
\r
219 if ( (aa == null) || (aa.length == 0))
\r
221 JPopupMenu pop = new JPopupMenu("Annotations");
\r
222 JMenuItem item = new JMenuItem(ADDNEW);
\r
223 item.addActionListener(this);
\r
225 pop.show(this, evt.getX(), evt.getY());
\r
232 for (int i = 0; i < aa.length; i++)
\r
234 if (!aa[i].visible)
\r
239 height += aa[i].height;
\r
249 JPopupMenu pop = new JPopupMenu("Annotations");
\r
250 JMenuItem item = new JMenuItem(ADDNEW);
\r
251 item.addActionListener(this);
\r
253 item = new JMenuItem(HIDE);
\r
254 item.addActionListener(this);
\r
256 item = new JMenuItem(DELETE);
\r
257 item.addActionListener(this);
\r
259 item = new JMenuItem(SHOWALL);
\r
260 item.addActionListener(this);
\r
262 item = new JMenuItem(OUTPUT_TEXT);
\r
263 item.addActionListener(this);
\r
265 pop.show(this, evt.getX(), evt.getY());
\r
268 public void paintComponent(Graphics g1)
\r
270 Graphics2D g = (Graphics2D) g1;
\r
271 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
\r
272 RenderingHints.VALUE_ANTIALIAS_ON);
\r
277 public void drawComponent(Graphics2D g)
\r
279 FontMetrics fm = g.getFontMetrics(g.getFont());
\r
280 g.setColor(Color.white);
\r
281 g.fillRect(0, 0, getWidth(), getHeight());
\r
283 g.translate(0, scrollOffset);
\r
284 g.setColor(Color.black);
\r
286 AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
\r
287 int y = g.getFont().getSize();
\r
292 for (int i = 0; i < aa.length; i++)
\r
294 if (!aa[i].visible)
\r
299 x = getWidth() - fm.stringWidth(aa[i].label) - 3;
\r
303 y += (aa[i].height / 3);
\r
306 g.drawString(aa[i].label, x, y);
\r
310 y += ( (2 * aa[i].height) / 3);
\r
323 g.drawImage(image, 2, 0, this);
\r
327 if ( (aa == null) || (aa.length < 1))
\r
329 g.drawString("Right click", 2, 8);
\r
330 g.drawString("to add annotation", 2, 18);
\r