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