output values to textbox
[jalview.git] / src / jalview / gui / AnnotationLabels.java
1 \r
2 package jalview.gui;\r
3 \r
4 import javax.swing.*;\r
5 import java.awt.event.*;\r
6 import java.awt.*;\r
7 import java.awt.image.*;\r
8 import jalview.datamodel.*;\r
9 import jalview.io.FormatAdapter;\r
10 \r
11 public class AnnotationLabels extends JPanel implements MouseListener, MouseMotionListener, ActionListener\r
12 {\r
13   boolean active = false;\r
14   Image image;\r
15   AlignmentPanel ap ;\r
16   boolean resizing = false;\r
17   int oldY, mouseX;\r
18   static String ADDNEW = "Add New Row";\r
19   static String HIDE = "Hide This Row";\r
20   static String DELETE = "Delete This Row";\r
21   static String SHOWALL="Show All Hidden Rows";\r
22   static String OUTPUT_TEXT="Show Values In Textbox";\r
23   int selectedRow = 0;\r
24   int scrollOffset = 0;\r
25 \r
26   public AnnotationLabels(AlignmentPanel ap)\r
27   {\r
28     this.ap = ap;\r
29 \r
30     java.net.URL url = getClass().getResource("/images/idwidth.gif");\r
31     Image temp = null;\r
32     if (url != null)\r
33       temp = java.awt.Toolkit.getDefaultToolkit().createImage(url);\r
34 \r
35     try\r
36     {\r
37       MediaTracker mt = new MediaTracker(this);\r
38       mt.addImage(temp, 0);\r
39       mt.waitForID(0);\r
40     }\r
41     catch (Exception ex) {}\r
42 \r
43     BufferedImage bi = new BufferedImage(temp.getHeight(this), temp.getWidth(this),\r
44                                          BufferedImage.TYPE_INT_RGB);\r
45     Graphics2D g = (Graphics2D) bi.getGraphics();\r
46     g.rotate(Math.toRadians(90));\r
47     g.drawImage(temp, 0, -bi.getWidth(this), this);\r
48     image = (Image) bi;\r
49 \r
50     addMouseListener(this);\r
51     addMouseMotionListener(this);\r
52   }\r
53 \r
54   public void setScrollOffset(int y)\r
55   {\r
56     scrollOffset = y;\r
57     repaint();\r
58   }\r
59 \r
60   public void actionPerformed(ActionEvent evt)\r
61   {\r
62     AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
63 \r
64     if(evt.getActionCommand().equals(ADDNEW))\r
65     {\r
66       String label = JOptionPane.showInputDialog(this, "Label for annotation");\r
67       if(label==null)\r
68         label = "";\r
69       ap.av.alignment.addAnnotation(new AlignmentAnnotation\r
70                                       (label,\r
71                                        "New description",\r
72                                        new Annotation[ap.av.alignment.getWidth()]));\r
73     }\r
74    else if(evt.getActionCommand().equals(HIDE))\r
75    {\r
76      aa[selectedRow].visible = false;\r
77      if(aa[selectedRow].label.equals("Conservation"))\r
78        ap.av.showConservation = false;\r
79      if(aa[selectedRow].label.equals("Quality"))\r
80        ap.av.showQuality = false;\r
81      if(aa[selectedRow].label.equals("Consensus"))\r
82        ap.av.showIdentity = false;\r
83    }\r
84    else if(evt.getActionCommand().equals(DELETE))\r
85    {\r
86      ap.av.alignment.deleteAnnotation(aa[selectedRow]);\r
87    }\r
88    else if(evt.getActionCommand().equals(SHOWALL))\r
89    {\r
90        for(int i=0; i<aa.length; i++)\r
91          aa[i].visible = true;\r
92    }\r
93    else if(evt.getActionCommand().equals(OUTPUT_TEXT))\r
94    {\r
95      CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
96      JInternalFrame frame = new JInternalFrame();\r
97      frame.setContentPane(cap);\r
98      Desktop.addInternalFrame(frame, ap.alignFrame.getTitle()+" - "+ aa[selectedRow].label, 500, 100);\r
99      cap.setText( aa[selectedRow].toString() );\r
100    }\r
101 \r
102    ap.annotationPanel.adjustPanelHeight();\r
103    ap.repaint();\r
104 \r
105   }\r
106 \r
107   public void mousePressed(MouseEvent evt)\r
108   {\r
109     int y = evt.getY() - scrollOffset;\r
110 \r
111       AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
112        if(aa==null || aa.length==0)\r
113        {\r
114             JPopupMenu pop = new JPopupMenu("Annotations");\r
115             JMenuItem item = new JMenuItem(ADDNEW);\r
116             item.addActionListener(this);\r
117             pop.add(item);\r
118             pop.show(this, evt.getX(), evt.getY());\r
119             return;\r
120        }\r
121 \r
122        int height = 0;\r
123        for (int i = 0; i < aa.length; i++)\r
124        {\r
125          if(!aa[i].visible)\r
126            continue;\r
127 \r
128          height += aa[i].height;\r
129          if(y<height)\r
130          {\r
131            selectedRow = i;\r
132            break;\r
133          }\r
134        }\r
135 \r
136       JPopupMenu pop = new JPopupMenu("Annotations");\r
137       JMenuItem item = new JMenuItem(ADDNEW);\r
138       item.addActionListener(this);\r
139       pop.add(item);\r
140       item = new JMenuItem(HIDE);\r
141       item.addActionListener(this);\r
142       pop.add(item);\r
143       item = new JMenuItem(DELETE);\r
144       item.addActionListener(this);\r
145       pop.add(item);\r
146       item = new JMenuItem(SHOWALL);\r
147       item.addActionListener(this);\r
148       pop.add(item);\r
149       item = new JMenuItem(OUTPUT_TEXT);\r
150       item.addActionListener(this);\r
151       pop.add(item);\r
152       pop.show(this, evt.getX(), evt.getY());\r
153 \r
154     oldY = evt.getY();\r
155   }\r
156 \r
157   public void mouseReleased(MouseEvent evt){ active = false; repaint(); }\r
158   public void mouseEntered(MouseEvent evt) { active = true;  repaint();}\r
159   public void mouseExited(MouseEvent evt)  { active = false; repaint();}\r
160   public void mouseDragged(MouseEvent evt)\r
161   {\r
162     active = true;\r
163     Dimension d = ap.annotationScroller.getPreferredSize();\r
164     int dif = evt.getY() - oldY;\r
165 \r
166     dif /= ap.av.charHeight;\r
167     dif *= ap.av.charHeight;\r
168 \r
169     if(d.height-dif>20)\r
170     {\r
171       ap.annotationScroller.setPreferredSize(new Dimension(d.width,d.height - dif));\r
172       d = ap.annotationSpaceFillerHolder.getPreferredSize();\r
173       ap.annotationSpaceFillerHolder.setPreferredSize(new Dimension(d.width,d.height - dif));\r
174       ap.repaint();\r
175     }\r
176     ap.addNotify();\r
177   }\r
178 \r
179   public void mouseMoved(MouseEvent evt)   {}\r
180   public void mouseClicked(MouseEvent evt) {}\r
181 \r
182   public void paintComponent(Graphics g1)\r
183   {\r
184     Graphics2D g = (Graphics2D)g1;\r
185     g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);\r
186 \r
187     drawComponent(g);\r
188   }\r
189 \r
190   public void drawComponent(Graphics2D g)\r
191   {\r
192     FontMetrics fm = g.getFontMetrics(g.getFont());\r
193     g.setColor(Color.white);\r
194     g.fillRect(0,0, getWidth(), getHeight());\r
195 \r
196     g.translate(0, scrollOffset);\r
197     g.setColor(Color.black);\r
198 \r
199    AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
200    int y = g.getFont().getSize();\r
201    int x = 0;\r
202 \r
203    if(aa!=null)\r
204    for(int i=0; i<aa.length; i++)\r
205    {\r
206      if(!aa[i].visible)\r
207        continue;\r
208 \r
209      x = getWidth() - fm.stringWidth(aa[i].label)-3;\r
210 \r
211      if(aa[i].isGraph)\r
212        y+=(aa[i].height/3);\r
213 \r
214      g.drawString(aa[i].label, x, y);\r
215 \r
216      if(aa[i].isGraph)\r
217        y+=(2*aa[i].height/3);\r
218     else\r
219        y+=aa[i].height;\r
220    }\r
221 \r
222    if (active)\r
223    {\r
224      if (image != null)\r
225        g.drawImage(image, 2, 0, this);\r
226    }\r
227 \r
228    if (aa == null || aa.length<1)\r
229    {\r
230      g.drawString("Right click", 2, 8);\r
231      g.drawString("to add annotation", 2, 18);\r
232    }\r
233 \r
234 \r
235 \r
236   }\r
237 \r
238 }\r