X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=3209960d6f183e9a9901884df259378a40a9f61a;hb=e21fb8306a9efaf170d7354daa10e7ee42d37c17;hp=db120e1e585db8c434d2fdadf6866500d3d48623;hpb=efc31b4a8d5cee63555586804a2b79c06bdb5a14;p=jalview.git diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index db120e1..3209960 100755 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -18,8 +18,6 @@ */ package jalview.gui; -import jalview.analysis.*; - import jalview.datamodel.*; import jalview.schemes.*; @@ -69,6 +67,8 @@ public class SeqPanel extends JPanel SequenceGroup stretchGroup = null; boolean remove = false; + boolean mouseWheelPressed = false; + /** * Creates a new SeqPanel object. * @@ -89,101 +89,199 @@ public class SeqPanel extends JPanel ap = p; + addMouseMotionListener(new MouseMotionAdapter() { public void mouseMoved(MouseEvent evt) { - if (av.getWrapAlignment()) + doMouseMoved(evt); + if (editingSeqs) { - return; + // This is because MacOSX creates a mouseMoved + // If control is down + if(!av.isDataset()) + doMouseDragged(evt); } - - doMouseMoved(evt); } public void mouseDragged(MouseEvent evt) { - if (av.getWrapAlignment()) - { - return; - } - if (editingSeqs) { + if(!av.isDataset()) doMouseDragged(evt); } else { + if(!av.isDataset()) doMouseDraggedDefineMode(evt); } } }); - addMouseListener(new MouseAdapter() - { - public void mouseReleased(MouseEvent evt) - { - if (av.getWrapAlignment()) - { - return; - } + addMouseWheelListener(new MouseWheelListener() + { + public void mouseWheelMoved(MouseWheelEvent e) + { + + if (mouseWheelPressed) + { + Font font = av.getFont(); + int fontSize = font.getSize(); + if (e.getWheelRotation() > 0 && fontSize < 51) + fontSize++; + else if (fontSize > 1) + fontSize--; + + av.setFont(new Font(font.getName(), font.getStyle(), fontSize)); + ap.fontChanged(); + } + else + { + if (e.getWheelRotation() > 0) + ap.scrollUp(false); + else + ap.scrollUp(true); + } + + } + }); + + + if(!av.isDataset()) + { + addMouseListener(new MouseAdapter() + { + public void mouseReleased(MouseEvent evt) + { + mouseWheelPressed = false; + + if (editingSeqs) + { + doMouseReleased(evt); + } + else + { + doMouseReleasedDefineMode(evt); + } + } + + public void mousePressed(MouseEvent evt) + { + if (javax.swing.SwingUtilities.isMiddleMouseButton(evt)) + { + mouseWheelPressed = true; + return; + } + + if (evt.isShiftDown() || evt.isAltDown() || + evt.isControlDown()) + { + if (evt.isAltDown() || evt.isControlDown()) + { + groupEditing = true; + + } + + editingSeqs = true; + doMousePressed(evt); + } + else + { + doMousePressedDefineMode(evt); + } + } + + public void mouseExited(MouseEvent evt) + { + if (editingSeqs) + { + return; + } + + doMouseExitedDefineMode(evt); + } + + public void mouseEntered(MouseEvent evt) + { + if (editingSeqs) + { + return; + } + + doMouseEnteredDefineMode(evt); + } + }); + } + } - if (editingSeqs) - { - doMouseReleased(evt); - } - else - { - doMouseReleasedDefineMode(evt); - } - } + int startWrapBlock=-1; + int wrappedBlock=-1; + int findRes(MouseEvent evt) + { + int res = 0; + int x = evt.getX(); - public void mousePressed(MouseEvent evt) - { - if (av.getWrapAlignment()) - { - return; - } + if (av.wrapAlignment) + { - if (evt.isShiftDown() || evt.isAltDown() || - evt.isControlDown()) - { - if (evt.isAltDown() || evt.isControlDown()) - { - groupEditing = true; - } + int hgap = av.charHeight; + if (av.scaleAboveWrapped) + hgap += av.charHeight; - editingSeqs = true; - doMousePressed(evt); - } - else - { - doMousePressedDefineMode(evt); - } - } + int cHeight = av.getAlignment().getHeight() * av.charHeight + + hgap + seqCanvas.getAnnotationHeight(); - public void mouseExited(MouseEvent evt) - { - if (av.getWrapAlignment() || editingSeqs) - { - return; - } + int y = evt.getY(); + y -= hgap; + x -= seqCanvas.LABEL_WEST; - doMouseExitedDefineMode(evt); - } - public void mouseEntered(MouseEvent evt) - { - if (av.getWrapAlignment() || editingSeqs) - { - return; - } + int cwidth = seqCanvas.getWrappedCanvasWidth(this.getWidth()); - doMouseEnteredDefineMode(evt); - } - }); + 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; + } + + /** * DOCUMENT ME! * @@ -212,17 +310,14 @@ public class SeqPanel extends JPanel */ public void doMousePressed(MouseEvent evt) { - ap.alignFrame.addHistoryItem(new HistoryItem("Edit Sequence", - av.alignment, HistoryItem.EDIT)); + ap.alignFrame.addHistoryItem(new HistoryItem("Edit Sequence", + av.alignment, HistoryItem.EDIT)); - int seq; - int res; + int seq = findSeq(evt); + int res = findRes(evt); - int x = evt.getX(); - int y = evt.getY(); - - res = (x / av.getCharWidth()) + av.getStartRes(); - seq = (y / av.getCharHeight()) + av.getStartSeq(); + if(seq<0 || res<0) + return; if ((seq < av.getAlignment().getHeight()) && (res < av.getAlignment().getSequenceAt(seq).getLength())) @@ -249,57 +344,51 @@ public class SeqPanel extends JPanel */ public void doMouseMoved(MouseEvent evt) { - int res = 0; - int seq = 0; - int x = evt.getX(); - int y = evt.getY(); + int res = findRes(evt); + int seq = findSeq(evt); - if (av.wrapAlignment) - { - y -= (2 * av.charHeight); + if(res<0 || seq<0 || seq >= av.getAlignment().getHeight()) + return; - int chunkHeight = (av.getAlignment().getHeight() + 2) * av.charHeight; + SequenceI sequence = av.getAlignment().getSequenceAt(seq); - res = (int) ((y / chunkHeight) * (getWidth() / av.charWidth)) + - (x / av.getCharWidth()) + av.getStartRes(); + if (res > sequence.getLength()) + { + return; + } - y %= chunkHeight; - seq = (y / av.getCharHeight()) + av.getStartSeq(); - } - else - { - res = (x / av.getCharWidth()) + av.getStartRes(); - seq = (y / av.getCharHeight()) + av.getStartSeq(); - } + if(seqCanvas.pdbCanvas!=null && sequence==seqCanvas.pdbCanvas.sequence) + { + seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res)); + } - if (seq >= av.getAlignment().getHeight()) - { - return; - } - SequenceI sequence = av.getAlignment().getSequenceAt(seq); + StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " + + sequence.getName()); - if (res > sequence.getLength()) + Object obj = null; + if (av.alignment.isNucleotide()) { - return; + obj = ResidueProperties.nucleotideName.get(sequence.getCharAt(res) + + ""); + if(obj!=null) + text.append(" Nucleotide: "); } - - Object obj = ResidueProperties.aa2Triplet.get(sequence.getCharAt(res) + - ""); - String aa = ""; - - if (obj != null) + else { - aa = obj.toString(); + obj = ResidueProperties.aa2Triplet.get(sequence.getCharAt(res) + ""); + if(obj!=null) + text.append(" Residue: "); } - StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " + - sequence.getName()); - - if (aa != "") + if (obj != null) { - text.append(" Residue: " + aa + " (" + - av.getAlignment().getSequenceAt(seq).findPosition(res) + ")"); + + if (obj != "") + { + text.append( obj + " (" + + av.getAlignment().getSequenceAt(seq).findPosition(res) + ")"); + } } ap.alignFrame.statusBar.setText(text.toString()); @@ -307,32 +396,54 @@ public class SeqPanel extends JPanel // use aa to see if the mouse pointer is on a if (av.showSequenceFeatures) { - Vector features = sequence.getSequenceFeatures(); - Enumeration e = features.elements(); - StringBuffer sbuffer = new StringBuffer(); - - while (e.hasMoreElements()) + Vector features = sequence.getDatasetSequence().getSequenceFeatures(); + if(features!=null) { - SequenceFeature sf = (SequenceFeature) e.nextElement(); + StringBuffer sbuffer = new StringBuffer(""); + + for (int i = 0; i < features.size(); i++) + { + SequenceFeature sf = (SequenceFeature) features.elementAt(i); - if ((sf.getStart() <= sequence.findPosition(res)) && - (sf.getEnd() >= sequence.findPosition(res))) + if ( (sf.getBegin() <= sequence.findPosition(res)) && + (sf.getEnd() >= sequence.findPosition(res))) { - if (sbuffer.length() > 0) + if (sf.getType().equals("disulfide bond")) + { + if (sf.getBegin() == sequence.findPosition(res) + || sf.getEnd() == sequence.findPosition(res)) { - sbuffer.append("; "); + if (sbuffer.length() > 6) + sbuffer.append("
"); + sbuffer.append("disulfide bond " + sf.getBegin() + ":" + + sf.getEnd()); } - - sbuffer.append(sf.getType() + " " + sf.getDescription()); - - if (sf.getStatus().length() > 0) + } + else + { + if (sbuffer.length() > 6) + sbuffer.append("
"); + sbuffer.append(sf.getType()); + if (sf.getDescription() != null) + sbuffer.append(" " + sf.getDescription()); + + if (sf.getStatus() != null) { - sbuffer.append(" (" + sf.getStatus() + ")"); + sbuffer.append(" (" + sf.getStatus() + ")"); } + } } - } - this.setToolTipText(sbuffer.toString()); + } + + sbuffer.append(""); + if(sbuffer.length()==13) // + setToolTipText(""); + else + setToolTipText(sbuffer.toString()); + } + else + setToolTipText(""); } } @@ -344,7 +455,7 @@ public class SeqPanel extends JPanel public void doMouseDragged(MouseEvent evt) { // If we're dragging we're editing - int res = (evt.getX() / av.getCharWidth()) + av.getStartRes(); + int res = findRes(evt); if (res < 0) { @@ -536,53 +647,14 @@ public class SeqPanel extends JPanel */ void editOccurred(int i) { - if (endEdit == startEdit) - { - ap.alignFrame.historyList.pop(); - ap.alignFrame.updateEditMenuBar(); - } - - av.updateConservation(); - av.updateConsensus(); - - // Y O Y CLUSTALX - ColourSchemeI cs = av.getGlobalColourScheme(); - - if (av.getSelectionGroup() != null) - { - av.getSelectionGroup().recalcConservation(); - } + if (endEdit == startEdit) + { + ap.alignFrame.historyList.pop(); + ap.alignFrame.updateEditMenuBar(); + } - if (cs instanceof ConservationColourScheme) - { - ConservationColourScheme ccs = (ConservationColourScheme) cs; - Conservation c = new Conservation("All", - ResidueProperties.propHash, 3, av.alignment.getSequences(), - 0, av.alignment.getWidth() - 1); - c.calculate(); - c.verdict(false, av.ConsPercGaps); - - if (ccs.cs instanceof ClustalxColourScheme) - { - ClustalxColourScheme cxs = (ClustalxColourScheme) ccs.cs; - cxs.resetClustalX(av.alignment.getSequences(), - av.alignment.getWidth()); - ccs = new ConservationColourScheme(c, cxs); - av.setGlobalColourScheme(ccs); - } - else - { - ccs = new ConservationColourScheme(c, ccs.cs); - av.setGlobalColourScheme(ccs); - } - } + av.firePropertyChange("alignment", null,av.getAlignment().getSequences()); - if (cs instanceof ClustalxColourScheme) - { - ((ClustalxColourScheme) cs).resetClustalX(av.alignment.getSequences(), - av.alignment.getWidth()); - av.setGlobalColourScheme(cs); - } } /** @@ -592,9 +664,24 @@ public class SeqPanel extends JPanel */ public void doMousePressedDefineMode(MouseEvent evt) { - int res = (evt.getX() / av.getCharWidth()) + av.getStartRes(); - int seq = (evt.getY() / av.getCharHeight()) + av.getStartSeq(); - oldSeq = seq; + int res = findRes(evt); + int seq = findSeq(evt); + oldSeq = seq; + + startWrapBlock=wrappedBlock; + + if(av.wrapAlignment && seq>av.alignment.getHeight()) + { + JOptionPane.showInternalMessageDialog(Desktop.desktop, + "Cannot edit annotations in wrapped view.", + "Wrapped view - no edit", + JOptionPane.WARNING_MESSAGE); + return; + } + + if(seq<0 || res<0) + return; + SequenceI sequence = (Sequence) av.getAlignment().getSequenceAt(seq); @@ -707,25 +794,26 @@ public class SeqPanel extends JPanel return; } - if (stretchGroup.cs instanceof ClustalxColourScheme) + if(stretchGroup.cs!=null) { - ((ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup.sequences, + if (stretchGroup.cs instanceof ClustalxColourScheme) + { + ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup. + sequences, stretchGroup.getWidth()); - } + } - if (stretchGroup.cs instanceof ConservationColourScheme) - { - ConservationColourScheme ccs = (ConservationColourScheme) stretchGroup.cs; - stretchGroup.cs = ccs; + if (stretchGroup.cs.conservationApplied()) + { SliderPanel.setConservationSlider(ap, stretchGroup.cs, - stretchGroup.getName()); - } - else - { + stretchGroup.getName()); + } + else + { SliderPanel.setPIDSliderSource(ap, stretchGroup.cs, - stretchGroup.getName()); + stretchGroup.getName()); + } } - changeEndRes = false; changeStartRes = false; stretchGroup = null; @@ -739,11 +827,14 @@ public class SeqPanel extends JPanel */ 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 (stretchGroup == null) - { + if(wrappedBlock!=startWrapBlock) + return; + + if (stretchGroup == null) + { return; } @@ -767,7 +858,7 @@ public class SeqPanel extends JPanel { res = av.getStartRes(); } - else if (res > av.getEndRes()) + else if (res > av.getEndRes() && !av.getWrapAlignment()) { res = av.getEndRes(); } @@ -918,7 +1009,7 @@ public class SeqPanel extends JPanel try { - Thread.sleep(75); + Thread.sleep(20); } catch (Exception ex) {