-\r
-package jalview.appletgui;\r
-\r
-import java.awt.event.*;\r
-import java.awt.*;\r
-import jalview.datamodel.*;\r
-\r
-public class AnnotationLabels extends Panel implements ActionListener\r
-{\r
- boolean active = false;\r
- AlignmentPanel ap ;\r
- boolean resizing = false;\r
- int oldY, mouseX;\r
- static String ADDNEW = "Add new row";\r
- static String HIDE = "Hide this row";\r
- static String DELETE = "Delete this row";\r
- static String SHOWALL="Show all hidden rows";\r
- int selectedRow = 0;\r
- int scrollOffset = 0;\r
-\r
- public AnnotationLabels(AlignmentPanel ap)\r
- {\r
- this.ap = ap;\r
- setLayout(null);\r
- addMouseListener(new MouseAdapter()\r
- {public void mousePressed(MouseEvent evt)\r
- {\r
- doMousePressed(evt);\r
- }\r
- });\r
- }\r
-\r
- public void setScrollOffset(int y)\r
- {\r
- scrollOffset = y;\r
- repaint();\r
- }\r
-\r
- public void actionPerformed(ActionEvent evt)\r
- {\r
- AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
-\r
- if(evt.getActionCommand().equals(HIDE))\r
- {\r
- aa[selectedRow].visible = false;\r
- }\r
- else if(evt.getActionCommand().equals(SHOWALL))\r
- {\r
- for(int i=0; i<aa.length; i++)\r
- aa[i].visible = true;\r
- }\r
- ap.annotationPanel.adjustPanelHeight();\r
- setSize(getSize().width,ap.annotationPanel.getSize().height);\r
- ap.validate();\r
- ap.repaint();\r
- }\r
-\r
- public void doMousePressed(MouseEvent evt)\r
- {\r
- int y = evt.getY() - scrollOffset;\r
- AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
- int height = 0;\r
- for (int i = 0; i < aa.length; i++)\r
- {\r
- if (!aa[i].visible)\r
- continue;\r
-\r
- height += aa[i].height;\r
- if (y < height)\r
- {\r
- selectedRow = i;\r
- break;\r
- }\r
- }\r
-\r
- PopupMenu pop = new PopupMenu("Annotations");\r
- MenuItem item = new MenuItem(HIDE);\r
- item.addActionListener(this);\r
- pop.add(item);\r
- item = new MenuItem(SHOWALL);\r
- item.addActionListener(this);\r
- pop.add(item);\r
- this.add(pop);\r
- pop.show(this, evt.getX(), evt.getY());\r
-\r
- }\r
-\r
- public void paint(Graphics g)\r
- {\r
- drawComponent(g);\r
- }\r
-\r
- public void drawComponent(Graphics g)\r
- {\r
- FontMetrics fm = g.getFontMetrics(g.getFont());\r
- g.setColor(Color.white);\r
- g.fillRect(0,0, getSize().width, getSize().height);\r
-\r
- g.translate(0, scrollOffset);\r
- g.setColor(Color.black);\r
-\r
- AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
- int y = g.getFont().getSize();\r
- int x = 0;\r
-\r
- if(aa!=null)\r
- for(int i=0; i<aa.length; i++)\r
- {\r
- if(!aa[i].visible)\r
- continue;\r
-\r
- x = getSize().width - fm.stringWidth(aa[i].label)-3;\r
-\r
- if(aa[i].isGraph)\r
- y+=(aa[i].height/3);\r
-\r
- g.drawString(aa[i].label, x, y);\r
-\r
- if(aa[i].isGraph)\r
- y+=(2*aa[i].height/3);\r
- else\r
- y+=aa[i].height;\r
- }\r
- }\r
-\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer
+ * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+package jalview.appletgui;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.util.Vector;
+
+import jalview.datamodel.*;
+
+public class AnnotationLabels
+ extends Panel implements ActionListener
+{
+ boolean active = false;
+ AlignmentPanel ap;
+ AlignViewport av;
+ boolean resizing = false;
+ int oldY, mouseX;
+ static String ADDNEW = "Add new row";
+ static String HIDE = "Hide this row";
+ static String DELETE = "Delete this row";
+ static String SHOWALL = "Show all hidden rows";
+ static String OUTPUT_TEXT = "Show Values In Textbox";
+ static String COPYCONS_SEQ = "Copy Consensus Sequence";
+
+ int selectedRow = 0;
+ int scrollOffset = 0;
+
+ public AnnotationLabels(AlignmentPanel ap)
+ {
+ this.ap = ap;
+ this.av = ap.av;
+ setLayout(null);
+ addMouseListener(new MouseAdapter()
+ {
+ public void mousePressed(MouseEvent evt)
+ {
+ doMousePressed(evt);
+ }
+ });
+ }
+
+ public AnnotationLabels(AlignViewport av)
+{
+ this.av = av;
+}
+
+
+ public void setScrollOffset(int y)
+ {
+ scrollOffset = y;
+ repaint();
+ }
+
+ public void actionPerformed(ActionEvent evt)
+ {
+ AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
+
+ if (evt.getActionCommand().equals(HIDE))
+ {
+ aa[selectedRow].visible = false;
+ }
+ else if (evt.getActionCommand().equals(SHOWALL))
+ {
+ for (int i = 0; i < aa.length; i++)
+ {
+ aa[i].visible = true;
+ }
+ }
+ else if (evt.getActionCommand().equals(OUTPUT_TEXT))
+ {
+ CutAndPasteTransfer cap = new CutAndPasteTransfer(false, ap.alignFrame);
+ Frame frame = new Frame();
+ frame.add(cap);
+ jalview.bin.JalviewLite.addFrame(frame,
+ ap.alignFrame.getTitle() + " - " +
+ aa[selectedRow].label, 500, 100);
+ cap.setText(aa[selectedRow].toString());
+ }
+ else if (evt.getActionCommand().equals(COPYCONS_SEQ))
+ {
+ SequenceI cons=av.getConsensusSeq();
+ if (cons!=null)
+ copy_annotseqtoclipboard(cons);
+
+ }
+ ap.annotationPanel.adjustPanelHeight();
+ setSize(getSize().width, ap.annotationPanel.getSize().height);
+ ap.validate();
+ ap.repaint();
+ }
+
+ public void doMousePressed(MouseEvent evt)
+ {
+ int y = evt.getY() - scrollOffset;
+ AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();
+ int height = 0;
+ for (int i = 0; i < aa.length; i++)
+ {
+ if (!aa[i].visible)
+ {
+ continue;
+ }
+
+ height += aa[i].height;
+ if (y < height)
+ {
+ selectedRow = i;
+ break;
+ }
+ }
+
+ PopupMenu pop = new PopupMenu("Annotations");
+ MenuItem item = new MenuItem(HIDE);
+ item.addActionListener(this);
+ pop.add(item);
+ item = new MenuItem(SHOWALL);
+ item.addActionListener(this);
+ pop.add(item);
+ this.add(pop);
+ item = new MenuItem(OUTPUT_TEXT);
+ item.addActionListener(this);
+ pop.add(item);
+
+ if (aa[selectedRow].label.equals("Consensus"))
+ {
+ pop.addSeparator();
+ final CheckboxMenuItem cbmi = new CheckboxMenuItem(
+ "Ignore Gaps In Consensus",
+ ap.av.getIgnoreGapsConsensus());
+
+ cbmi.addItemListener(new ItemListener()
+ {
+ public void itemStateChanged(ItemEvent e)
+ {
+ ap.av.setIgnoreGapsConsensus(cbmi.getState());
+ ap.repaint();
+ }
+ });
+ pop.add(cbmi);
+ final MenuItem cpcons=new MenuItem(COPYCONS_SEQ);
+ cpcons.addActionListener(this);
+ pop.add(cpcons);
+ }
+
+ pop.show(this, evt.getX(), evt.getY());
+
+ }
+/**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ protected void copy_annotseqtoclipboard(SequenceI sq)
+ {
+ if (sq==null || sq.getLength()<1)
+ return;
+ jalview.appletgui.AlignFrame.copiedSequences = new StringBuffer();
+ jalview.appletgui.AlignFrame.copiedSequences.append(sq.getName() + "\t" +
+ sq.getStart() + "\t" +
+ sq.getEnd() + "\t" +
+ sq.getSequence() + "\n");
+ if (av.hasHiddenColumns)
+ {
+ jalview.appletgui.AlignFrame.copiedHiddenColumns=new Vector();
+ for(int i=0; i<av.getColumnSelection().getHiddenColumns().size(); i++)
+ {
+ int[] region = (int[])
+ av.getColumnSelection().getHiddenColumns().elementAt(i);
+
+ jalview.appletgui.AlignFrame.copiedHiddenColumns.addElement(new int[]{region[0],
+ region[1]});
+ }
+ }
+ }
+
+ public void paint(Graphics g)
+ {
+ drawComponent(g, getSize().width);
+ }
+
+ public void drawComponent(Graphics g, int width)
+ {
+ g.setFont(av.getFont());
+ FontMetrics fm = g.getFontMetrics(av.getFont());
+ g.setColor(Color.white);
+ g.fillRect(0, 0, getSize().width, getSize().height);
+
+ g.translate(0, scrollOffset);
+ g.setColor(Color.black);
+
+ AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
+ int y = g.getFont().getSize();
+ int x = 0;
+
+ if (aa != null)
+ {
+ for (int i = 0; i < aa.length; i++)
+ {
+ if (!aa[i].visible)
+ {
+ continue;
+ }
+
+ x = width - fm.stringWidth(aa[i].label) - 3;
+
+ if (aa[i].graph>0)
+ {
+ y += (aa[i].height / 3);
+ }
+
+ g.drawString(aa[i].label, x, y);
+
+ if (aa[i].graph>0)
+ {
+ y += (2 * aa[i].height / 3);
+ }
+ else
+ {
+ y += aa[i].height;
+ }
+ }
+ }
+ }
+
+}