X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FSeqPanel.java;h=daff328cc57240ad7e34403a2af103c31f561c70;hb=1858fc1b685034eb94cf3793ad9a4203816134d6;hp=1720edc66d3a989120e2d1b052ea0ff31aac0006;hpb=588042b69abf8e60bcc950b24c283933c7dd422f;p=jalview.git diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index 1720edc..daff328 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,100 +60,42 @@ public class SeqPanel ap = p; - seqCanvas.addMouseMotionListener(new MouseMotionAdapter() - { - public void mouseMoved(MouseEvent evt) - { - if (av.getWrapAlignment()) - { - return; - } - doMouseMoved(evt); - } + seqCanvas.addMouseMotionListener(this); + seqCanvas.addMouseListener(this); - public void mouseDragged(MouseEvent evt) - { - if (av.getWrapAlignment()) - { - return; - } - if (editingSeqs) - { - doMouseDragged(evt); - } - else - { - doMouseDraggedDefineMode(evt); - } - } - }); - - seqCanvas.addMouseListener(new MouseAdapter() - { - public void mouseReleased(MouseEvent evt) - { - if (av.getWrapAlignment()) - { - return; - } - if (editingSeqs) - { - doMouseReleased(evt); - } - else - { - doMouseReleasedDefineMode(evt); - } - - } - - public void mousePressed(MouseEvent evt) - { - if (av.getWrapAlignment()) - { - return; - } - if (evt.isShiftDown() || evt.isAltDown() || evt.isControlDown()) - { - if (evt.isAltDown() || evt.isControlDown()) - { - groupEditing = true; - } + seqCanvas.repaint(); + } - editingSeqs = true; - doMousePressed(evt); - } - else - { - doMousePressedDefineMode(evt); - } - } - public void mouseExited(MouseEvent evt) - { - if (av.getWrapAlignment() || 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 (av.getWrapAlignment() || 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) { @@ -168,18 +110,80 @@ public class SeqPanel ap.repaint(); } + int startWrapBlock=-1; + int wrappedBlock=-1; + int findRes(MouseEvent evt) + { + int res = 0; + int x = evt.getX(); + + 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 -= hgap; + x -= seqCanvas.LABEL_WEST; + + + int cwidth = seqCanvas.getWrappedCanvasWidth(getSize().width); + + wrappedBlock = y / cHeight; + wrappedBlock += av.getStartRes() / cwidth; + + res = wrappedBlock * cwidth + x / av.getCharWidth(); + + } + else + { + res = (x / av.getCharWidth()) + av.getStartRes(); + } + + return res; + + } + + int findSeq(MouseEvent evt) + { + + int seq = 0; + int y = evt.getY(); + + if (av.wrapAlignment) + { + 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 + { + seq = (y / av.getCharHeight()) + av.getStartSeq(); + } + + return seq; + } + + public void doMousePressed(MouseEvent evt) { ap.alignFrame.addHistoryItem(new HistoryItem( "Edit Sequence", av.alignment, HistoryItem.EDIT)); - int seq; - int res; - int x = evt.getX(); - int y = evt.getY(); - - res = x / av.getCharWidth() + av.getStartRes(); - seq = y / av.getCharHeight() + av.getStartSeq(); + int seq = findSeq(evt); + int res = findRes(evt); if (seq < av.getAlignment().getHeight() && res < av.getAlignment().getSequenceAt(seq).getLength()) @@ -200,30 +204,12 @@ public class SeqPanel return; } - public void doMouseMoved(MouseEvent evt) + public void mouseMoved(MouseEvent evt) { - int res = 0, seq = 0; - int x = evt.getX(); - int y = evt.getY(); - if (av.wrapAlignment) - { - y -= 2 * av.charHeight; - int chunkHeight = (av.getAlignment().getHeight() + 2) * av.charHeight; - - res = (int) ( (y / chunkHeight) * (getSize().width / av.charWidth)) + - x / av.getCharWidth() + av.getStartRes(); - - y %= chunkHeight; - seq = y / av.getCharHeight() + av.getStartSeq(); - - } - else - { - res = x / av.getCharWidth() + av.getStartRes(); - seq = y / av.getCharHeight() + av.getStartSeq(); - } + int res = findRes(evt); + int seq = findSeq(evt); - if (seq >= av.getAlignment().getHeight()) + if (seq >= av.getAlignment().getHeight() || seq<0 || res<0) { return; } @@ -234,57 +220,95 @@ public class SeqPanel return; } - Object obj = ResidueProperties.aa2Triplet.get(sequence.getCharAt(res) + ""); - String aa = ""; + StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " + + sequence.getName()); + + Object obj = null; + if (av.alignment.isNucleotide()) + { + obj = ResidueProperties.nucleotideName.get(sequence.getCharAt(res) + + ""); + if(obj!=null) + text.append(" Nucleotide: "); + } + else + { + obj = ResidueProperties.aa2Triplet.get(sequence.getCharAt(res) + ""); + if(obj!=null) + text.append(" Residue: "); + } + if (obj != null) { - aa = obj.toString(); + + if (obj != "") + { + text.append(obj + " (" + + av.getAlignment().getSequenceAt(seq).findPosition(res) + ")"); + } } - StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " + - sequence.getName()); - if (aa != "") + if(seqCanvas.pdbCanvas!=null && sequence==seqCanvas.pdbCanvas.sequence) { - text.append(" Residue: " + aa + " (" + - av.getAlignment().getSequenceAt(seq).findPosition(res) + ")"); + seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res)); } - ap.alignFrame.statusBar.setText(text.toString()); // use aa to see if the mouse pointer is on a - if (av.showSequenceFeatures) + if (av.showSequenceFeatures && sequence.getSequenceFeatures()!=null) { - Vector features = sequence.getSequenceFeatures(); - Enumeration e = features.elements(); - StringBuffer sbuffer = new StringBuffer(); - - while (e.hasMoreElements()) + 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 = evt.getX() / av.getCharWidth() + av.getStartRes(); + int res = findRes(evt); if (res < 0) { res = 0; @@ -421,8 +445,7 @@ public class SeqPanel public void drawChars(int seqstart, int seqend, int start) { - seqCanvas.drawPanel(seqCanvas.gg, start, av.getEndRes(), seqstart, seqend, - av.getStartRes(), av.getStartSeq(), 0); + seqCanvas.drawPanel(seqCanvas.gg, start, av.getEndRes(), seqstart, seqend, 0); seqCanvas.repaint(); } @@ -445,42 +468,11 @@ public class SeqPanel { if (endEdit == startEdit) { - ap.alignFrame.historyList.pop(); - ap.alignFrame.updateEditMenuBar(); - } - - av.updateConservation(); - av.updateConsensus(); - - // Y O Y CLUSTALX - ColourSchemeI cs = av.getGlobalColourScheme(); - if (cs instanceof ConservationColourScheme) - { - ConservationColourScheme ccs = (ConservationColourScheme) cs; - if (ccs.cs instanceof ClustalxColourScheme) - { - jalview.analysis.Conservation c = new jalview.analysis.Conservation - ("All", - ResidueProperties.propHash, 3, - av.alignment.getSequences(), 0, - av.alignment.getWidth() - 1); - c.calculate(); - c.verdict(false, av.ConsPercGaps); - - ClustalxColourScheme cxs = (ClustalxColourScheme) ccs.cs; - cxs.resetClustalX(av.alignment.getSequences(), av.alignment.getWidth()); - ccs = new ConservationColourScheme(c, cxs); - av.setGlobalColourScheme(ccs); - } - } - - if (cs instanceof ClustalxColourScheme) - { - ( (ClustalxColourScheme) cs).resetClustalX(av.alignment.getSequences(), - av.alignment.getWidth()); - av.setGlobalColourScheme(cs); + ap.alignFrame.historyList.pop(); + ap.alignFrame.updateEditMenuBar(); } + av.firePropertyChange("alignment", null,av.getAlignment().getSequences()); } ////////////////////////////////////////// @@ -489,9 +481,13 @@ public class SeqPanel int oldSeq = -1; public void doMousePressedDefineMode(MouseEvent evt) { - int res = evt.getX() / av.getCharWidth() + av.getStartRes(); - int seq = evt.getY() / av.getCharHeight() + av.getStartSeq(); + int res = findRes(evt); + int seq = findSeq(evt); oldSeq = seq; + startWrapBlock=wrappedBlock; + + if(seq==-1) + return; SequenceI sequence = (Sequence) av.getAlignment().getSequenceAt(seq); @@ -545,7 +541,7 @@ public class SeqPanel SequenceGroup sg = new SequenceGroup(); sg.setStartRes(res); sg.setEndRes(res); - sg.addSequence(sequence); + sg.addSequence(sequence, false); av.setSelectionGroup(sg); stretchGroup = sg; @@ -566,7 +562,7 @@ public class SeqPanel else if ( (evt.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) { - APopupMenu popup = new APopupMenu(ap, null); + APopupMenu popup = new APopupMenu(ap, null, null); this.add(popup); popup.show(this, evt.getX(), evt.getY()); } @@ -593,50 +589,48 @@ public class SeqPanel public void doMouseReleasedDefineMode(MouseEvent evt) { - mouseDragging = false; + if(mouseDragging) + { + stretchGroup.recalcConservation(); + mouseDragging = false; + } if (stretchGroup == null) { return; } - if (stretchGroup.cs instanceof ClustalxColourScheme) - { - stretchGroup.cs = new ClustalxColourScheme(stretchGroup.sequences, - av.alignment.getWidth()); - seqCanvas.repaint(); - } - - else if (stretchGroup.cs instanceof ConservationColourScheme) + if(stretchGroup.cs!=null) { - ConservationColourScheme ccs = (ConservationColourScheme) stretchGroup.cs; - stretchGroup.cs = ccs; - SliderPanel.setConservationSlider(ap, stretchGroup.cs, - stretchGroup.getName()); - - seqCanvas.repaint(); - } - else - { - if (stretchGroup.cs != null) + if (stretchGroup.cs.conservationApplied()) + { + SliderPanel.setConservationSlider(ap, stretchGroup.cs, + stretchGroup.getName()); + } + else { SliderPanel.setPIDSliderSource(ap, stretchGroup.cs, stretchGroup.getName()); } - } - changeEndRes = false; changeStartRes = false; stretchGroup = null; + seqCanvas.repaint(); ap.repaint(); } boolean remove = false; public void doMouseDraggedDefineMode(MouseEvent evt) { - int res = evt.getX() / av.getCharWidth() + av.getStartRes(); - int y = evt.getY() / av.getCharHeight() + av.getStartSeq(); + int res = findRes(evt); + int y = findSeq(evt); + + if(wrappedBlock!=startWrapBlock) + return; + + if(y>=av.alignment.getHeight()) + y = av.alignment.getHeight()-1; if (stretchGroup == null) { @@ -664,7 +658,7 @@ public class SeqPanel { res = av.getStartRes(); } - else if (res > av.getEndRes()) + else if (res > av.getEndRes() && !av.getWrapAlignment()) { res = av.getEndRes(); } @@ -705,16 +699,15 @@ public class SeqPanel if (stretchGroup.sequences.contains(nextSeq)) { - stretchGroup.deleteSequence(seq); - stretchGroup.deleteSequence(nextSeq); + stretchGroup.deleteSequence(seq, false); } else { if (seq != null) { - stretchGroup.addSequence(seq); + stretchGroup.addSequence(seq, false); } - stretchGroup.addSequence(nextSeq); + stretchGroup.addSequence(nextSeq, false); } } oldSeq = y; @@ -727,26 +720,20 @@ public class SeqPanel seqCanvas.repaint(); } - public void doMouseEnteredDefineMode(MouseEvent e) + public void mouseEntered(MouseEvent e) { - if (scrollThread != null) + if (editingSeqs && scrollThread != null) { scrollThread.running = false; } } - public void doMouseExitedDefineMode(MouseEvent e) + public void mouseExited(MouseEvent e) { - if (av.getWrapAlignment()) - { - return; - } - if (mouseDragging) { scrollThread = new ScrollThread(); } - } // this class allows scrolling off the bottom of the visible alignment