644d2ced1b7fb8700cdbfd8fb38eba9a50770465
[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        int tmp = start;\r
38        start = end;\r
39        end   = tmp;\r
40      }\r
41 \r
42      for (int i = start; i <= end; i++)\r
43      {\r
44        SequenceI pickedSeq = av.getAlignment().getSequenceAt(i);\r
45        if (av.getSelection().contains(pickedSeq))\r
46        {\r
47          av.getSelection().removeElement(pickedSeq);\r
48          selectedSequenceGroup.deleteSequence(pickedSeq);\r
49        }\r
50        else\r
51        {\r
52          av.getSelection().addElement(pickedSeq);\r
53          if(selectedSequenceGroup==null)\r
54          {\r
55            selectedSequenceGroup = new SequenceGroup();\r
56            av.setRubberbandGroup( selectedSequenceGroup );\r
57           // av.alignment.addGroup( selectedSequenceGroup );\r
58            selectedSequenceGroup.setStartRes(0);\r
59            selectedSequenceGroup.setEndRes( pickedSeq.getSequence().length());\r
60          }\r
61 \r
62          selectedSequenceGroup.addSequence( pickedSeq );\r
63        }\r
64 \r
65      }\r
66 \r
67      alignPanel.seqPanel.seqCanvas.paintFlag=true;\r
68      alignPanel.repaint();\r
69      repaint();\r
70 \r
71    }\r
72 \r
73   public void mouseDragged(MouseEvent e) {\r
74     int y = e.getY();\r
75     int seq = av.getIndex(y);\r
76 \r
77 \r
78 \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 seq = av.getIndex(e.getY());\r
95        String id = av.getAlignment().getSequenceAt(seq).getName();\r
96 \r
97        try{\r
98          jalview.util.BrowserLauncher.openURL(\r
99              "http://srs.ebi.ac.uk/srs7bin/cgi-bin/wgetz?-e+[swall-id:" + id +\r
100              "]+-vn+2");\r
101        }catch(Exception ex){ex.printStackTrace();}\r
102     }\r
103 \r
104   }\r
105   public void mouseEntered(MouseEvent e) { }\r
106   public void mouseExited (MouseEvent e) { }\r
107 \r
108   public void mousePressed(MouseEvent e) {\r
109     if (e.getClickCount() == 2)\r
110       return;\r
111 \r
112     int y = e.getY();\r
113     int seq = av.getIndex(y);\r
114 \r
115 \r
116       if( javax.swing.SwingUtilities.isRightMouseButton(e))\r
117       {\r
118         jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu( av , alignPanel.seqPanel);\r
119         pop.show(this, e.getX(), y);\r
120 \r
121 \r
122   /*      String id = av.getAlignment().getSequenceAt(seq).getName();\r
123         String s = (String)JOptionPane.showInternalInputDialog(\r
124                     this,\r
125                     "Edit sequence name",\r
126                     "Edit sequence name",\r
127                     JOptionPane.PLAIN_MESSAGE,\r
128                     null,\r
129                     null,\r
130                     id);\r
131 \r
132         if(s!=null)\r
133         {\r
134           av.getAlignment().getSequenceAt(seq).setName(s);\r
135           alignPanel.RefreshPanels();\r
136         }*/\r
137 \r
138       }\r
139       else\r
140       {\r
141 \r
142         selectedSequenceGroup = av.getRubberbandGroup();\r
143         if(selectedSequenceGroup==null)\r
144         {\r
145           selectedSequenceGroup = new SequenceGroup();\r
146           av.setRubberbandGroup(selectedSequenceGroup);\r
147         }\r
148 \r
149         selectedSequenceGroup.setStartRes(0);\r
150         selectedSequenceGroup.setEndRes( av.getAlignment().getWidth()-1 );\r
151 \r
152        // selectedSequenceGroup = av.alignment.findGroup(seq);\r
153 \r
154         if (seq != -1)\r
155           selectSeqs(seq,seq);\r
156 \r
157         lastid = seq;\r
158       }\r
159     return;\r
160   }\r
161 \r
162   public void mouseReleased(MouseEvent e)\r
163   {\r
164     lastid = -1;\r
165     PaintRefresher.Refresh(this);\r
166     selectedSequenceGroup = null;\r
167   }\r
168 }\r