import jalview.datamodel.*;\r
import javax.swing.*;\r
import jalview.schemes.*;\r
+import jalview.analysis.*;\r
\r
\r
public class SeqPanel extends JPanel\r
{\r
\r
- public AlignmentI align;\r
public SeqCanvas seqCanvas;\r
public AlignmentPanel parent;\r
\r
\r
public SeqPanel(AlignViewport av, AlignmentPanel p) {\r
this.av = av;\r
- this.align = av.getAlignment();\r
\r
seqCanvas = new SeqCanvas(av);\r
setLayout(new BorderLayout());\r
public void mouseMoved(MouseEvent evt)\r
{ doMouseMoved(evt); }\r
public void mouseDragged(MouseEvent evt)\r
- { doMouseDragged(evt); }\r
+ { doMouseDragged(evt); }\r
});\r
\r
addMouseListener( new MouseAdapter()\r
{\r
public void mouseReleased(MouseEvent evt)\r
- { doMouseReleased(evt); }\r
+ { doMouseReleased(evt); }\r
public void mousePressed(MouseEvent evt)\r
- { doMousePressed(evt); }\r
+ { doMousePressed(evt); }\r
\r
});\r
repaint();\r
}\r
\r
public void doMousePressed(MouseEvent evt) {\r
+ parent.alignFrame.addHistoryItem("sequence edit");\r
int seq;\r
int res;\r
\r
res = (int)(x/av.getCharWidth()) + av.getStartRes();\r
seq = (y)/av.getCharHeight() + av.getStartSeq();\r
\r
- if (seq < align.getHeight() && res < align.getSequenceAt(seq).getLength())\r
+ if (seq < av.getAlignment().getHeight() && res < av.getAlignment().getSequenceAt(seq).getLength())\r
{\r
//char resstr = align.getSequenceAt(seq).getSequence().charAt(res);\r
// Find the residue's position in the sequence (res is the position\r
\r
startseq = seq;\r
\r
- if (startseq == (align.getHeight()-1)) {\r
+ if (startseq == (av.getAlignment().getHeight()-1)) {\r
padseq = 1;\r
} else {\r
padseq = 1;\r
\r
public void doMouseMoved(MouseEvent evt)\r
{\r
+ int res=0, seq=0;\r
+ int x = evt.getX();\r
+ int y = evt.getY();\r
+ if(av.wrapAlignment)\r
+ {\r
+ y -= 2*av.charHeight;\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
+\r
+ System.out.println( ((y/chunkHeight)*(getWidth()/av.charWidth)) +" "+((x / av.getCharWidth()) + av.getStartRes()) );\r
+ y %= chunkHeight;\r
+ seq = y / av.getCharHeight() + av.getStartSeq();\r
+\r
+ // chunkHeight = (da.getHeight() + 2)*charHeight;\r
+ // startx += chunkWidth;\r
+ }\r
+ else\r
+ {\r
+ res = (int) (x / av.getCharWidth()) + av.getStartRes();\r
+ seq = y / av.getCharHeight() + av.getStartSeq();\r
+ }\r
+\r
\r
- int res = (int)(evt.getX()/av.getCharWidth()) + av.getStartRes();\r
- int seq = (evt.getY())/av.getCharHeight() + av.getStartSeq();\r
if(seq>=av.getAlignment().getHeight())\r
return;\r
\r
if(obj!=null)\r
aa = obj.toString();\r
\r
- StringBuffer text = new StringBuffer("Sequence " +seq+" ID: "+av.getAlignment().getSequenceAt(seq).getName());\r
+ StringBuffer text = new StringBuffer("Sequence " +(seq+1)+" ID: "+av.getAlignment().getSequenceAt(seq).getName());\r
if(aa!="")\r
text.append(" Residue: "+aa+" ("+ av.getAlignment().getSequenceAt(seq).findPosition(res)+")");\r
\r
public void doMouseDragged(MouseEvent evt) {\r
// If we're dragging we're editing\r
editFlag = true;\r
-\r
int x = evt.getX();\r
\r
int res = (int)(x/av.getCharWidth()) + av.getStartRes();\r
\r
// Group editing\r
if (av.getGroupEdit()) {\r
- SequenceGroup sg = align.findGroup(startseq);\r
+ SequenceGroup sg = av.getAlignment().findGroup(startseq);\r
\r
- if (res < align.getWidth() && res < lastres) {\r
+ if(sg!=null)\r
+ if (res < av.getAlignment().getWidth() && res < lastres)\r
+ {\r
boolean flag = false;\r
- for (int i= 0 ; i < sg.getSize(); i++) {\r
+ for (int i= 0 ; i < sg.getSize(); i++)\r
+ {\r
SequenceI s = (SequenceI)sg.getSequenceAt(i);\r
- for (int j=lastres-1; j >= res; j--) {\r
- if (!flag) {\r
- if (!s.getSequence().substring(j,j+1).equals(align.getGapCharacter()) &&\r
- !s.getSequence().substring(j,j+1).equals(" ")) {\r
+ for (int j=lastres-1; j >= res; j--)\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
+ {\r
res = j+1;\r
- System.out.print("\07");\r
- System.out.flush();\r
flag = true;\r
}\r
}\r
}\r
}\r
\r
+ if(sg!=null)\r
for (int i= 0 ; i < sg.getSize(); i++)\r
{\r
SequenceI s = (SequenceI)sg.getSequenceAt(i);\r
boolean found = false;\r
int sno = -1;\r
- for (int k = 0; k < align.getHeight(); k++)\r
+ for (int k = 0; k < av.getAlignment().getHeight(); k++)\r
{\r
- if (align.getSequenceAt(k) == s)\r
+ if (av.getAlignment().getSequenceAt(k) == s)\r
{\r
found = true;\r
sno = k;\r
}\r
}\r
if (found && sno != -1) {\r
- if (res < align.getWidth() && res > lastres)\r
+ if (res < av.getAlignment().getWidth() && res > lastres)\r
{\r
for (int j = lastres; j < res; j++)\r
insertChar(j,sno);\r
\r
- int index = align.findIndex(s);\r
+ int index = av.getAlignment().findIndex(s);\r
if (index != -1)\r
drawChars(index,index+1,lastres);\r
\r
\r
- } else if (res < align.getWidth() && res < lastres)\r
+ } else if (res < av.getAlignment().getWidth() && res < lastres)\r
{\r
for (int j = res; j < lastres; j++)\r
{\r
deleteChar(j,res,sno);\r
startres = res;\r
}\r
- int index = align.findIndex(s);\r
+ int index = av.getAlignment().findIndex(s);\r
if (index != -1)\r
drawChars(index,index+1,res);\r
\r
} else {\r
\r
\r
- if (res < align.getWidth() && res > lastres) {\r
+ if (res < av.getAlignment().getWidth() && res > lastres) {\r
// dragging to the right\r
for (int j = lastres; j < res; j++)\r
- {\r
insertChar(j,startseq);\r
- }\r
+\r
drawChars(startseq,startseq+1,lastres);\r
\r
- } else if (res < align.getWidth() && res < lastres) {\r
+ } else if (res < av.getAlignment().getWidth() && res < lastres)\r
+ {\r
\r
// dragging to the left\r
for (int j = res; j < lastres; j++) {\r
\r
public void insertChar(int j, int seq)\r
{\r
- align.getSequenceAt(seq).insertCharAt(j, av.getGapCharacter().charAt(0));\r
+ av.getAlignment().getSequenceAt(seq).insertCharAt(j, av.getGapCharacter().charAt(0));\r
+ updateConservation(seq);\r
}\r
\r
public void deleteChar(int j, int res, int sno)\r
{\r
\r
- if (align.getSequenceAt(sno).getSequence().substring(j,j+1).equals(".") ||\r
- align.getSequenceAt(sno).getSequence().substring(j,j+1).equals("-") ||\r
- align.getSequenceAt(sno).getSequence().substring(j,j+1).equals(" ") )\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
{\r
- align.getSequenceAt(sno).deleteCharAt(j);\r
+ av.getAlignment().getSequenceAt(sno).deleteCharAt(j);\r
}\r
-\r
- align.getWidth();\r
+ updateConservation(sno);\r
+ av.getAlignment().getWidth();\r
repaint();\r
}\r
\r
- public void setColourScheme(ColourSchemeI cs)\r
+\r
+ void updateConservation(int i)\r
{\r
- seqCanvas.cs = cs;\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
+ return;\r
+\r
+ Conservation c = sg.getConservation();\r
+\r
+ c = new Conservation("All", al.cons,\r
+ ResidueProperties.propHash, 3, sg.sequences, 0,\r
+ al.getWidth());\r
+ c.calculate();\r
+ c.verdict(false, 100);\r
+ sg.setConservation(c);\r
+ ConservationColourScheme ccs = (ConservationColourScheme)sg.cs;\r
+ ccs.conserve = c;\r
+ // sg.cs = new ConservationColourScheme(sg);\r
+ }\r
+\r
+ public void setColourScheme(ColourSchemeI cs, boolean showConservation)\r
+ {\r
+ if (av.getSelection().size() == 0)\r
+ {\r
+ seqCanvas.cs = cs;\r
+ for (int i = 0; i < av.alignment.getGroups().size();i++)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup)av.alignment.getGroups().elementAt(i);\r
+ sg.cs = cs;\r
+ if(!showConservation\r
+ && !(sg.cs instanceof Blosum62ColourScheme)\r
+ && sg.cs instanceof ConservationColourScheme)\r
+ {\r
+ // remove ConservationColouring from existing Conservation group\r
+ ConservationColourScheme ccs = (ConservationColourScheme)sg.cs;\r
+ sg.cs = ccs.cs;\r
+ }\r
+ else if(showConservation && !(sg.cs instanceof ConservationColourScheme))\r
+ {\r
+ // add ConservationColouring to new group\r
+ Conservation c = sg.getConservation();\r
+ Alignment al = (Alignment) av.getAlignment();\r
+ c = new Conservation("All", al.cons,\r
+ ResidueProperties.propHash, 3, sg.sequences, 0,\r
+ al.getWidth() );\r
+ c.calculate();\r
+ c.verdict(false, 100);\r
+ sg.setConservation(c);\r
+ sg.cs = new ConservationColourScheme(sg);\r
+ }\r
+\r
+\r
+ }\r
+ }\r
+ else\r
+ {\r
+ SequenceGroup sg = av.alignment.addGroup();\r
+ sg.cs = cs;\r
+\r
+ for (int i=0; i < av.getSelection().size(); i++)\r
+ {\r
+ av.alignment.removeFromGroup(av.alignment.findGroup((Sequence)av.sel.sequenceAt(i)),\r
+ (Sequence)av.sel.sequenceAt(i));\r
+ av.alignment.addToGroup(sg,(Sequence)av.sel.sequenceAt(i));\r
+ }\r
+\r
+ // Selection is made, we only want to change the conservationColour for selected group\r
+ if( showConservation\r
+ && !(sg.cs instanceof ConservationColourScheme)\r
+ && !(sg.cs instanceof Blosum62ColourScheme))\r
+ {\r
+ Conservation c = sg.getConservation();\r
+ Alignment al = (Alignment) av.getAlignment();\r
+\r
+ c = new Conservation("All", al.cons,\r
+ ResidueProperties.propHash, 3, sg.sequences, 0,\r
+ al.getWidth() );\r
+ c.calculate();\r
+ c.verdict(false, 100);\r
+ sg.setConservation(c);\r
+ sg.cs = new ConservationColourScheme(sg);\r
+ }\r
+ else if( !showConservation && sg.cs instanceof ConservationColourScheme)\r
+ {\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
+\r
public ColourSchemeI getColourScheme()\r
{\r
- return seqCanvas.cs;\r
+ if(av.getSelection().size()>0)\r
+ return av.alignment.findGroup((Sequence)av.sel.sequenceAt(0)).cs;\r
+ else\r
+ return seqCanvas.cs;\r
}\r
-\r
-\r
}\r
\r
\r