New Class
authoramwaterhouse <Andrew Waterhouse>
Tue, 16 Nov 2004 15:16:41 +0000 (15:16 +0000)
committeramwaterhouse <Andrew Waterhouse>
Tue, 16 Nov 2004 15:16:41 +0000 (15:16 +0000)
src/jalview/gui/GroupEditor.java [new file with mode: 0755]

diff --git a/src/jalview/gui/GroupEditor.java b/src/jalview/gui/GroupEditor.java
new file mode 100755 (executable)
index 0000000..3c58df3
--- /dev/null
@@ -0,0 +1,316 @@
+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