--- /dev/null
+package jalview.gui;\r
+\r
+import jalview.jbgui.GGroupEditor;\r
+import jalview.datamodel.*;\r
+import jalview.schemes.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+import javax.swing.*;\r
+\r
+\r
+public class GroupEditor extends GGroupEditor\r
+{\r
+ AlignViewport av;\r
+ AlignmentPanel ap;\r
+ Vector groups;\r
+ Vector unassignedVector;\r
+ Vector assignedVector=new Vector();\r
+ boolean updating=false;\r
+ int selectedGroupIndex = 0;\r
+ Hashtable sequenceHash = new Hashtable();\r
+\r
+ public GroupEditor(AlignViewport av, AlignmentPanel ap)\r
+ {\r
+ this.av = av;\r
+ this.ap = ap;\r
+ groups = av.getAlignment().getGroups();\r
+\r
+ updateUnassigned();\r
+ for (int i=0; i < ColourProperties.getColourSchemeNames().size(); i++)\r
+ colourCombo.addItem(ColourProperties.getColourSchemeNames().elementAt(i));\r
+\r
+ showGroup();\r
+ updateGroupcombo();\r
+\r
+ assignedList.addMouseListener( new MouseAdapter()\r
+ {\r
+ public void mouseClicked(MouseEvent e)\r
+ {\r
+ if (e.getClickCount() == 2)\r
+ { remove_actionPerformed(null); }\r
+ }\r
+ });\r
+\r
+ unassignedList.addMouseListener( new MouseAdapter()\r
+ {\r
+ public void mouseClicked(MouseEvent e)\r
+ {\r
+ if (e.getClickCount() == 2)\r
+ { add_actionPerformed(null); }\r
+ }\r
+ });\r
+ }\r
+\r
+\r
+ void updateGui()\r
+ {\r
+ unassignedList.setListData(unassignedVector);\r
+ assignedList.setListData(assignedVector);\r
+ updateGroupcombo();\r
+ ap.RefreshPanels();\r
+ }\r
+\r
+\r
+ void updateGroupcombo()\r
+ {\r
+ updating=true;\r
+\r
+ if(groupsCombo.getItemCount()>0)\r
+ groupsCombo.removeAllItems();\r
+\r
+ for (int i = 0; i < groups.size(); i++) {\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(i);\r
+ groupsCombo.addItem( sg.getName() + " (" + sg.getSize() + " sequences)");\r
+ }\r
+ groupsCombo.setSelectedIndex(selectedGroupIndex);\r
+ updating=false;\r
+ }\r
+\r
+ void updateUnassigned()\r
+ {\r
+ unassignedVector=new Vector();\r
+ AlignmentI align = av.getAlignment();\r
+\r
+ for (int i = 0; i < align.getHeight();i++)\r
+ {\r
+ sequenceHash.put( align.getSequenceAt(i).getDisplayId(), align.getSequenceAt(i) );\r
+ boolean assigned = false;\r
+ for(int j=0; j<groups.size(); j++)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(j);\r
+ for(int k=0; k<sg.getSize(); k++)\r
+ {\r
+ if(sg.getSequenceAt(k).getDisplayId().equals( align.getSequenceAt(i).getDisplayId() ) )\r
+ {\r
+ assigned = true; break;\r
+ }\r
+ }\r
+\r
+ if(assigned)\r
+ break;\r
+ }\r
+\r
+ if(!assigned)\r
+ unassignedVector.add(align.getSequenceAt(i).getDisplayId());\r
+\r
+ }\r
+\r
+ unassignedList.setListData(unassignedVector);\r
+ }\r
+\r
+\r
+ void showGroup()\r
+ {\r
+ assignedVector = new Vector();\r
+ if(selectedGroupIndex!=-1)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup) groups.elementAt(selectedGroupIndex);\r
+ for (int j = 0; j < sg.getSize(); j++)\r
+ {\r
+ Sequence s = (Sequence) sg.getSequenceAt(j);\r
+ assignedVector.addElement(s.getDisplayId());\r
+ }\r
+ int num = ColourProperties.indexOfClass(sg.cs);\r
+ colourCombo.setSelectedIndex(num);\r
+\r
+ boxesCheck.setSelected(sg.getDisplayBoxes());\r
+ textCheck.setSelected(sg.getDisplayText());\r
+ colourTextCheck.setSelected(sg.getColourText());\r
+ }\r
+\r
+\r
+ assignedList.setListData( assignedVector );\r
+ }\r
+\r
+\r
+ protected void groupsCombo_actionPerformed(ActionEvent e)\r
+ {\r
+ if( !updating )\r
+ {\r
+ selectedGroupIndex = groupsCombo.getSelectedIndex();\r
+ showGroup();\r
+ }\r
+ }\r
+\r
+ protected void groupName_actionPerformed(ActionEvent e)\r
+ {\r
+ String reply = JOptionPane.showInputDialog(this, "Enter new group name", "Edit group name", JOptionPane.QUESTION_MESSAGE);\r
+ if(reply==null)\r
+ return;\r
+\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
+ sg.setName(reply);\r
+ updateGroupcombo();\r
+ }\r
+\r
+ protected void colourCombo_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
+\r
+ sg.cs = ColourSchemeFactory.get( (String)colourCombo.getSelectedItem() );\r
+ //ColourProperties.getColourScheme( colourCombo.getSelectedIndex() );\r
+ ap.RefreshPanels();\r
+ }\r
+\r
+ protected void boxesCheck_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
+ sg.setDisplayBoxes( boxesCheck.isSelected());\r
+ ap.RefreshPanels();\r
+ }\r
+\r
+ protected void textCheck_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
+ sg.setDisplayText( textCheck.isSelected() );\r
+ ap.RefreshPanels();\r
+ }\r
+\r
+ protected void colourTextCheck_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
+ sg.setColourText( colourTextCheck.isSelected());\r
+ ap.RefreshPanels();\r
+ }\r
+\r
+ protected void addSelectedIds_actionPerformed(ActionEvent e)\r
+ {\r
+ if(selectedGroupIndex==-1)\r
+ return;\r
+\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
+ Selection sel = av.getSelection();\r
+ for(int i=0; i<sel.size(); i++)\r
+ {\r
+ int index = unassignedVector.indexOf( sel.sequenceAt(i).getDisplayId() );\r
+ if(index!=-1)\r
+ {\r
+ sg.addSequence( (SequenceI) sequenceHash.get( unassignedVector.elementAt(index) ));\r
+ assignedVector.addElement( unassignedVector.elementAt(index));\r
+ unassignedVector.removeElementAt( index );\r
+ }\r
+\r
+ }\r
+ updateGui();\r
+ }\r
+\r
+ protected void add_actionPerformed(ActionEvent e)\r
+ {\r
+ if(selectedGroupIndex==-1)\r
+ return;\r
+\r
+ int [] indices = unassignedList.getSelectedIndices();\r
+ if(indices.length<1)\r
+ return;\r
+\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
+\r
+ for(int i=0; i<indices.length; i++)\r
+ {\r
+ assignedVector.addElement(unassignedVector.elementAt(indices[i]-i));\r
+ sg.addSequence( (SequenceI)sequenceHash.get( unassignedVector.elementAt(indices[i]-i) ));\r
+ unassignedVector.removeElementAt(indices[i]-i);\r
+ }\r
+ updateGui();\r
+ }\r
+\r
+ protected void addAll_actionPerformed(ActionEvent e)\r
+ {\r
+ if(selectedGroupIndex==-1)\r
+ return;\r
+\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
+ Enumeration enum = unassignedVector.elements();\r
+ while(enum.hasMoreElements())\r
+ {\r
+ String id = (String)enum.nextElement();\r
+ assignedVector.addElement( id );\r
+ sg.addSequence( (SequenceI)sequenceHash.get( id ));\r
+ }\r
+\r
+ unassignedVector.clear();\r
+ updateGui();\r
+ }\r
+\r
+ protected void remove_actionPerformed(ActionEvent e)\r
+ {\r
+ if(selectedGroupIndex==-1)\r
+ return;\r
+\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
+\r
+ int [] indices = assignedList.getSelectedIndices();\r
+ if(indices.length<1)\r
+ return;\r
+\r
+ for(int i=0; i<indices.length; i++)\r
+ {\r
+\r
+ unassignedVector.addElement(assignedVector.elementAt(indices[i]-i));\r
+ sg.deleteSequence( (SequenceI)sequenceHash.get( assignedVector.elementAt(indices[i]-i) ));\r
+ assignedVector.removeElementAt(indices[i]-i);\r
+\r
+ }\r
+\r
+ updateGui();\r
+ }\r
+\r
+ protected void removeAll_actionPerformed(ActionEvent e)\r
+ {\r
+ if(selectedGroupIndex==-1)\r
+ return;\r
+\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(selectedGroupIndex);\r
+ Enumeration enum = assignedVector.elements();\r
+ while(enum.hasMoreElements())\r
+ {\r
+ String id = (String)enum.nextElement();\r
+ unassignedVector.addElement( id );\r
+ sg.deleteSequence( (SequenceI)sequenceHash.get( id ));\r
+ }\r
+\r
+ assignedVector.clear();\r
+ updateGui();\r
+ }\r
+\r
+ protected void addGroup_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ ColourSchemeI cs = ColourSchemeFactory.get( (String)colourCombo.getSelectedItem() );\r
+ // ColourProperties.getColourScheme( colourCombo.getSelectedIndex() );\r
+\r
+ groups.add(\r
+ new SequenceGroup("Group "+(groups.size()+1),\r
+ cs,\r
+ false,\r
+ boxesCheck.isSelected(),\r
+ textCheck.isSelected(),\r
+ colourTextCheck.isSelected(),\r
+ true) );\r
+\r
+ updateGroupcombo();\r
+ groupsCombo.setSelectedIndex( groupsCombo.getItemCount()-1 );\r
+ showGroup();\r
+ }\r
+\r
+ protected void deleteGroup_actionPerformed(ActionEvent e)\r
+ {\r
+ removeAll_actionPerformed(null);\r
+ groups.remove( selectedGroupIndex );\r
+ selectedGroupIndex=-1;\r
+ updateGroupcombo();\r
+ groupsCombo.setSelectedIndex( groupsCombo.getItemCount()-1 );\r
+ showGroup();\r
+ }\r
+\r
+}\r