sequence selection modified
[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.alignment.addGroup( selectedSequenceGroup );\r
57            selectedSequenceGroup.setStartRes(0);\r
58            selectedSequenceGroup.setEndRes( pickedSeq.getSequence().length());\r
59          }\r
60 \r
61          selectedSequenceGroup.addSequence( pickedSeq );\r
62        }\r
63 \r
64      }\r
65 \r
66      alignPanel.seqPanel.seqCanvas.paintFlag=true;\r
67      alignPanel.repaint();\r
68      repaint();\r
69 \r
70    }\r
71 \r
72   public void mouseDragged(MouseEvent e) {\r
73     int y = e.getY();\r
74     int seq = av.getIndex(y);\r
75 \r
76 \r
77 \r
78 \r
79     if (seq < lastid)\r
80       selectSeqs(lastid - 1, seq);\r
81     else if (seq > lastid)\r
82       selectSeqs(lastid + 1, seq);\r
83 \r
84     lastid = seq;\r
85 \r
86     return;\r
87   }\r
88 \r
89   public void mouseClicked(MouseEvent e)\r
90   {\r
91     if (e.getClickCount() == 2)\r
92     {\r
93        int seq = av.getIndex(e.getY());\r
94        String id = av.getAlignment().getSequenceAt(seq).getName();\r
95 \r
96        try{\r
97          jalview.util.BrowserLauncher.openURL(\r
98              "http://srs.ebi.ac.uk/srs7bin/cgi-bin/wgetz?-e+[swall-id:" + id +\r
99              "]+-vn+2");\r
100        }catch(Exception ex){ex.printStackTrace();}\r
101     }\r
102 \r
103   }\r
104   public void mouseEntered(MouseEvent e) { }\r
105   public void mouseExited (MouseEvent e) { }\r
106 \r
107   public void mousePressed(MouseEvent e) {\r
108     if (e.getClickCount() == 2)\r
109       return;\r
110 \r
111     int y = e.getY();\r
112     int seq = av.getIndex(y);\r
113 \r
114 \r
115       if( javax.swing.SwingUtilities.isRightMouseButton(e))\r
116       {\r
117         String id = av.getAlignment().getSequenceAt(seq).getName();\r
118         String s = (String)JOptionPane.showInternalInputDialog(\r
119                     this,\r
120                     "Edit sequence name",\r
121                     "Edit sequence name",\r
122                     JOptionPane.PLAIN_MESSAGE,\r
123                     null,\r
124                     null,\r
125                     id);\r
126 \r
127         if(s!=null)\r
128         {\r
129           av.getAlignment().getSequenceAt(seq).setName(s);\r
130           alignPanel.RefreshPanels();\r
131         }\r
132 \r
133       }\r
134       else\r
135       {\r
136         selectedSequenceGroup =  av.alignment.findGroup(seq);\r
137 \r
138         if (seq != -1)\r
139           selectSeqs(seq,seq);\r
140 \r
141         lastid = seq;\r
142       }\r
143     return;\r
144   }\r
145 \r
146   public void mouseReleased(MouseEvent e)\r
147   {\r
148     lastid = -1;\r
149     PaintRefresher.Refresh(this);\r
150     selectedSequenceGroup = null;\r
151   }\r
152 }\r