57aeb06f830ec8704f76a18f2820d7cd80b35ae2
[jalview.git] / src / jalview / appletgui / AnnotationLabels.java
1 \r
2 package jalview.appletgui;\r
3 \r
4 import java.awt.event.*;\r
5 import java.awt.*;\r
6 import jalview.datamodel.*;\r
7 \r
8 public class AnnotationLabels extends Panel implements ActionListener\r
9 {\r
10   boolean active = false;\r
11   AlignmentPanel ap ;\r
12   boolean resizing = false;\r
13   int oldY, mouseX;\r
14   static String ADDNEW = "Add new row";\r
15   static String HIDE = "Hide this row";\r
16   static String DELETE = "Delete this row";\r
17   static String SHOWALL="Show all hidden rows";\r
18   static String OUTPUT_TEXT="Show Values In Textbox";\r
19   int selectedRow = 0;\r
20   int scrollOffset = 0;\r
21 \r
22   public AnnotationLabels(AlignmentPanel ap)\r
23   {\r
24     this.ap = ap;\r
25     setLayout(null);\r
26     addMouseListener(new MouseAdapter()\r
27     {public void mousePressed(MouseEvent evt)\r
28       {\r
29         doMousePressed(evt);\r
30       }\r
31     });\r
32   }\r
33 \r
34   public void setScrollOffset(int y)\r
35   {\r
36     scrollOffset = y;\r
37     repaint();\r
38   }\r
39 \r
40   public void actionPerformed(ActionEvent evt)\r
41   {\r
42     AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
43 \r
44    if(evt.getActionCommand().equals(HIDE))\r
45    {\r
46      aa[selectedRow].visible = false;\r
47    }\r
48    else if(evt.getActionCommand().equals(SHOWALL))\r
49    {\r
50        for(int i=0; i<aa.length; i++)\r
51          aa[i].visible = true;\r
52    }\r
53    else if (evt.getActionCommand().equals(OUTPUT_TEXT))\r
54    {\r
55      CutAndPasteTransfer cap = new CutAndPasteTransfer(false);\r
56      Frame frame = new Frame();\r
57      frame.add(cap);\r
58      jalview.bin.JalviewLite.addFrame(frame,\r
59                                       ap.alignFrame.getTitle() + " - " +\r
60                                       aa[selectedRow].label, 500, 100);\r
61      cap.setText(aa[selectedRow].toString());\r
62    }\r
63 \r
64    ap.annotationPanel.adjustPanelHeight();\r
65    setSize(getSize().width,ap.annotationPanel.getSize().height);\r
66    ap.validate();\r
67    ap.repaint();\r
68   }\r
69 \r
70   public void doMousePressed(MouseEvent evt)\r
71   {\r
72     int y = evt.getY() - scrollOffset;\r
73     AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
74     int height = 0;\r
75     for (int i = 0; i < aa.length; i++)\r
76     {\r
77       if (!aa[i].visible)\r
78         continue;\r
79 \r
80       height += aa[i].height;\r
81       if (y < height)\r
82       {\r
83         selectedRow = i;\r
84         break;\r
85       }\r
86     }\r
87 \r
88     PopupMenu pop = new PopupMenu("Annotations");\r
89     MenuItem item = new MenuItem(HIDE);\r
90     item.addActionListener(this);\r
91     pop.add(item);\r
92     item = new MenuItem(SHOWALL);\r
93     item.addActionListener(this);\r
94     pop.add(item);\r
95     this.add(pop);\r
96     item = new MenuItem(OUTPUT_TEXT);\r
97     item.addActionListener(this);\r
98     pop.add(item);\r
99     pop.show(this, evt.getX(), evt.getY());\r
100 \r
101   }\r
102 \r
103   public void paint(Graphics g)\r
104   {\r
105     drawComponent(g);\r
106   }\r
107 \r
108   public void drawComponent(Graphics g)\r
109   {\r
110     FontMetrics fm = g.getFontMetrics(g.getFont());\r
111     g.setColor(Color.white);\r
112     g.fillRect(0,0, getSize().width, getSize().height);\r
113 \r
114     g.translate(0, scrollOffset);\r
115     g.setColor(Color.black);\r
116 \r
117    AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
118    int y = g.getFont().getSize();\r
119    int x = 0;\r
120 \r
121    if(aa!=null)\r
122    for(int i=0; i<aa.length; i++)\r
123    {\r
124      if(!aa[i].visible)\r
125        continue;\r
126 \r
127      x = getSize().width - fm.stringWidth(aa[i].label)-3;\r
128 \r
129      if(aa[i].isGraph)\r
130        y+=(aa[i].height/3);\r
131 \r
132      g.drawString(aa[i].label, x, y);\r
133 \r
134      if(aa[i].isGraph)\r
135        y+=(2*aa[i].height/3);\r
136     else\r
137        y+=aa[i].height;\r
138    }\r
139   }\r
140 \r
141 }\r