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 int y = evt.getY() - scrollOffset;
\r
170 AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
\r
172 PopupMenu pop = new PopupMenu("Annotations");
\r
173 MenuItem item = new MenuItem(HIDE);
\r
174 item.addActionListener(this);
\r
176 item = new MenuItem(SHOWALL);
\r
177 item.addActionListener(this);
\r
180 item = new MenuItem(OUTPUT_TEXT);
\r
181 item.addActionListener(this);
\r
184 if (aa[selectedRow].label.equals("Consensus"))
\r
186 pop.addSeparator();
\r
187 final CheckboxMenuItem cbmi = new CheckboxMenuItem(
\r
188 "Ignore Gaps In Consensus",
\r
189 ap.av.getIgnoreGapsConsensus());
\r
191 cbmi.addItemListener(new ItemListener()
\r
193 public void itemStateChanged(ItemEvent e)
\r
195 ap.av.setIgnoreGapsConsensus(cbmi.getState());
\r
200 final MenuItem cpcons=new MenuItem(COPYCONS_SEQ);
\r
201 cpcons.addActionListener(this);
\r
205 pop.show(this, evt.getX(), evt.getY());
\r
211 * @param e DOCUMENT ME!
\r
213 protected void copy_annotseqtoclipboard(SequenceI sq)
\r
215 if (sq==null || sq.getLength()<1)
\r
217 jalview.appletgui.AlignFrame.copiedSequences = new StringBuffer();
\r
218 jalview.appletgui.AlignFrame.copiedSequences.append(sq.getName() + "\t" +
\r
219 sq.getStart() + "\t" +
\r
220 sq.getEnd() + "\t" +
\r
221 sq.getSequenceAsString() + "\n");
\r
222 if (av.hasHiddenColumns)
\r
224 jalview.appletgui.AlignFrame.copiedHiddenColumns=new Vector();
\r
225 for(int i=0; i<av.getColumnSelection().getHiddenColumns().size(); i++)
\r
227 int[] region = (int[])
\r
228 av.getColumnSelection().getHiddenColumns().elementAt(i);
\r
230 jalview.appletgui.AlignFrame.copiedHiddenColumns.addElement(new int[]{region[0],
\r
236 public void paint(Graphics g)
\r
238 drawComponent(g, getSize().width);
\r
241 public void drawComponent(Graphics g, int width)
\r
243 g.setFont(av.getFont());
\r
244 FontMetrics fm = g.getFontMetrics(av.getFont());
\r
245 g.setColor(Color.white);
\r
246 g.fillRect(0, 0, getSize().width, getSize().height);
\r
248 g.translate(0, scrollOffset);
\r
249 g.setColor(Color.black);
\r
251 AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
\r
252 int y = g.getFont().getSize();
\r
257 for (int i = 0; i < aa.length; i++)
\r
259 if (!aa[i].visible)
\r
264 x = width - fm.stringWidth(aa[i].label) - 3;
\r
268 y += (aa[i].height / 3);
\r
271 g.drawString(aa[i].label, x, y);
\r
275 y += (2 * aa[i].height / 3);
\r