mouse listeners added
[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   int selectedRow = 0;\r
19   int scrollOffset = 0;\r
20 \r
21   public AnnotationLabels(AlignmentPanel ap)\r
22   {\r
23     this.ap = ap;\r
24     setLayout(null);\r
25     addMouseListener(new MouseAdapter()\r
26     {public void mousePressed(MouseEvent evt)\r
27       {\r
28         doMousePressed(evt);\r
29       }\r
30     });\r
31   }\r
32 \r
33   public void setScrollOffset(int y)\r
34   {\r
35     scrollOffset = y;\r
36     repaint();\r
37   }\r
38 \r
39   public void actionPerformed(ActionEvent evt)\r
40   {\r
41     AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
42 \r
43    if(evt.getActionCommand().equals(HIDE))\r
44    {\r
45      aa[selectedRow].visible = false;\r
46    }\r
47    else if(evt.getActionCommand().equals(SHOWALL))\r
48    {\r
49        for(int i=0; i<aa.length; i++)\r
50          aa[i].visible = true;\r
51    }\r
52    ap.annotationPanel.adjustPanelHeight();\r
53    setSize(getSize().width,ap.annotationPanel.getSize().height);\r
54    ap.validate();\r
55    ap.repaint();\r
56   }\r
57 \r
58   public void doMousePressed(MouseEvent evt)\r
59   {\r
60     int y = evt.getY() - scrollOffset;\r
61     AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
62     int height = 0;\r
63     for (int i = 0; i < aa.length; i++)\r
64     {\r
65       if (!aa[i].visible)\r
66         continue;\r
67 \r
68       height += aa[i].height;\r
69       if (y < height)\r
70       {\r
71         selectedRow = i;\r
72         break;\r
73       }\r
74     }\r
75 \r
76     PopupMenu pop = new PopupMenu("Annotations");\r
77     MenuItem item = new MenuItem(HIDE);\r
78     item.addActionListener(this);\r
79     pop.add(item);\r
80     item = new MenuItem(SHOWALL);\r
81     item.addActionListener(this);\r
82     pop.add(item);\r
83     this.add(pop);\r
84     pop.show(this, evt.getX(), evt.getY());\r
85 \r
86   }\r
87 \r
88   public void paint(Graphics g)\r
89   {\r
90     drawComponent(g);\r
91   }\r
92 \r
93   public void drawComponent(Graphics g)\r
94   {\r
95     FontMetrics fm = g.getFontMetrics(g.getFont());\r
96     g.setColor(Color.white);\r
97     g.fillRect(0,0, getSize().width, getSize().height);\r
98 \r
99     g.translate(0, scrollOffset);\r
100     g.setColor(Color.black);\r
101 \r
102    AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
103    int y = g.getFont().getSize();\r
104    int x = 0;\r
105 \r
106    if(aa!=null)\r
107    for(int i=0; i<aa.length; i++)\r
108    {\r
109      if(!aa[i].visible)\r
110        continue;\r
111 \r
112      x = getSize().width - fm.stringWidth(aa[i].label)-3;\r
113 \r
114      if(aa[i].isGraph)\r
115        y+=(aa[i].height/3);\r
116 \r
117      g.drawString(aa[i].label, x, y);\r
118 \r
119      if(aa[i].isGraph)\r
120        y+=(2*aa[i].height/3);\r
121     else\r
122        y+=aa[i].height;\r
123    }\r
124   }\r
125 \r
126 }\r