X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FSeqPanel.java;h=e29f4e15e4c22cf389f97f2a1b3ec8ffc959ae30;hb=9a23ee1cee6a2ef0f797fd8e1a6a950e66ef6e72;hp=9c3a1e8304163cf92736e53c9a69afdfd449dda1;hpb=bf22060aa91d40c9d6f7e3c7f518b6bd0457921e;p=jalview.git diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index 9c3a1e8..e29f4e1 100755 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -28,7 +28,7 @@ import jalview.datamodel.*; import jalview.schemes.*; public class SeqPanel - extends Panel + extends Panel implements MouseMotionListener, MouseListener { public SeqCanvas seqCanvas; @@ -60,84 +60,42 @@ public class SeqPanel ap = p; - seqCanvas.addMouseMotionListener(new MouseMotionAdapter() - { - public void mouseMoved(MouseEvent evt) - { - doMouseMoved(evt); - } + seqCanvas.addMouseMotionListener(this); + seqCanvas.addMouseListener(this); - public void mouseDragged(MouseEvent evt) - { - if (editingSeqs) - { - doMouseDragged(evt); - } - else - { - doMouseDraggedDefineMode(evt); - } - } - }); - - seqCanvas.addMouseListener(new MouseAdapter() - { - public void mouseReleased(MouseEvent evt) - { - if (editingSeqs) - { - doMouseReleased(evt); - } - else - { - doMouseReleasedDefineMode(evt); - } - - } - - public void mousePressed(MouseEvent evt) - { - if (evt.isShiftDown() || evt.isAltDown() || evt.isControlDown()) - { - if (evt.isAltDown() || evt.isControlDown()) - { - groupEditing = true; - } - - editingSeqs = true; - doMousePressed(evt); - } - else - { - doMousePressedDefineMode(evt); - } - } + seqCanvas.repaint(); + } - public void mouseExited(MouseEvent evt) - { - if (editingSeqs) - { - return; - } - doMouseExitedDefineMode(evt); - } + public void mousePressed(MouseEvent evt) + { + if (evt.isShiftDown() || evt.isAltDown() || evt.isControlDown()) + { + if (evt.isAltDown() || evt.isControlDown()) + { + groupEditing = true; + } + + editingSeqs = true; + doMousePressed(evt); + } + else + { + doMousePressedDefineMode(evt); + } + } - public void mouseEntered(MouseEvent evt) - { - if (editingSeqs) - { - return; - } - doMouseEnteredDefineMode(evt); - } + public void mouseClicked(MouseEvent evt){} - }); - seqCanvas.repaint(); - } - public void doMouseReleased(MouseEvent evt) + public void mouseReleased(MouseEvent evt) { + if (!editingSeqs) + { + doMouseReleasedDefineMode(evt); + return; + } + if (seqEditOccurred > -1) { @@ -161,16 +119,26 @@ public class SeqPanel if (av.wrapAlignment) { + + int hgap = av.charHeight; + if (av.scaleAboveWrapped) + hgap += av.charHeight; + + int cHeight = av.getAlignment().getHeight() * av.charHeight + + hgap + seqCanvas.getAnnotationHeight(); + int y = evt.getY(); - y -= (2 * av.charHeight); + y -= hgap; x -= seqCanvas.LABEL_WEST; - int chunkHeight = (av.getAlignment().getHeight() + 2) * av.charHeight; - int cwidth = seqCanvas.getWrappedCanvasWidth(this.getSize().width); - wrappedBlock = y/chunkHeight; - wrappedBlock += av.getStartRes()/cwidth; - res = wrappedBlock*cwidth + x / av.getCharWidth(); + int cwidth = seqCanvas.getWrappedCanvasWidth(getSize().width); + + wrappedBlock = y / cHeight; + wrappedBlock += av.getStartRes() / cwidth; + + res = wrappedBlock * cwidth + x / av.getCharWidth(); + } else { @@ -183,14 +151,22 @@ public class SeqPanel int findSeq(MouseEvent evt) { + int seq = 0; int y = evt.getY(); if (av.wrapAlignment) { - y -= (2 * av.charHeight); - int chunkHeight = (av.getAlignment().getHeight() + 2) * av.charHeight; - seq = ( (y % chunkHeight) / av.getCharHeight()); + int hgap = av.charHeight; + if (av.scaleAboveWrapped) + hgap += av.charHeight; + + int cHeight = av.getAlignment().getHeight() * av.charHeight + + hgap + seqCanvas.getAnnotationHeight(); + + y -= hgap; + + seq = ( (y % cHeight) / av.getCharHeight()); } else { @@ -228,7 +204,7 @@ public class SeqPanel return; } - public void doMouseMoved(MouseEvent evt) + public void mouseMoved(MouseEvent evt) { int res = findRes(evt); int seq = findSeq(evt); @@ -272,39 +248,66 @@ public class SeqPanel } } - ap.alignFrame.statusBar.setText(text.toString()); - - // use aa to see if the mouse pointer is on a - if (av.showSequenceFeatures) + if(seqCanvas.pdbCanvas!=null && sequence==seqCanvas.pdbCanvas.sequence) { - Vector features = sequence.getSequenceFeatures(); - Enumeration e = features.elements(); - StringBuffer sbuffer = new StringBuffer(); + seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res)); + } - while (e.hasMoreElements()) + + // use aa to see if the mouse pointer is on a + if (av.showSequenceFeatures + && sequence.getSequenceFeatures()!=null + && av.featuresDisplayed!=null) + { + int index = 0; + sequence.getSequenceFeatures(); + boolean first = true; + while (index < sequence.getSequenceFeatures().length) { - SequenceFeature sf = (SequenceFeature) e.nextElement(); - if (sf.getStart() <= sequence.findPosition(res) && + SequenceFeature sf = sequence.getSequenceFeatures()[index]; + if (sf.getBegin() <= sequence.findPosition(res) && sf.getEnd() >= sequence.findPosition(res)) { - if (sbuffer.length() > 0) + if(!av.featuresDisplayed.containsKey(sf.getType())) + { + index++; + continue; + } + + if(first) { - sbuffer.append("; "); + text.append(" Sequence Feature:"); + first = false; } - sbuffer.append(sf.getType() + " " + sf.getDescription()); - if (sf.getStatus().length() > 0) + + text.append(" "+sf.getType()); + + if(sf.getDescription()!=null) + text.append(" "+sf.getDescription()); + + if (sf.getStatus()!=null && sf.getStatus().length() > 0) { - sbuffer.append(" (" + sf.getStatus() + ")"); + text.append(" (" + sf.getStatus() + ")"); } + text.append("; "); } + index++; + } } + ap.alignFrame.statusBar.setText(text.toString()); + } - public void doMouseDragged(MouseEvent evt) + public void mouseDragged(MouseEvent evt) { + if (!editingSeqs) + { + doMouseDraggedDefineMode(evt); + return; + } // If we're dragging we're editing int res = findRes(evt); @@ -428,7 +431,11 @@ public class SeqPanel } else { - + if(scrollThread!=null) + { + scrollThread.running = false; + scrollThread = null; + } break; } } @@ -437,18 +444,21 @@ public class SeqPanel } } + mouseDragging = true; + if (res > av.endRes || res < av.startRes) + { + mouseExited(evt); + } + + if (scrollThread != null) + scrollThread.setEvent(evt); + + endEdit = res; lastres = res; seqCanvas.repaint(); } - public void drawChars(int seqstart, int seqend, int start) - { - seqCanvas.drawPanel(seqCanvas.gg, start, av.getEndRes(), seqstart, seqend, - av.getStartRes(), av.getStartSeq(), 0); - seqCanvas.repaint(); - } - public void insertChar(int j, int seq) { av.alignment.getSequenceAt(seq).insertCharAt(j, av.getGapCharacter()); @@ -481,11 +491,20 @@ public class SeqPanel int oldSeq = -1; public void doMousePressedDefineMode(MouseEvent evt) { + if (scrollThread != null) + { + scrollThread.running = false; + scrollThread = null; + } + int res = findRes(evt); int seq = findSeq(evt); oldSeq = seq; startWrapBlock=wrappedBlock; + if(seq==-1) + return; + SequenceI sequence = (Sequence) av.getAlignment().getSequenceAt(seq); if (sequence == null || res > sequence.getLength()) @@ -586,23 +605,25 @@ public class SeqPanel public void doMouseReleasedDefineMode(MouseEvent evt) { - if(mouseDragging) - { - stretchGroup.recalcConservation(); - mouseDragging = false; - } - if (stretchGroup == null) { - return; + return; } if(stretchGroup.cs!=null) { + if (stretchGroup.cs instanceof ClustalxColourScheme) + { + ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup. + sequences, + stretchGroup.getWidth()); + } + if (stretchGroup.cs.conservationApplied()) { SliderPanel.setConservationSlider(ap, stretchGroup.cs, stretchGroup.getName()); + stretchGroup.recalcConservation(); } else { @@ -613,121 +634,143 @@ public class SeqPanel changeEndRes = false; changeStartRes = false; stretchGroup = null; - seqCanvas.repaint(); + PaintRefresher.Refresh(av.alignment); ap.repaint(); } - boolean remove = false; public void doMouseDraggedDefineMode(MouseEvent evt) { int res = findRes(evt); int y = findSeq(evt); if(wrappedBlock!=startWrapBlock) - return; + return; - if(y>=av.alignment.getHeight()) - y = av.alignment.getHeight()-1; + if (stretchGroup == null) + { + return; + } - if (stretchGroup == null) - { - return; - } + mouseDragging = true; - if (res > av.alignment.getWidth()) - { - res = av.alignment.getWidth() - 1; - } - if (stretchGroup.getEndRes() == res) - { - // Edit end res position of selected group - changeEndRes = true; - } + if(y > av.alignment.getHeight()) + { + y = av.alignment.getHeight() -1; + } - else if (stretchGroup.getStartRes() == res) - { - // Edit start res position of selected group - changeStartRes = true; - } + if(res>av.alignment.getWidth()) + res = av.alignment.getWidth()-1; - if (res < av.getStartRes()) - { - res = av.getStartRes(); - } - else if (res > av.getEndRes() && !av.getWrapAlignment()) - { - res = av.getEndRes(); - } + if (stretchGroup.getEndRes() == res) + { + // Edit end res position of selected group + changeEndRes = true; + } + else if (stretchGroup.getStartRes() == res) + { + // Edit start res position of selected group + changeStartRes = true; + } - if (changeEndRes) - { - if (res > stretchGroup.getStartRes() - 1) + if (res < 0) { - stretchGroup.setEndRes(res); + res = 0; } - } - else if (changeStartRes) - { - if (res < stretchGroup.getEndRes() + 1) + + if (changeEndRes) + { + if (res > (stretchGroup.getStartRes() - 1)) + { + stretchGroup.setEndRes(res); + } + } + else if (changeStartRes) { - stretchGroup.setStartRes(res); + if (res < (stretchGroup.getEndRes() + 1)) + { + stretchGroup.setStartRes(res); + } } - } - int dragDirection = 0; - if (y > oldSeq) - { - dragDirection = 1; - } - else if (y < oldSeq) - { - dragDirection = -1; - } + int dragDirection = 0; - while (y != oldSeq && oldSeq > 0 && y < av.alignment.getHeight()) - { - // This routine ensures we don't skip any sequences, as the - // selection is quite slow. - Sequence seq = (Sequence) av.getAlignment().getSequenceAt(oldSeq); + if (y > oldSeq) + { + dragDirection = 1; + } + else if (y < oldSeq) + { + dragDirection = -1; + } - oldSeq += dragDirection; - Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq); - if (stretchGroup.sequences.contains(nextSeq)) + while ((y != oldSeq) && (oldSeq > -1) && (y < av.alignment.getHeight())) { - stretchGroup.deleteSequence(seq, false); + // This routine ensures we don't skip any sequences, as the + // selection is quite slow. + Sequence seq = (Sequence) av.getAlignment().getSequenceAt(oldSeq); + + oldSeq += dragDirection; + + if(oldSeq<0) + break; + + Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq); + + if (stretchGroup.sequences.contains(nextSeq)) + { + stretchGroup.deleteSequence(seq, false); + } + else + { + if (seq != null) + { + stretchGroup.addSequence(seq, false); + } + + stretchGroup.addSequence(nextSeq, false); + } } - else + + if(oldSeq < 0) + oldSeq = -1; + + + if(res>av.endRes || resav.endSeq) { - if (seq != null) - { - stretchGroup.addSequence(seq, false); - } - stretchGroup.addSequence(nextSeq, false); + mouseExited(evt); + } + + if (scrollThread != null) + { + scrollThread.setEvent(evt); } + + seqCanvas.repaint(); } - oldSeq = y; - mouseDragging = true; - if (scrollThread != null) + + public void mouseEntered(MouseEvent e) { - scrollThread.setEvent(evt); - } + if (oldSeq < 0) + oldSeq = 0; - seqCanvas.repaint(); - } + if (scrollThread != null) + { + scrollThread.running = false; + scrollThread = null; + } + } - public void doMouseEnteredDefineMode(MouseEvent e) + public void mouseExited(MouseEvent e) { - if (scrollThread != null) + if (av.getWrapAlignment()) { - scrollThread.running = false; + return; } - } - public void doMouseExitedDefineMode(MouseEvent e) - { - if (mouseDragging) + if (mouseDragging && scrollThread==null) { scrollThread = new ScrollThread(); } @@ -759,6 +802,7 @@ public class SeqPanel running = true; while (running) { + if (evt != null) {