e3c49d6208dfe263d1650eb079e9749c5b320c25
[jalview.git] / src / jalview / gui / GroupEditor.java
1 package jalview.gui;\r
2 \r
3 import jalview.jbgui.GGroupEditor;\r
4 import jalview.datamodel.*;\r
5 import jalview.schemes.*;\r
6 import java.awt.event.*;\r
7 import java.util.*;\r
8 import javax.swing.*;\r
9 \r
10 \r
11 public class GroupEditor extends GGroupEditor\r
12 {\r
13   AlignViewport av;\r
14   AlignmentPanel ap;\r
15   Vector groups;\r
16   Vector unassignedVector;\r
17   Vector assignedVector=new Vector();\r
18   boolean updating=false;\r
19   int selectedGroupIndex = 0;\r
20   Hashtable sequenceHash = new Hashtable();\r
21 \r
22   public GroupEditor(AlignViewport av, AlignmentPanel ap)\r
23   {\r
24     this.av = av;\r
25     this.ap = ap;\r
26     groups = av.getAlignment().getGroups();\r
27 \r
28     updateUnassigned();\r
29     for (int i=0; i < ColourProperties.getColourSchemeNames().size(); i++)\r
30        colourCombo.addItem(ColourProperties.getColourSchemeNames().elementAt(i));\r
31 \r
32      if(groups.size()>0)\r
33      {\r
34        showGroup();\r
35        updateGroupcombo();\r
36      }\r
37 \r
38     assignedList.addMouseListener( new MouseAdapter()\r
39     {\r
40       public void mouseClicked(MouseEvent e)\r
41       {\r
42         if (e.getClickCount() == 2)\r
43         {    remove_actionPerformed(null);      }\r
44       }\r
45     });\r
46 \r
47     unassignedList.addMouseListener( new MouseAdapter()\r
48     {\r
49       public void mouseClicked(MouseEvent e)\r
50       {\r
51         if (e.getClickCount() == 2)\r
52         { add_actionPerformed(null);    }\r
53       }\r
54     });\r
55   }\r
56 \r
57 \r
58   void updateGui()\r
59   {\r
60     unassignedList.setListData(unassignedVector);\r
61     assignedList.setListData(assignedVector);\r
62     updateGroupcombo();\r
63     ap.RefreshPanels();\r
64   }\r
65 \r
66 \r
67   void updateGroupcombo()\r
68   {\r
69     updating=true;\r
70 \r
71     if(groupsCombo.getItemCount()>0)\r
72       groupsCombo.removeAllItems();\r
73 \r
74     for (int i = 0; i < groups.size(); i++) {\r
75       SequenceGroup sg = (SequenceGroup)groups.elementAt(i);\r
76       groupsCombo.addItem( sg.getName() + " (" + sg.getSize() + " sequences)");\r
77     }\r
78     groupsCombo.setSelectedIndex(selectedGroupIndex);\r
79     updating=false;\r
80   }\r
81 \r
82   void updateUnassigned()\r
83   {\r
84     unassignedVector=new Vector();\r
85     AlignmentI align = av.getAlignment();\r
86 \r
87     for (int i = 0; i < align.getHeight();i++)\r
88     {\r
89       sequenceHash.put( align.getSequenceAt(i).getDisplayId(), align.getSequenceAt(i) );\r
90       boolean assigned = false;\r
91       for(int j=0; j<groups.size(); j++)\r
92       {\r
93         SequenceGroup sg = (SequenceGroup)groups.elementAt(j);\r
94         for(int k=0; k<sg.getSize(); k++)\r
95         {\r
96           if(sg.getSequenceAt(k).getDisplayId().equals( align.getSequenceAt(i).getDisplayId() ) )\r
97           {\r
98             assigned = true; break;\r
99           }\r
100         }\r
101 \r
102         if(assigned)\r
103           break;\r
104       }\r
105 \r
106       if(!assigned)\r
107           unassignedVector.add(align.getSequenceAt(i).getDisplayId());\r
108 \r
109     }\r
110 \r
111     unassignedList.setListData(unassignedVector);\r
112   }\r
113 \r
114 \r
115   void showGroup()\r
116   {\r
117     if(groups.size()<1)\r
118        return;\r
119 \r
120     assignedVector = new Vector();\r
121     if(selectedGroupIndex!=-1)\r
122     {\r
123       SequenceGroup sg = (SequenceGroup) groups.elementAt(selectedGroupIndex);\r
124       for (int j = 0; j < sg.getSize(); j++)\r
125       {\r
126         Sequence s = (Sequence) sg.getSequenceAt(j);\r
127         assignedVector.addElement(s.getDisplayId());\r
128       }\r
129       int num = ColourProperties.indexOfClass(sg.cs);\r
130       colourCombo.setSelectedIndex(num);\r
131 \r
132       boxesCheck.setSelected(sg.getDisplayBoxes());\r
133       textCheck.setSelected(sg.getDisplayText());\r
134       colourTextCheck.setSelected(sg.getColourText());\r
135     }\r
136 \r
137 \r
138     assignedList.setListData( assignedVector );\r
139   }\r
140 \r
141 \r
142   protected void groupsCombo_actionPerformed(ActionEvent e)\r
143   {\r
144     if( !updating )\r
145     {\r
146       selectedGroupIndex = groupsCombo.getSelectedIndex();\r
147       showGroup();\r
148     }\r
149   }\r
150 \r
151   protected void groupName_actionPerformed(ActionEvent e)\r
152   {\r
153     String reply = JOptionPane.showInternalInputDialog(this, "Enter new group name", "Edit group name", JOptionPane.QUESTION_MESSAGE);\r
154     if(reply==null)\r
155       return;\r
156 \r
157     SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
158     sg.setName(reply);\r
159     updateGroupcombo();\r
160   }\r
161 \r
162   protected void colourCombo_actionPerformed(ActionEvent e)\r
163   {\r
164      if(groups.size()<1)\r
165        return;\r
166 \r
167      SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
168 \r
169      sg.cs = ColourSchemeFactory.get( (String)colourCombo.getSelectedItem() );\r
170      //ColourProperties.getColourScheme( colourCombo.getSelectedIndex() );\r
171      ap.RefreshPanels();\r
172   }\r
173 \r
174   protected void boxesCheck_actionPerformed(ActionEvent e)\r
175   {\r
176     SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
177     sg.setDisplayBoxes( boxesCheck.isSelected());\r
178         ap.RefreshPanels();\r
179   }\r
180 \r
181   protected void textCheck_actionPerformed(ActionEvent e)\r
182   {\r
183     SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
184     sg.setDisplayText( textCheck.isSelected() );\r
185         ap.RefreshPanels();\r
186   }\r
187 \r
188   protected void colourTextCheck_actionPerformed(ActionEvent e)\r
189   {\r
190     SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
191     sg.setColourText( colourTextCheck.isSelected());\r
192         ap.RefreshPanels();\r
193   }\r
194 \r
195   protected void addSelectedIds_actionPerformed(ActionEvent e)\r
196   {\r
197     if(selectedGroupIndex==-1)\r
198       return;\r
199 \r
200     SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
201 \r
202     for(int i=0; i<av.getSelectionGroup().getSize(); i++)\r
203     {\r
204       int index = unassignedVector.indexOf( av.getSelectionGroup().getSequenceAt(i).getDisplayId() );\r
205       if(index!=-1)\r
206       {\r
207         sg.addSequence( (SequenceI) sequenceHash.get( unassignedVector.elementAt(index) ));\r
208         assignedVector.addElement( unassignedVector.elementAt(index));\r
209         unassignedVector.removeElementAt( index );\r
210       }\r
211 \r
212     }\r
213     updateGui();\r
214   }\r
215 \r
216   protected void add_actionPerformed(ActionEvent e)\r
217   {\r
218     if(selectedGroupIndex==-1)\r
219       return;\r
220 \r
221     int [] indices  = unassignedList.getSelectedIndices();\r
222     if(indices.length<1)\r
223       return;\r
224 \r
225     SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
226 \r
227     for(int i=0; i<indices.length; i++)\r
228     {\r
229       assignedVector.addElement(unassignedVector.elementAt(indices[i]-i));\r
230       sg.addSequence( (SequenceI)sequenceHash.get( unassignedVector.elementAt(indices[i]-i) ));\r
231       unassignedVector.removeElementAt(indices[i]-i);\r
232     }\r
233     updateGui();\r
234   }\r
235 \r
236   protected void addAll_actionPerformed(ActionEvent e)\r
237   {\r
238     if(selectedGroupIndex==-1)\r
239       return;\r
240 \r
241     SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
242     Enumeration enum = unassignedVector.elements();\r
243     while(enum.hasMoreElements())\r
244     {\r
245       String id = (String)enum.nextElement();\r
246       assignedVector.addElement( id );\r
247       sg.addSequence( (SequenceI)sequenceHash.get( id ));\r
248     }\r
249 \r
250     unassignedVector.clear();\r
251     updateGui();\r
252   }\r
253 \r
254   protected void remove_actionPerformed(ActionEvent e)\r
255   {\r
256     if(selectedGroupIndex==-1)\r
257       return;\r
258 \r
259     SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
260 \r
261     int [] indices = assignedList.getSelectedIndices();\r
262     if(indices.length<1)\r
263       return;\r
264 \r
265     for(int i=0; i<indices.length; i++)\r
266     {\r
267 \r
268       unassignedVector.addElement(assignedVector.elementAt(indices[i]-i));\r
269       SequenceI removeSequence = (SequenceI)sequenceHash.get( assignedVector.elementAt(indices[i]-i) );\r
270       av.getSelectionGroup().deleteSequence( removeSequence );\r
271       sg.deleteSequence( removeSequence );\r
272       assignedVector.removeElementAt(indices[i]-i);\r
273 \r
274     }\r
275 \r
276     updateGui();\r
277   }\r
278 \r
279   protected void removeAll_actionPerformed(ActionEvent e)\r
280   {\r
281     if(selectedGroupIndex==-1)\r
282       return;\r
283 \r
284     SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
285     Enumeration enum = assignedVector.elements();\r
286     while(enum.hasMoreElements())\r
287     {\r
288       String id = (String)enum.nextElement();\r
289       unassignedVector.addElement( id );\r
290       SequenceI removeSequence = (SequenceI)sequenceHash.get( id );\r
291       av.getSelectionGroup().deleteSequence( removeSequence );\r
292       sg.deleteSequence( removeSequence );\r
293     }\r
294 \r
295     assignedVector.clear();\r
296     updateGui();\r
297   }\r
298 \r
299   protected void addGroup_actionPerformed(ActionEvent e)\r
300   {\r
301 \r
302    ColourSchemeI cs = ColourSchemeFactory.get( (String)colourCombo.getSelectedItem() );\r
303     //   ColourProperties.getColourScheme( colourCombo.getSelectedIndex() );\r
304 \r
305    groups.add(\r
306       new SequenceGroup("Group "+(groups.size()+1),\r
307                         cs,\r
308                         boxesCheck.isSelected(),\r
309                         textCheck.isSelected(),\r
310                         colourTextCheck.isSelected(),\r
311                         0, av.alignment.getWidth()\r
312                         ) );\r
313 \r
314    updateGroupcombo();\r
315    groupsCombo.setSelectedIndex( groupsCombo.getItemCount()-1 );\r
316    showGroup();\r
317   }\r
318 \r
319   protected void deleteGroup_actionPerformed(ActionEvent e)\r
320   {\r
321     removeAll_actionPerformed(null);\r
322     groups.remove( selectedGroupIndex );\r
323     selectedGroupIndex=-1;\r
324     updateGroupcombo();\r
325     groupsCombo.setSelectedIndex( groupsCombo.getItemCount()-1 );\r
326     showGroup();\r
327   }\r
328 \r
329 }\r