+ // define a new group here\r
+ SequenceGroup sg = new SequenceGroup();\r
+ sg.setStartRes(res);\r
+ sg.setEndRes(res);\r
+ sg.addSequence( sequence );\r
+ av.setSelectionGroup( sg );\r
+ stretchGroup = sg;\r
+\r
+ if(av.getConservationSelected())\r
+ SliderPanel.setConservationSlider(ap, av.getGlobalColourScheme(), "Background");\r
+ if(av.getAbovePIDThreshold())\r
+ SliderPanel.setPIDSliderSource(ap, av.getGlobalColourScheme(), "Background");\r
+\r
+ }\r
+ else if( javax.swing.SwingUtilities.isRightMouseButton(evt))\r
+ {\r
+ jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu( ap , null);\r
+ pop.show(this, evt.getX(), evt.getY());\r
+\r
+ // edit the properties of existing group\r
+ }\r
+\r
+ if(stretchGroup!=null && stretchGroup.getEndRes()==res)\r
+ // Edit end res position of selected group\r
+ changeEndRes = true;\r
+\r
+ else if(stretchGroup!=null && stretchGroup.getStartRes()==res)\r
+ // Edit end res position of selected group\r
+ changeStartRes = true;\r
+\r
+\r
+ repaint();\r
+\r
+ }\r
+\r
+ boolean changeEndSeq = false;\r
+ boolean changeStartSeq = false;\r
+ boolean changeEndRes = false;\r
+ boolean changeStartRes = false;\r
+ SequenceGroup stretchGroup = null;\r
+\r
+ public void doMouseReleasedDefineMode(MouseEvent evt)\r
+ {\r
+ mouseDragging = false;\r
+\r
+ if(stretchGroup==null)\r
+ return;\r
+\r
+ if(stretchGroup.cs instanceof ClustalxColourScheme)\r
+ {\r
+ stretchGroup.cs = new ClustalxColourScheme(stretchGroup.sequences, av.alignment.getWidth());\r
+ repaint();\r
+ }\r
+\r
+ else if(stretchGroup.cs instanceof ConservationColourScheme)\r
+ {\r
+ ConservationColourScheme ccs = (ConservationColourScheme)stretchGroup.cs;\r
+ stretchGroup.cs = ccs;\r
+ SliderPanel.setConservationSlider(ap, stretchGroup.cs, stretchGroup.getName()) ;\r
+\r
+ repaint();\r
+ }\r
+ else\r
+ {\r
+ if(stretchGroup.cs !=null && stretchGroup.cs.canThreshold())\r
+ {\r
+ ResidueColourScheme rcs = (ResidueColourScheme) stretchGroup.cs;\r
+ SliderPanel.setPIDSliderSource(ap, stretchGroup.cs, stretchGroup.getName());\r
+ }\r
+\r
+ }\r
+\r
+\r
+ changeEndRes = false;\r
+ changeStartRes = false;\r
+ stretchGroup = null;\r
+ ap.idPanel.repaint();\r
+ }\r
+\r
+\r
+ boolean remove = false;\r
+ public void doMouseDraggedDefineMode(MouseEvent evt)\r
+ {\r
+ int res = evt.getX()/av.getCharWidth() + av.getStartRes();\r
+ int y = evt.getY()/av.getCharHeight() + av.getStartSeq();\r
+\r
+ if(stretchGroup==null)\r
+ return;\r
+\r
+ if(res>av.alignment.getWidth())\r
+ res = av.alignment.getWidth()-1;\r
+\r
+\r
+ if(stretchGroup.getEndRes()==res)\r
+ // Edit end res position of selected group\r
+ changeEndRes = true;\r
+\r
+ else if(stretchGroup.getStartRes()==res)\r
+ // Edit start res position of selected group\r
+ changeStartRes = true;\r
+\r
+\r
+ if(res<av.getStartRes())\r
+ res = av.getStartRes();\r
+ else if(res>av.getEndRes())\r
+ res = av.getEndRes();\r
+\r
+ if(changeEndRes)\r
+ {\r
+ if(res>stretchGroup.getStartRes()-1)\r
+ stretchGroup.setEndRes( res );\r
+ }\r
+ else if(changeStartRes)\r
+ {\r
+ if(res<stretchGroup.getEndRes()+1)\r
+ stretchGroup.setStartRes( res );\r
+ }\r
+\r
+ int dragDirection = 0;\r
+ if (y > oldSeq)\r
+ dragDirection = 1;\r
+ else if (y < oldSeq)\r
+ dragDirection = -1;\r
+\r
+ while (y != oldSeq && oldSeq>0 && y<av.alignment.getHeight())\r
+ {\r
+ // This routine ensures we don't skip any sequences, as the\r
+ // selection is quite slow.\r
+ Sequence seq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);\r
+\r
+ oldSeq += dragDirection;\r
+ Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);\r
+\r
+ if (stretchGroup.sequences.contains(nextSeq))\r
+ {\r
+ stretchGroup.deleteSequence(seq);\r
+ stretchGroup.deleteSequence(nextSeq);\r
+ }\r
+ else\r
+ {\r
+ if(seq!=null)\r
+ stretchGroup.addSequence(seq);\r
+ stretchGroup.addSequence(nextSeq);\r
+ }\r