public boolean editFlag;\r
protected AlignViewport av;\r
\r
- public SeqPanel(AlignViewport av, AlignmentPanel p) {\r
- this.av = av;\r
+ // if character is inserted or deleted, we will need to recalculate the conservation\r
+ int seqEditOccurred = -1;\r
\r
- seqCanvas = new SeqCanvas(av);\r
+ public SeqPanel(AlignViewport avp, AlignmentPanel p) {\r
+ this.av = avp;\r
+\r
+ seqCanvas = new SeqCanvas(avp);\r
setLayout(new BorderLayout());\r
add(seqCanvas, BorderLayout.CENTER);\r
\r
public void mouseMoved(MouseEvent evt)\r
{ doMouseMoved(evt); }\r
public void mouseDragged(MouseEvent evt)\r
- { doMouseDragged(evt); }\r
+ {\r
+ if(av.groupDefiningMode)\r
+ doMouseDraggedDefineMode(evt);\r
+ else\r
+ doMouseDragged(evt);\r
+ }\r
});\r
\r
addMouseListener( new MouseAdapter()\r
{\r
public void mouseReleased(MouseEvent evt)\r
- { doMouseReleased(evt); }\r
+ {\r
+ if(av.groupDefiningMode)\r
+ doMouseReleasedDefineMode(evt);\r
+ else\r
+ doMouseReleased(evt);\r
+ }\r
public void mousePressed(MouseEvent evt)\r
- { doMousePressed(evt); }\r
+ {\r
+ if(av.groupDefiningMode)\r
+ doMousePressedDefineMode(evt);\r
+ else\r
+ doMousePressed(evt);\r
+ }\r
\r
});\r
repaint();\r
public void doMouseReleased(MouseEvent evt) {\r
\r
int x = evt.getX();\r
- int res = (int)(x/av.getCharWidth()) + av.getStartRes();\r
+ int res = x/av.getCharWidth() + av.getStartRes();\r
\r
- endres = res;\r
+ endres = res;\r
\r
// This is to detect edits - we're at the end of an edit if mouse is up\r
- editFlag = false;\r
- startseq = -1;\r
- startres = -1;\r
- lastres = -1;\r
+ editFlag = false;\r
+ startseq = -1;\r
+ startres = -1;\r
+ lastres = -1;\r
+ if(seqEditOccurred>-1)\r
+ updateConservation(seqEditOccurred);\r
+\r
+ seqEditOccurred = -1;\r
\r
parent.RefreshPanels();\r
repaint();\r
}\r
\r
public void doMousePressed(MouseEvent evt) {\r
- parent.alignFrame.addHistoryItem("sequence edit");\r
+ parent.alignFrame.addHistoryItem("sequence edit");\r
int seq;\r
int res;\r
\r
int x = evt.getX();\r
int y = evt.getY();\r
\r
- res = (int)(x/av.getCharWidth()) + av.getStartRes();\r
- seq = (y)/av.getCharHeight() + av.getStartSeq();\r
+ res = x/av.getCharWidth() + av.getStartRes();\r
+ seq = y/av.getCharHeight() + av.getStartSeq();\r
\r
if (seq < av.getAlignment().getHeight() && res < av.getAlignment().getSequenceAt(seq).getLength())\r
{\r
int chunkHeight = (av.getAlignment().getHeight()+2)*av.charHeight;\r
\r
\r
- res = (int)((y/chunkHeight)*(getWidth()/av.charWidth)) + (int)(x/av.getCharWidth()) + av.getStartRes();\r
+ res = (int)((y/chunkHeight)*(getWidth()/av.charWidth)) + x/av.getCharWidth() + av.getStartRes();\r
\r
System.out.println( ((y/chunkHeight)*(getWidth()/av.charWidth)) +" "+((x / av.getCharWidth()) + av.getStartRes()) );\r
y %= chunkHeight;\r
}\r
else\r
{\r
- res = (int) (x / av.getCharWidth()) + av.getStartRes();\r
+ res = x / av.getCharWidth() + av.getStartRes();\r
seq = y / av.getCharHeight() + av.getStartSeq();\r
}\r
\r
editFlag = true;\r
int x = evt.getX();\r
\r
- int res = (int)(x/av.getCharWidth()) + av.getStartRes();\r
+ int res = x/av.getCharWidth() + av.getStartRes();\r
if (res < 0) {res = 0;}\r
\r
if (res != lastres) {\r
{\r
if (!flag)\r
{\r
- if (!s.getSequence().substring(j,j+1).equals(av.getAlignment().getGapCharacter()) &&\r
- !s.getSequence().substring(j,j+1).equals(" "))\r
+ if (s.getSequence().charAt(j)!=av.getAlignment().getGapCharacter() &&\r
+ s.getSequence().charAt(j)==' ')\r
{\r
res = j+1;\r
flag = true;\r
\r
public void insertChar(int j, int seq)\r
{\r
- av.getAlignment().getSequenceAt(seq).insertCharAt(j, av.getGapCharacter().charAt(0));\r
- updateConservation(seq);\r
+ av.getAlignment().getSequenceAt(seq).insertCharAt(j, av.getGapCharacter());\r
+ seqEditOccurred=seq;\r
}\r
\r
- public void deleteChar(int j, int res, int sno)\r
+ public void deleteChar(int j, int res, int seq)\r
{\r
\r
- if (av.getAlignment().getSequenceAt(sno).getSequence().substring(j,j+1).equals(".") ||\r
- av.getAlignment().getSequenceAt(sno).getSequence().substring(j,j+1).equals("-") ||\r
- av.getAlignment().getSequenceAt(sno).getSequence().substring(j,j+1).equals(" ") )\r
+ if (av.getAlignment().getSequenceAt(seq).getSequence().charAt(j)=='.' ||\r
+ av.getAlignment().getSequenceAt(seq).getSequence().charAt(j)=='-' ||\r
+ av.getAlignment().getSequenceAt(seq).getSequence().charAt(j)==' ' )\r
{\r
- av.getAlignment().getSequenceAt(sno).deleteCharAt(j);\r
+ av.getAlignment().getSequenceAt(seq).deleteCharAt(j);\r
}\r
- updateConservation(sno);\r
+\r
av.getAlignment().getWidth();\r
repaint();\r
+ seqEditOccurred=seq;\r
}\r
\r
\r
void updateConservation(int i)\r
{\r
-\r
Alignment al = (Alignment) av.getAlignment();\r
SequenceGroup sg = av.alignment.findGroup( al.getSequenceAt(i));\r
if(sg==null || !(sg.cs instanceof ConservationColourScheme))\r
\r
public void setColourScheme(ColourSchemeI cs, boolean showConservation)\r
{\r
+ seqCanvas.paintFlag = true;\r
if (av.getSelection().size() == 0)\r
{\r
- seqCanvas.cs = cs;\r
+ seqCanvas.globalColorScheme = cs;\r
for (int i = 0; i < av.alignment.getGroups().size();i++)\r
{\r
SequenceGroup sg = (SequenceGroup)av.alignment.getGroups().elementAt(i);\r
ConservationColourScheme ccs = (ConservationColourScheme)sg.cs;\r
sg.cs = ccs.cs;\r
}\r
-\r
-\r
-\r
}\r
- seqCanvas.paintFlag = true;\r
repaint();\r
}\r
\r
boolean isNewSelection(SequenceGroup sg)\r
{\r
+ if(sg==null)\r
+ return true;\r
+\r
if(sg.getSize()!=av.getSelection().size())\r
return true;\r
\r
if(av.getSelection().size()>0)\r
return av.alignment.findGroup((Sequence)av.sel.sequenceAt(0)).cs;\r
else\r
- return seqCanvas.cs;\r
+ return seqCanvas.globalColorScheme;\r
+ }\r
+\r
+ public void doMousePressedDefineMode(MouseEvent evt)\r
+ {\r
+ int res = evt.getX()/av.getCharWidth() + av.getStartRes();\r
+ int seq = evt.getY()/av.getCharHeight() + av.getStartSeq();\r
+\r
+ stretchGroup = av.alignment.findGroup((Sequence)av.getAlignment().getSequenceAt(seq));\r
+\r
+ if(stretchGroup!=null && stretchGroup.getEndRes()==res)\r
+ {\r
+ // Edit end res position of selected group\r
+ changeEndRes = true;\r
+ }\r
+ else if(stretchGroup!=null && stretchGroup.getStartRes()==res)\r
+ {\r
+ // Edit end res position of selected group\r
+ changeStartRes = true;\r
+ }\r
+\r
+\r
+ }\r
+\r
+ boolean changeEndRes = false;\r
+ boolean changeStartRes = false;\r
+ SequenceGroup stretchGroup = null;\r
+\r
+ public void doMouseReleasedDefineMode(MouseEvent evt)\r
+ {\r
+ changeEndRes = false;\r
+ changeStartRes = false;\r
+ }\r
+\r
+ public void doMouseDraggedDefineMode(MouseEvent evt)\r
+ {\r
+ int res = evt.getX()/av.getCharWidth() + av.getStartRes();\r
+ int seq = evt.getY()/av.getCharHeight() + av.getStartSeq();\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
+ seqCanvas.paintFlag = true;\r
+ repaint();\r
+\r
}\r
+\r
}\r
\r
\r