4 import java.awt.event.*;
\r
5 import jalview.datamodel.*;
\r
6 import javax.swing.*;
\r
7 import jalview.schemes.*;
\r
10 public class SeqPanel extends JPanel
\r
13 public AlignmentI align;
\r
14 public SeqCanvas seqCanvas;
\r
15 public AlignmentPanel parent;
\r
17 protected int startres;
\r
18 protected int lastres;
\r
19 protected int endres;
\r
21 protected int startseq;
\r
22 protected int padseq;
\r
24 public boolean editFlag;
\r
25 protected AlignViewport av;
\r
27 public SeqPanel(AlignViewport av, AlignmentPanel p) {
\r
29 this.align = av.getAlignment();
\r
31 seqCanvas = new SeqCanvas(av);
\r
32 setLayout(new BorderLayout());
\r
33 add(seqCanvas, BorderLayout.CENTER);
\r
37 addMouseMotionListener( new MouseMotionAdapter()
\r
39 public void mouseMoved(MouseEvent evt)
\r
40 { doMouseMoved(evt); }
\r
41 public void mouseDragged(MouseEvent evt)
\r
42 { doMouseDragged(evt); }
\r
45 addMouseListener( new MouseAdapter()
\r
47 public void mouseReleased(MouseEvent evt)
\r
48 { doMouseReleased(evt); }
\r
49 public void mousePressed(MouseEvent evt)
\r
50 { doMousePressed(evt); }
\r
57 public void doMouseReleased(MouseEvent evt) {
\r
60 int res = (int)(x/av.getCharWidth()) + av.getStartRes();
\r
64 // This is to detect edits - we're at the end of an edit if mouse is up
\r
70 parent.RefreshPanels();
\r
75 public void doMousePressed(MouseEvent evt) {
\r
82 res = (int)(x/av.getCharWidth()) + av.getStartRes();
\r
83 seq = (y)/av.getCharHeight() + av.getStartSeq();
\r
85 if (seq < align.getHeight() && res < align.getSequenceAt(seq).getLength())
\r
87 //char resstr = align.getSequenceAt(seq).getSequence().charAt(res);
\r
88 // Find the residue's position in the sequence (res is the position
\r
93 if (startseq == (align.getHeight()-1)) {
\r
111 public void doMouseMoved(MouseEvent evt)
\r
114 int res = (int)(evt.getX()/av.getCharWidth()) + av.getStartRes();
\r
115 int seq = (evt.getY())/av.getCharHeight() + av.getStartSeq();
\r
116 if(seq>=av.getAlignment().getHeight())
\r
119 Object obj = ResidueProperties.aa2Triplet.get( av.getAlignment().getSequenceAt(seq).getCharAt(res)+"" ) ;
\r
122 aa = obj.toString();
\r
124 StringBuffer text = new StringBuffer("Sequence ID: "+av.getAlignment().getSequenceAt(seq).getName());
\r
126 text.append(" Residue: "+aa+" ("+ av.getAlignment().getSequenceAt(seq).findPosition(res)+")");
\r
128 parent.alignFrame.statusBar.setText(text.toString());
\r
132 public void doMouseDragged(MouseEvent evt) {
\r
133 // If we're dragging we're editing
\r
136 int x = evt.getX();
\r
138 int res = (int)(x/av.getCharWidth()) + av.getStartRes();
\r
139 if (res < 0) {res = 0;}
\r
141 if (res != lastres) {
\r
142 if (startseq != -1) {
\r
145 if (av.getGroupEdit()) {
\r
146 SequenceGroup sg = align.findGroup(startseq);
\r
148 if (res < align.getWidth() && res < lastres) {
\r
149 boolean flag = false;
\r
150 for (int i= 0 ; i < sg.getSize(); i++) {
\r
151 SequenceI s = (SequenceI)sg.getSequenceAt(i);
\r
152 for (int j=lastres-1; j >= res; j--) {
\r
154 if (!s.getSequence().substring(j,j+1).equals(align.getGapCharacter()) &&
\r
155 !s.getSequence().substring(j,j+1).equals(" ")) {
\r
157 System.out.print("\07");
\r
158 System.out.flush();
\r
166 for (int i= 0 ; i < sg.getSize(); i++)
\r
168 SequenceI s = (SequenceI)sg.getSequenceAt(i);
\r
169 boolean found = false;
\r
171 for (int k = 0; k < align.getHeight(); k++)
\r
173 if (align.getSequenceAt(k) == s)
\r
180 if (found && sno != -1) {
\r
181 if (res < align.getWidth() && res > lastres)
\r
183 for (int j = lastres; j < res; j++)
\r
186 int index = align.findIndex(s);
\r
188 drawChars(index,index+1,lastres);
\r
191 } else if (res < align.getWidth() && res < lastres)
\r
193 for (int j = res; j < lastres; j++)
\r
195 deleteChar(j,res,sno);
\r
198 int index = align.findIndex(s);
\r
200 drawChars(index,index+1,res);
\r
210 if (res < align.getWidth() && res > lastres) {
\r
211 // dragging to the right
\r
212 for (int j = lastres; j < res; j++)
\r
214 insertChar(j,startseq);
\r
216 drawChars(startseq,startseq+1,lastres);
\r
218 } else if (res < align.getWidth() && res < lastres) {
\r
220 // dragging to the left
\r
221 for (int j = res; j < lastres; j++) {
\r
222 deleteChar(j,res,startseq);
\r
225 drawChars(startseq,startseq+1,res);
\r
236 public void drawChars(int seqstart, int seqend, int start) {
\r
237 seqCanvas.drawPanel(seqCanvas.gg, start,av.getEndRes(),seqstart,seqend,av.getStartRes(),av.getStartSeq(),0);
\r
241 public void insertChar(int j, int seq)
\r
243 align.getSequenceAt(seq).insertCharAt(j, av.getGapCharacter().charAt(0));
\r
246 public void deleteChar(int j, int res, int sno)
\r
249 if (align.getSequenceAt(sno).getSequence().substring(j,j+1).equals(".") ||
\r
250 align.getSequenceAt(sno).getSequence().substring(j,j+1).equals("-") ||
\r
251 align.getSequenceAt(sno).getSequence().substring(j,j+1).equals(" ") )
\r
253 align.getSequenceAt(sno).deleteCharAt(j);
\r
260 public void setColourScheme(ColourSchemeI cs)
\r
263 seqCanvas.paintFlag = true;
\r
267 public ColourSchemeI getColourScheme()
\r
269 return seqCanvas.cs;
\r