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 EDITNAME = "Edit label/description";
\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 Dialog editNameDialog;
\r
50 Button okDialog = new Button("Accept");
\r
51 Button cancelDialog = new Button("Cancel");
\r
54 public AnnotationLabels(AlignmentPanel ap)
\r
59 addMouseListener(this);
\r
60 addMouseMotionListener(this);
\r
61 okDialog.addActionListener(this);
\r
62 cancelDialog.addActionListener(this);
\r
65 public AnnotationLabels(AlignViewport av)
\r
71 public void setScrollOffset(int y)
\r
77 void getSelectedRow(int y)
\r
80 AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
\r
86 for (int i = 0; i < aa.length; i++)
\r
93 height += aa[i].height;
\r
102 public void actionPerformed(ActionEvent evt)
\r
104 AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
\r
106 if(evt.getActionCommand().equals(EDITNAME))
\r
108 TextField id = new TextField(aa[selectedRow].label, 40);
\r
109 TextField description = new TextField(aa[selectedRow].description, 40);
\r
110 Panel panel = new Panel(new BorderLayout());
\r
111 Panel panel2 = new Panel(new BorderLayout());
\r
112 panel2.add(new Label(" Annotation Label "), BorderLayout.WEST);
\r
113 panel2.add(id, BorderLayout.CENTER);
\r
114 panel.add(panel2, BorderLayout.NORTH);
\r
115 panel2 = new Panel(new BorderLayout());
\r
116 panel2.add(new Label("Annotation Description "), BorderLayout.WEST);
\r
117 panel2.add(description, BorderLayout.CENTER);
\r
118 panel.add(panel2, BorderLayout.CENTER);
\r
120 panel2 = new Panel(new FlowLayout());
\r
122 panel2.add(okDialog);
\r
123 panel2.add(cancelDialog);
\r
125 panel.add(panel2, BorderLayout.SOUTH);
\r
127 editNameDialog = new Dialog(ap.alignFrame,
\r
128 "Edit Annotation Name / Description",
\r
131 editNameDialog.add(panel, BorderLayout.NORTH);
\r
133 editNameDialog.setBounds(ap.alignFrame.getBounds().x
\r
134 +(ap.alignFrame.getSize().width-500)/2 ,
\r
135 ap.alignFrame.getBounds().y
\r
136 +(ap.alignFrame.getSize().height-120)/2,
\r
139 editNameDialog.show();
\r
141 if (editNameDialog != null)
\r
143 aa[selectedRow].label=id.getText();
\r
144 aa[selectedRow].description=description.getText();
\r
149 if (evt.getActionCommand().equals(HIDE))
\r
151 aa[selectedRow].visible = false;
\r
153 else if (evt.getSource() == okDialog || evt.getSource() == cancelDialog)
\r
155 editNameDialog.setVisible(false);
\r
156 if (evt.getSource() == cancelDialog)
\r
157 editNameDialog = null;
\r
159 else if (evt.getActionCommand().equals(SHOWALL))
\r
161 for (int i = 0; i < aa.length; i++)
\r
163 aa[i].visible = true;
\r
166 else if (evt.getActionCommand().equals(OUTPUT_TEXT))
\r
168 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, ap.alignFrame);
\r
169 Frame frame = new Frame();
\r
171 jalview.bin.JalviewLite.addFrame(frame,
\r
172 ap.alignFrame.getTitle() + " - " +
\r
173 aa[selectedRow].label, 500, 100);
\r
174 cap.setText(aa[selectedRow].toString());
\r
176 else if (evt.getActionCommand().equals(COPYCONS_SEQ))
\r
178 SequenceI cons=av.getConsensusSeq();
\r
180 copy_annotseqtoclipboard(cons);
\r
183 ap.annotationPanel.adjustPanelHeight();
\r
184 setSize(getSize().width, ap.annotationPanel.getSize().height);
\r
189 public void mouseMoved(MouseEvent evt)
\r
191 getSelectedRow(evt.getY() - scrollOffset);
\r
193 if (selectedRow > -1)
\r
195 if (tooltip == null)
\r
196 tooltip = new Tooltip(ap.av.alignment.
\r
197 getAlignmentAnnotation()[selectedRow].
\r
201 tooltip.setTip(ap.av.alignment.
\r
202 getAlignmentAnnotation()[selectedRow].description);
\r
207 else if (tooltip != null)
\r
209 tooltip.setTip("");
\r
214 public void mouseDragged(MouseEvent evt)
\r
216 public void mouseClicked(MouseEvent evt)
\r
218 public void mouseReleased(MouseEvent evt)
\r
220 public void mouseEntered(MouseEvent evt)
\r
222 public void mouseExited(MouseEvent evt)
\r
224 public void mousePressed(MouseEvent evt)
\r
226 AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
\r
228 PopupMenu pop = new PopupMenu("Annotations");
\r
230 MenuItem item = new MenuItem(EDITNAME);
\r
231 item.addActionListener(this);
\r
233 item = new MenuItem(HIDE);
\r
234 item.addActionListener(this);
\r
236 item = new MenuItem(SHOWALL);
\r
237 item.addActionListener(this);
\r
240 item = new MenuItem(OUTPUT_TEXT);
\r
241 item.addActionListener(this);
\r
244 if (aa[selectedRow]==ap.av.consensus)
\r
246 pop.addSeparator();
\r
247 final CheckboxMenuItem cbmi = new CheckboxMenuItem(
\r
248 "Ignore Gaps In Consensus",
\r
249 ap.av.getIgnoreGapsConsensus());
\r
251 cbmi.addItemListener(new ItemListener()
\r
253 public void itemStateChanged(ItemEvent e)
\r
255 ap.av.setIgnoreGapsConsensus(cbmi.getState());
\r
260 final MenuItem cpcons=new MenuItem(COPYCONS_SEQ);
\r
261 cpcons.addActionListener(this);
\r
265 pop.show(this, evt.getX(), evt.getY());
\r
271 * @param e DOCUMENT ME!
\r
273 protected void copy_annotseqtoclipboard(SequenceI sq)
\r
275 if (sq==null || sq.getLength()<1)
\r
277 jalview.appletgui.AlignFrame.copiedSequences = new StringBuffer();
\r
278 jalview.appletgui.AlignFrame.copiedSequences.append(sq.getName() + "\t" +
\r
279 sq.getStart() + "\t" +
\r
280 sq.getEnd() + "\t" +
\r
281 sq.getSequenceAsString() + "\n");
\r
282 if (av.hasHiddenColumns)
\r
284 jalview.appletgui.AlignFrame.copiedHiddenColumns=new Vector();
\r
285 for(int i=0; i<av.getColumnSelection().getHiddenColumns().size(); i++)
\r
287 int[] region = (int[])
\r
288 av.getColumnSelection().getHiddenColumns().elementAt(i);
\r
290 jalview.appletgui.AlignFrame.copiedHiddenColumns.addElement(new int[]{region[0],
\r
296 public void update(Graphics g)
\r
301 public void paint(Graphics g)
\r
303 int w = getSize().width;
\r
304 if (image == null || w != image.getWidth(this))
\r
306 image = createImage(w, ap.annotationPanel.getSize().height);
\r
309 drawComponent(image.getGraphics(), w);
\r
310 g.drawImage(image,0,0,this);
\r
313 public void drawComponent(Graphics g, int width)
\r
315 g.setFont(av.getFont());
\r
316 FontMetrics fm = g.getFontMetrics(av.getFont());
\r
317 g.setColor(Color.white);
\r
318 g.fillRect(0, 0, getSize().width, getSize().height);
\r
320 g.translate(0, scrollOffset);
\r
321 g.setColor(Color.black);
\r
323 AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
\r
324 int y = g.getFont().getSize();
\r
329 for (int i = 0; i < aa.length; i++)
\r
331 if (!aa[i].visible)
\r
336 x = width - fm.stringWidth(aa[i].label) - 3;
\r
340 y += (aa[i].height / 3);
\r
343 g.drawString(aa[i].label, x, y);
\r
347 y += (2 * aa[i].height / 3);
\r