Modified for wrappingAlignment
[jalview.git] / src / jalview / gui / IdPanel.java
1 package jalview.gui;\r
2 \r
3 import java.awt.*;\r
4 import java.awt.event.*;\r
5 \r
6 import jalview.datamodel.*;\r
7 \r
8 import javax.swing.*;\r
9 \r
10 public class IdPanel extends JPanel implements MouseListener, MouseMotionListener {\r
11 \r
12   protected IdCanvas       idCanvas;\r
13   protected AlignViewport  av;\r
14   protected AlignmentPanel alignPanel;\r
15 \r
16   protected int            offy;\r
17   public    int            width;\r
18   public    int            lastid;\r
19 \r
20   SequenceGroup selectedSequenceGroup;\r
21 \r
22   public IdPanel(AlignViewport av, AlignmentPanel parent)\r
23   {\r
24     this.av         = av;\r
25     alignPanel = parent;\r
26     idCanvas = new IdCanvas(av);\r
27     setLayout(new BorderLayout());\r
28     add(idCanvas, BorderLayout.CENTER);\r
29     addMouseListener(this);\r
30     addMouseMotionListener(this);\r
31   }\r
32 \r
33   public void mouseMoved(MouseEvent e) {}\r
34 \r
35   public void selectSeqs(int start, int end) {\r
36      if (end < start)\r
37      {\r
38        int tmp = start;\r
39        start = end;\r
40        end   = tmp;\r
41      }\r
42 \r
43      for (int i = start; i <= end; i++)\r
44      {\r
45        SequenceI pickedSeq = av.getAlignment().getSequenceAt(i);\r
46        if (av.getSelection().contains(pickedSeq))\r
47        {\r
48          av.getSelection().removeElement(pickedSeq);\r
49          selectedSequenceGroup.deleteSequence(pickedSeq);\r
50        }\r
51        else\r
52        {\r
53          av.getSelection().addElement(pickedSeq);\r
54          if(selectedSequenceGroup==null)\r
55          {\r
56            selectedSequenceGroup = new SequenceGroup();\r
57            av.setRubberbandGroup( selectedSequenceGroup );\r
58           // av.alignment.addGroup( selectedSequenceGroup );\r
59            selectedSequenceGroup.setStartRes(0);\r
60            selectedSequenceGroup.setEndRes( pickedSeq.getSequence().length());\r
61          }\r
62 \r
63          selectedSequenceGroup.addSequence( pickedSeq );\r
64        }\r
65 \r
66      }\r
67 \r
68      alignPanel.seqPanel.seqCanvas.paintFlag=true;\r
69      alignPanel.repaint();\r
70      repaint();\r
71 \r
72    }\r
73 \r
74   public void mouseDragged(MouseEvent e) {\r
75     int y = e.getY();\r
76     if(av.getWrapAlignment())\r
77       y-=2*av.charHeight;\r
78     int seq = av.getIndex(y);\r
79 \r
80     if (seq < lastid)\r
81       selectSeqs(lastid - 1, seq);\r
82     else if (seq > lastid)\r
83       selectSeqs(lastid + 1, seq);\r
84 \r
85     lastid = seq;\r
86 \r
87     return;\r
88   }\r
89 \r
90   public void mouseClicked(MouseEvent e)\r
91   {\r
92     if (e.getClickCount() == 2)\r
93     {\r
94        int y = e.getY();\r
95        if(av.getWrapAlignment())\r
96          y-=2*av.charHeight;\r
97 \r
98        int seq = av.getIndex(y);\r
99        String id = av.getAlignment().getSequenceAt(seq).getName();\r
100 \r
101        try{\r
102          jalview.util.BrowserLauncher.openURL(\r
103              "http://srs.ebi.ac.uk/srs7bin/cgi-bin/wgetz?-e+[swall-id:" + id +\r
104              "]+-vn+2");\r
105        }catch(Exception ex){ex.printStackTrace();}\r
106     }\r
107 \r
108   }\r
109   public void mouseEntered(MouseEvent e) { }\r
110   public void mouseExited (MouseEvent e) { }\r
111 \r
112   public void mousePressed(MouseEvent e) {\r
113     if (e.getClickCount() == 2)\r
114       return;\r
115 \r
116     int y = e.getY();\r
117     if(av.getWrapAlignment())\r
118       y-=2*av.charHeight;\r
119 \r
120     int seq = av.getIndex(y);\r
121 \r
122     if (javax.swing.SwingUtilities.isRightMouseButton(e))\r
123     {\r
124       jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(alignPanel,\r
125           av.getAlignment().getSequenceAt(seq));\r
126       pop.show(this, e.getX(), y);\r
127       return;\r
128     }\r
129 \r
130 \r
131 \r
132     if(av.getRubberbandGroup()!=null && (av.getRubberbandGroup().getSize() == av.getSelection().size()))\r
133           selectedSequenceGroup = av.getRubberbandGroup();\r
134 \r
135     if (selectedSequenceGroup == null)\r
136     {\r
137       selectedSequenceGroup = new SequenceGroup();\r
138       av.setRubberbandGroup(selectedSequenceGroup);\r
139     }\r
140 \r
141     selectedSequenceGroup.setStartRes(0);\r
142     selectedSequenceGroup.setEndRes(av.getAlignment().getWidth() - 1);\r
143 \r
144     if (seq != -1)\r
145       selectSeqs(seq, seq);\r
146 \r
147     lastid = seq;\r
148 \r
149 \r
150     return;\r
151   }\r
152 \r
153   public void mouseReleased(MouseEvent e)\r
154   {\r
155     lastid = -1;\r
156     PaintRefresher.Refresh(this);\r
157     selectedSequenceGroup = null;\r
158   }\r
159 }\r