X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=ebcbc76d50f9f185a059fe1828a622180d027626;hb=95d5181c5173b5ded7d1ef0da1f8c779409fde6d;hp=3df1dac84d44dd425b3a974e6975f9b136e8a8e7;hpb=f288996f4b49bfb065e167f18639c5941dbfcef2;p=jalview.git diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index 3df1dac..ebcbc76 100755 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -24,10 +24,13 @@ public class SeqPanel extends JPanel public boolean editFlag; protected AlignViewport av; - public SeqPanel(AlignViewport av, AlignmentPanel p) { - this.av = av; + // if character is inserted or deleted, we will need to recalculate the conservation + int seqEditOccurred = -1; - seqCanvas = new SeqCanvas(av); + public SeqPanel(AlignViewport avp, AlignmentPanel p) { + this.av = avp; + + seqCanvas = new SeqCanvas(avp); setLayout(new BorderLayout()); add(seqCanvas, BorderLayout.CENTER); @@ -38,15 +41,30 @@ public class SeqPanel extends JPanel public void mouseMoved(MouseEvent evt) { doMouseMoved(evt); } public void mouseDragged(MouseEvent evt) - { doMouseDragged(evt); } + { + if(av.groupDefiningMode) + doMouseDraggedDefineMode(evt); + else + doMouseDragged(evt); + } }); addMouseListener( new MouseAdapter() { public void mouseReleased(MouseEvent evt) - { doMouseReleased(evt); } + { + if(av.groupDefiningMode) + doMouseReleasedDefineMode(evt); + else + doMouseReleased(evt); + } public void mousePressed(MouseEvent evt) - { doMousePressed(evt); } + { + if(av.groupDefiningMode) + doMousePressedDefineMode(evt); + else + doMousePressed(evt); + } }); repaint(); @@ -56,15 +74,19 @@ public class SeqPanel extends JPanel public void doMouseReleased(MouseEvent evt) { int x = evt.getX(); - int res = (int)(x/av.getCharWidth()) + av.getStartRes(); + int res = x/av.getCharWidth() + av.getStartRes(); - endres = res; + endres = res; // This is to detect edits - we're at the end of an edit if mouse is up - editFlag = false; - startseq = -1; - startres = -1; - lastres = -1; + editFlag = false; + startseq = -1; + startres = -1; + lastres = -1; + if(seqEditOccurred>-1) + updateConservation(seqEditOccurred); + + seqEditOccurred = -1; parent.RefreshPanels(); repaint(); @@ -72,15 +94,15 @@ public class SeqPanel extends JPanel } public void doMousePressed(MouseEvent evt) { - parent.alignFrame.addHistoryItem("sequence edit"); + parent.alignFrame.addHistoryItem("sequence edit"); int seq; int res; int x = evt.getX(); int y = evt.getY(); - res = (int)(x/av.getCharWidth()) + av.getStartRes(); - seq = (y)/av.getCharHeight() + av.getStartSeq(); + res = x/av.getCharWidth() + av.getStartRes(); + seq = y/av.getCharHeight() + av.getStartSeq(); if (seq < av.getAlignment().getHeight() && res < av.getAlignment().getSequenceAt(seq).getLength()) { @@ -119,7 +141,7 @@ public class SeqPanel extends JPanel int chunkHeight = (av.getAlignment().getHeight()+2)*av.charHeight; - res = (int)((y/chunkHeight)*(getWidth()/av.charWidth)) + (int)(x/av.getCharWidth()) + av.getStartRes(); + res = (int)((y/chunkHeight)*(getWidth()/av.charWidth)) + x/av.getCharWidth() + av.getStartRes(); System.out.println( ((y/chunkHeight)*(getWidth()/av.charWidth)) +" "+((x / av.getCharWidth()) + av.getStartRes()) ); y %= chunkHeight; @@ -130,7 +152,7 @@ public class SeqPanel extends JPanel } else { - res = (int) (x / av.getCharWidth()) + av.getStartRes(); + res = x / av.getCharWidth() + av.getStartRes(); seq = y / av.getCharHeight() + av.getStartSeq(); } @@ -156,7 +178,7 @@ public class SeqPanel extends JPanel editFlag = true; int x = evt.getX(); - int res = (int)(x/av.getCharWidth()) + av.getStartRes(); + int res = x/av.getCharWidth() + av.getStartRes(); if (res < 0) {res = 0;} if (res != lastres) { @@ -177,8 +199,8 @@ public class SeqPanel extends JPanel { if (!flag) { - if (!s.getSequence().substring(j,j+1).equals(av.getAlignment().getGapCharacter()) && - !s.getSequence().substring(j,j+1).equals(" ")) + if (s.getSequence().charAt(j)!=av.getAlignment().getGapCharacter() && + s.getSequence().charAt(j)==' ') { res = j+1; flag = true; @@ -266,28 +288,28 @@ public class SeqPanel extends JPanel public void insertChar(int j, int seq) { - av.getAlignment().getSequenceAt(seq).insertCharAt(j, av.getGapCharacter().charAt(0)); - updateConservation(seq); + av.getAlignment().getSequenceAt(seq).insertCharAt(j, av.getGapCharacter()); + seqEditOccurred=seq; } - public void deleteChar(int j, int res, int sno) + public void deleteChar(int j, int res, int seq) { - if (av.getAlignment().getSequenceAt(sno).getSequence().substring(j,j+1).equals(".") || - av.getAlignment().getSequenceAt(sno).getSequence().substring(j,j+1).equals("-") || - av.getAlignment().getSequenceAt(sno).getSequence().substring(j,j+1).equals(" ") ) + if (av.getAlignment().getSequenceAt(seq).getSequence().charAt(j)=='.' || + av.getAlignment().getSequenceAt(seq).getSequence().charAt(j)=='-' || + av.getAlignment().getSequenceAt(seq).getSequence().charAt(j)==' ' ) { - av.getAlignment().getSequenceAt(sno).deleteCharAt(j); + av.getAlignment().getSequenceAt(seq).deleteCharAt(j); } - updateConservation(sno); + av.getAlignment().getWidth(); repaint(); + seqEditOccurred=seq; } void updateConservation(int i) { - Alignment al = (Alignment) av.getAlignment(); SequenceGroup sg = av.alignment.findGroup( al.getSequenceAt(i)); if(sg==null || !(sg.cs instanceof ConservationColourScheme)) @@ -308,9 +330,10 @@ public class SeqPanel extends JPanel public void setColourScheme(ColourSchemeI cs, boolean showConservation) { + seqCanvas.paintFlag = true; if (av.getSelection().size() == 0) { - seqCanvas.cs = cs; + seqCanvas.globalColorScheme = cs; for (int i = 0; i < av.alignment.getGroups().size();i++) { SequenceGroup sg = (SequenceGroup)av.alignment.getGroups().elementAt(i); @@ -378,16 +401,15 @@ public class SeqPanel extends JPanel ConservationColourScheme ccs = (ConservationColourScheme)sg.cs; sg.cs = ccs.cs; } - - - } - seqCanvas.paintFlag = true; repaint(); } boolean isNewSelection(SequenceGroup sg) { + if(sg==null) + return true; + if(sg.getSize()!=av.getSelection().size()) return true; @@ -404,8 +426,65 @@ public class SeqPanel extends JPanel if(av.getSelection().size()>0) return av.alignment.findGroup((Sequence)av.sel.sequenceAt(0)).cs; else - return seqCanvas.cs; + return seqCanvas.globalColorScheme; + } + + public void doMousePressedDefineMode(MouseEvent evt) + { + int res = evt.getX()/av.getCharWidth() + av.getStartRes(); + int seq = evt.getY()/av.getCharHeight() + av.getStartSeq(); + + stretchGroup = av.alignment.findGroup((Sequence)av.getAlignment().getSequenceAt(seq)); + + if(stretchGroup!=null && stretchGroup.getEndRes()==res) + { + // Edit end res position of selected group + changeEndRes = true; + } + else if(stretchGroup!=null && stretchGroup.getStartRes()==res) + { + // Edit end res position of selected group + changeStartRes = true; + } + + + } + + boolean changeEndRes = false; + boolean changeStartRes = false; + SequenceGroup stretchGroup = null; + + public void doMouseReleasedDefineMode(MouseEvent evt) + { + changeEndRes = false; + changeStartRes = false; + } + + public void doMouseDraggedDefineMode(MouseEvent evt) + { + int res = evt.getX()/av.getCharWidth() + av.getStartRes(); + int seq = evt.getY()/av.getCharHeight() + av.getStartSeq(); + + if(resav.getEndRes()) + res = av.getEndRes(); + + if(changeEndRes) + { + if(res>stretchGroup.getStartRes()-1) + stretchGroup.setEndRes( res ); + } + else if(changeStartRes) + { + if(res