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
32 boolean active = false;
\r
35 boolean resizing = false;
\r
37 static String ADDNEW = "Add new row";
\r
38 static String HIDE = "Hide this row";
\r
39 static String DELETE = "Delete this row";
\r
40 static String SHOWALL = "Show all hidden rows";
\r
41 static String OUTPUT_TEXT = "Show Values In Textbox";
\r
42 static String COPYCONS_SEQ = "Copy Consensus Sequence";
\r
44 int selectedRow = 0;
\r
45 int scrollOffset = 0;
\r
49 public AnnotationLabels(AlignmentPanel ap)
\r
54 addMouseListener(this);
\r
55 addMouseMotionListener(this);
\r
58 public AnnotationLabels(AlignViewport av)
\r
64 public void setScrollOffset(int y)
\r
70 void getSelectedRow(int y)
\r
73 AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
\r
79 for (int i = 0; i < aa.length; i++)
\r
86 height += aa[i].height;
\r
95 public void actionPerformed(ActionEvent evt)
\r
97 AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
\r
99 if (evt.getActionCommand().equals(HIDE))
\r
101 aa[selectedRow].visible = false;
\r
103 else if (evt.getActionCommand().equals(SHOWALL))
\r
105 for (int i = 0; i < aa.length; i++)
\r
107 aa[i].visible = true;
\r
110 else if (evt.getActionCommand().equals(OUTPUT_TEXT))
\r
112 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, ap.alignFrame);
\r
113 Frame frame = new Frame();
\r
115 jalview.bin.JalviewLite.addFrame(frame,
\r
116 ap.alignFrame.getTitle() + " - " +
\r
117 aa[selectedRow].label, 500, 100);
\r
118 cap.setText(aa[selectedRow].toString());
\r
120 else if (evt.getActionCommand().equals(COPYCONS_SEQ))
\r
122 SequenceI cons=av.getConsensusSeq();
\r
124 copy_annotseqtoclipboard(cons);
\r
127 ap.annotationPanel.adjustPanelHeight();
\r
128 setSize(getSize().width, ap.annotationPanel.getSize().height);
\r
133 public void mouseMoved(MouseEvent evt)
\r
135 getSelectedRow(evt.getY() - scrollOffset);
\r
137 if (selectedRow > -1)
\r
139 if (tooltip == null)
\r
140 tooltip = new Tooltip(ap.av.alignment.
\r
141 getAlignmentAnnotation()[selectedRow].
\r
145 tooltip.setTip(ap.av.alignment.
\r
146 getAlignmentAnnotation()[selectedRow].description);
\r
151 else if (tooltip != null)
\r
153 tooltip.setTip("");
\r
158 public void mouseDragged(MouseEvent evt)
\r
160 public void mouseClicked(MouseEvent evt)
\r
162 public void mouseReleased(MouseEvent evt)
\r
164 public void mouseEntered(MouseEvent evt)
\r
166 public void mouseExited(MouseEvent evt)
\r
168 public void mousePressed(MouseEvent evt)
\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 update(Graphics g)
\r
241 public void paint(Graphics g)
\r
243 int w = getSize().width;
\r
244 if (image == null || w != image.getWidth(this))
\r
246 image = createImage(w, ap.annotationPanel.getSize().height);
\r
249 drawComponent(image.getGraphics(), w);
\r
250 g.drawImage(image,0,0,this);
\r
253 public void drawComponent(Graphics g, int width)
\r
255 g.setFont(av.getFont());
\r
256 FontMetrics fm = g.getFontMetrics(av.getFont());
\r
257 g.setColor(Color.white);
\r
258 g.fillRect(0, 0, getSize().width, getSize().height);
\r
260 g.translate(0, scrollOffset);
\r
261 g.setColor(Color.black);
\r
263 AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
\r
264 int y = g.getFont().getSize();
\r
269 for (int i = 0; i < aa.length; i++)
\r
271 if (!aa[i].visible)
\r
276 x = width - fm.stringWidth(aa[i].label) - 3;
\r
280 y += (aa[i].height / 3);
\r
283 g.drawString(aa[i].label, x, y);
\r
287 y += (2 * aa[i].height / 3);
\r