2 * Jalview - A Sequence Alignment Editor and Viewer
\r
3 * Copyright (C) 2006 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
20 package jalview.appletgui;
\r
23 import java.awt.event.*;
\r
24 import java.util.Vector;
\r
26 import jalview.datamodel.*;
\r
28 public class AnnotationLabels
\r
29 extends Panel implements ActionListener, MouseListener, MouseMotionListener
\r
31 boolean active = false;
\r
34 boolean resizing = false;
\r
36 static String ADDNEW = "Add new row";
\r
37 static String HIDE = "Hide this row";
\r
38 static String DELETE = "Delete this row";
\r
39 static String SHOWALL = "Show all hidden rows";
\r
40 static String OUTPUT_TEXT = "Show Values In Textbox";
\r
41 static String COPYCONS_SEQ = "Copy Consensus Sequence";
\r
43 int selectedRow = 0;
\r
44 int scrollOffset = 0;
\r
48 public AnnotationLabels(AlignmentPanel ap)
\r
53 addMouseListener(this);
\r
54 addMouseMotionListener(this);
\r
57 public AnnotationLabels(AlignViewport av)
\r
63 public void setScrollOffset(int y)
\r
69 void getSelectedRow(int y)
\r
72 AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
\r
78 for (int i = 0; i < aa.length; i++)
\r
85 height += aa[i].height;
\r
94 public void actionPerformed(ActionEvent evt)
\r
96 AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
\r
98 if (evt.getActionCommand().equals(HIDE))
\r
100 aa[selectedRow].visible = false;
\r
102 else if (evt.getActionCommand().equals(SHOWALL))
\r
104 for (int i = 0; i < aa.length; i++)
\r
106 aa[i].visible = true;
\r
109 else if (evt.getActionCommand().equals(OUTPUT_TEXT))
\r
111 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, ap.alignFrame);
\r
112 Frame frame = new Frame();
\r
114 jalview.bin.JalviewLite.addFrame(frame,
\r
115 ap.alignFrame.getTitle() + " - " +
\r
116 aa[selectedRow].label, 500, 100);
\r
117 cap.setText(aa[selectedRow].toString());
\r
119 else if (evt.getActionCommand().equals(COPYCONS_SEQ))
\r
121 SequenceI cons=av.getConsensusSeq();
\r
123 copy_annotseqtoclipboard(cons);
\r
126 ap.annotationPanel.adjustPanelHeight();
\r
127 setSize(getSize().width, ap.annotationPanel.getSize().height);
\r
132 public void mouseMoved(MouseEvent evt)
\r
134 getSelectedRow(evt.getY() - scrollOffset);
\r
136 if (selectedRow > -1)
\r
138 if (tooltip == null)
\r
139 tooltip = new Tooltip(ap.av.alignment.
\r
140 getAlignmentAnnotation()[selectedRow].
\r
144 tooltip.setTip(ap.av.alignment.
\r
145 getAlignmentAnnotation()[selectedRow].description);
\r
150 else if (tooltip != null)
\r
152 tooltip.setTip("");
\r
157 public void mouseDragged(MouseEvent evt)
\r
159 public void mouseClicked(MouseEvent evt)
\r
161 public void mouseReleased(MouseEvent evt)
\r
163 public void mouseEntered(MouseEvent evt)
\r
165 public void mouseExited(MouseEvent evt)
\r
167 public void mousePressed(MouseEvent evt)
\r
169 AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
\r
171 PopupMenu pop = new PopupMenu("Annotations");
\r
172 MenuItem item = new MenuItem(HIDE);
\r
173 item.addActionListener(this);
\r
175 item = new MenuItem(SHOWALL);
\r
176 item.addActionListener(this);
\r
179 item = new MenuItem(OUTPUT_TEXT);
\r
180 item.addActionListener(this);
\r
183 if (aa[selectedRow].label.equals("Consensus"))
\r
185 pop.addSeparator();
\r
186 final CheckboxMenuItem cbmi = new CheckboxMenuItem(
\r
187 "Ignore Gaps In Consensus",
\r
188 ap.av.getIgnoreGapsConsensus());
\r
190 cbmi.addItemListener(new ItemListener()
\r
192 public void itemStateChanged(ItemEvent e)
\r
194 ap.av.setIgnoreGapsConsensus(cbmi.getState());
\r
199 final MenuItem cpcons=new MenuItem(COPYCONS_SEQ);
\r
200 cpcons.addActionListener(this);
\r
204 pop.show(this, evt.getX(), evt.getY());
\r
210 * @param e DOCUMENT ME!
\r
212 protected void copy_annotseqtoclipboard(SequenceI sq)
\r
214 if (sq==null || sq.getLength()<1)
\r
216 jalview.appletgui.AlignFrame.copiedSequences = new StringBuffer();
\r
217 jalview.appletgui.AlignFrame.copiedSequences.append(sq.getName() + "\t" +
\r
218 sq.getStart() + "\t" +
\r
219 sq.getEnd() + "\t" +
\r
220 sq.getSequenceAsString() + "\n");
\r
221 if (av.hasHiddenColumns)
\r
223 jalview.appletgui.AlignFrame.copiedHiddenColumns=new Vector();
\r
224 for(int i=0; i<av.getColumnSelection().getHiddenColumns().size(); i++)
\r
226 int[] region = (int[])
\r
227 av.getColumnSelection().getHiddenColumns().elementAt(i);
\r
229 jalview.appletgui.AlignFrame.copiedHiddenColumns.addElement(new int[]{region[0],
\r
235 public void paint(Graphics g)
\r
237 drawComponent(g, getSize().width);
\r
240 public void drawComponent(Graphics g, int width)
\r
242 g.setFont(av.getFont());
\r
243 FontMetrics fm = g.getFontMetrics(av.getFont());
\r
244 g.setColor(Color.white);
\r
245 g.fillRect(0, 0, getSize().width, getSize().height);
\r
247 g.translate(0, scrollOffset);
\r
248 g.setColor(Color.black);
\r
250 AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
\r
251 int y = g.getFont().getSize();
\r
256 for (int i = 0; i < aa.length; i++)
\r
258 if (!aa[i].visible)
\r
263 x = width - fm.stringWidth(aa[i].label) - 3;
\r
267 y += (aa[i].height / 3);
\r
270 g.drawString(aa[i].label, x, y);
\r
274 y += (2 * aa[i].height / 3);
\r