Remove viewport from constructor
[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.showInputDialog(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       sg.deleteSequence( (SequenceI)sequenceHash.get( assignedVector.elementAt(indices[i]-i) ));\r
261       assignedVector.removeElementAt(indices[i]-i);\r
262 \r
263     }\r
264 \r
265     updateGui();\r
266   }\r
267 \r
268   protected void removeAll_actionPerformed(ActionEvent e)\r
269   {\r
270     if(selectedGroupIndex==-1)\r
271       return;\r
272 \r
273     SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
274     Enumeration enum = assignedVector.elements();\r
275     while(enum.hasMoreElements())\r
276     {\r
277       String id = (String)enum.nextElement();\r
278       unassignedVector.addElement( id );\r
279       sg.deleteSequence( (SequenceI)sequenceHash.get( id ));\r
280     }\r
281 \r
282     assignedVector.clear();\r
283     updateGui();\r
284   }\r
285 \r
286   protected void addGroup_actionPerformed(ActionEvent e)\r
287   {\r
288 \r
289    ColourSchemeI cs = ColourSchemeFactory.get( (String)colourCombo.getSelectedItem() );\r
290     //   ColourProperties.getColourScheme( colourCombo.getSelectedIndex() );\r
291 \r
292    groups.add(\r
293       new SequenceGroup("Group "+(groups.size()+1),\r
294                         cs,\r
295                         false,\r
296                         boxesCheck.isSelected(),\r
297                         textCheck.isSelected(),\r
298                         colourTextCheck.isSelected(),\r
299                         true) );\r
300 \r
301    updateGroupcombo();\r
302    groupsCombo.setSelectedIndex( groupsCombo.getItemCount()-1 );\r
303    showGroup();\r
304   }\r
305 \r
306   protected void deleteGroup_actionPerformed(ActionEvent e)\r
307   {\r
308     removeAll_actionPerformed(null);\r
309     groups.remove( selectedGroupIndex );\r
310     selectedGroupIndex=-1;\r
311     updateGroupcombo();\r
312     groupsCombo.setSelectedIndex( groupsCombo.getItemCount()-1 );\r
313     showGroup();\r
314   }\r
315 \r
316 }\r