X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=8acdcc63000851657cb5f1c5cb868b390ec05358;hb=153dd62dc91da13ae732600e6ea55ddbe15eab39;hp=e32c5cfdf246cc14ef53fba7c6224ecf45e9e1c8;hpb=5e67396f7f70d20025e8112ce09f2095ebc94584;p=jalview.git diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index e32c5cf..8acdcc6 100755 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -1,20 +1,19 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) - * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) + * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * This file is part of Jalview. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Jalview. If not, see . */ package jalview.gui; @@ -612,6 +611,7 @@ public class SeqPanel extends JPanel implements MouseListener, if (av.followHighlight) { ap.scrollToPosition(results, false); + seqCanvas.revalidate(); } seqCanvas.highlightSearchResults(results); } @@ -690,7 +690,8 @@ public class SeqPanel extends JPanel implements MouseListener, int rpos; SequenceFeature[] features = findFeaturesAtRes(sequence .getDatasetSequence(), rpos = sequence.findPosition(res)); - appendFeatures(tooltipText, linkImageURL.toString(), rpos, features,this.ap.seqPanel.seqCanvas.fr.minmax); + appendFeatures(tooltipText, linkImageURL.toString(), rpos, features, + this.ap.seqPanel.seqCanvas.fr.minmax); } if (tooltipText.length() == 6) // { @@ -710,7 +711,9 @@ public class SeqPanel extends JPanel implements MouseListener, } } - private Point lastp=null; + + private Point lastp = null; + /* * (non-Javadoc) * @@ -722,15 +725,15 @@ public class SeqPanel extends JPanel implements MouseListener, int wdth = (w - x < 200) ? -(w / 2) : 5; // switch sides when tooltip is too // close to edge Point p = lastp; - if (!event.isShiftDown() || p==null) { + if (!event.isShiftDown() || p == null) + { p = (tooltipText != null && tooltipText.length() > 6) ? new Point( - event.getX() + wdth, event.getY() - 20) - : null; + event.getX() + wdth, event.getY() - 20) : null; } /* * TODO: try to modify position region is not obcured by tooltip */ - return lastp=p; + return lastp = p; } /** @@ -746,10 +749,11 @@ public class SeqPanel extends JPanel implements MouseListener, public void appendFeatures(StringBuffer tooltipText2, String linkImageURL, int rpos, SequenceFeature[] features) { - appendFeatures(tooltipText2,linkImageURL,rpos,features,null); + appendFeatures(tooltipText2, linkImageURL, rpos, features, null); } + public void appendFeatures(StringBuffer tooltipText2, String string, - int rpos, SequenceFeature[] features, Hashtable minmax) + int rpos, SequenceFeature[] features, Hashtable minmax) { String tmpString; if (features != null) @@ -840,9 +844,12 @@ public class SeqPanel extends JPanel implements MouseListener, } } // check score should be shown - if (features[i].getScore() != Float.NaN) { - float[][] rng=(minmax==null) ? null : ((float[][])minmax.get(features[i].getType())); - if (rng!=null && rng[0]!=null && rng[0][0]!=rng[0][1]) { + if (features[i].getScore() != Float.NaN) + { + float[][] rng = (minmax == null) ? null : ((float[][]) minmax + .get(features[i].getType())); + if (rng != null && rng[0] != null && rng[0][0] != rng[0][1]) + { tooltipText2.append(" Score=" + features[i].getScore()); } } @@ -1425,12 +1432,13 @@ public class SeqPanel extends JPanel implements MouseListener, public void mouseClicked(MouseEvent evt) { + SequenceGroup sg = null; SequenceI sequence = av.alignment.getSequenceAt(findSeq(evt)); if (evt.getClickCount() > 1) { - if (av.getSelectionGroup().getSize() == 1 - && av.getSelectionGroup().getEndRes() - - av.getSelectionGroup().getStartRes() < 2) + sg = av.getSelectionGroup(); + if (sg != null && sg.getSize() == 1 + && sg.getEndRes() - sg.getStartRes() < 2) { av.setSelectionGroup(null); } @@ -1627,6 +1635,8 @@ public class SeqPanel extends JPanel implements MouseListener, return; } + stretchGroup.recalcConservation(); // always do this - annotation has own + // state if (stretchGroup.cs != null) { if (stretchGroup.cs instanceof ClustalxColourScheme) @@ -1636,14 +1646,6 @@ public class SeqPanel extends JPanel implements MouseListener, .getWidth()); } - if (stretchGroup.cs instanceof Blosum62ColourScheme - || stretchGroup.cs instanceof PIDColourScheme - || stretchGroup.cs.conservationApplied() - || stretchGroup.cs.getThreshold() > 0) - { - stretchGroup.recalcConservation(); - } - if (stretchGroup.cs.conservationApplied()) { SliderPanel.setConservationSlider(ap, stretchGroup.cs, stretchGroup @@ -1654,9 +1656,9 @@ public class SeqPanel extends JPanel implements MouseListener, SliderPanel.setPIDSliderSource(ap, stretchGroup.cs, stretchGroup .getName()); } - PaintRefresher.Refresh(this, av.getSequenceSetId()); - ap.paintAlignment(true); } + PaintRefresher.Refresh(this, av.getSequenceSetId()); + ap.paintAlignment(true); changeEndRes = false; changeStartRes = false; @@ -1870,62 +1872,76 @@ public class SeqPanel extends JPanel implements MouseListener, { // TODO: fix this hack - source of messages is align viewport, but SeqPanel // handles selection messages... - if (av == source) + // TODO: extend config options to allow user to control if selections may be + // shared between viewports. + if (av == source + || !av.followSelection + || (source instanceof AlignViewport && ((AlignViewport) source) + .getSequenceSetId().equals(av.getSequenceSetId()))) { return; } // do we want to thread this ? (contention with seqsel and colsel locks, I // suspect) - boolean repaint = false; - if (av.followSelection) + // rules are: colsel is copied if there is a real intersection between sequence selection + boolean repaint = false,copycolsel=true; + if (av.selectionGroup == null || !av.isSelectionGroupChanged()) { - if (av.selectionGroup == null || !av.isSelectionGroupChanged()) + SequenceGroup sgroup = null; + if (seqsel != null) { - SequenceGroup sgroup = null; - if (seqsel != null) + if (av.alignment == null) { - if (av.alignment==null) - { - jalview.bin.Cache.log.warn("alignviewport av SeqSetId="+av.getSequenceSetId()+" ViewId="+av.getViewId()+" 's alignment is NULL! returning immediatly."); - return; - } - sgroup = seqsel.intersect(av.alignment, - (av.hasHiddenRows) ? av.hiddenRepSequences : null); + jalview.bin.Cache.log.warn("alignviewport av SeqSetId=" + + av.getSequenceSetId() + " ViewId=" + av.getViewId() + + " 's alignment is NULL! returning immediatly."); + return; } - if (sgroup != null && sgroup.getSize() > 0) + sgroup = seqsel.intersect(av.alignment, + (av.hasHiddenRows) ? av.hiddenRepSequences : null); + if ((sgroup==null || sgroup.getSize()==0) && (colsel==null || colsel.size()==0)) { - av.setSelectionGroup(sgroup); + // don't copy columns if the region didn't intersect. + copycolsel=false; } - else + } + if (sgroup != null && sgroup.getSize() > 0) + { + av.setSelectionGroup(sgroup); + } + else + { + av.setSelectionGroup(null); + } + repaint = av.isSelectionGroupChanged(); + } + if (copycolsel && (av.colSel == null || !av.isColSelChanged())) + { + // the current selection is unset or from a previous message + // so import the new colsel. + if (colsel == null || colsel.size() == 0) + { + if (av.colSel != null) { - av.setSelectionGroup(null); + av.colSel.clear(); } - repaint = av.isSelectionGroupChanged(); } - if (av.colSel == null || !av.isColSelChanged()) + else { - // the current selection is unset or from a previous message - // so import the new colsel. - if (colsel == null || colsel.size() == 0) + // TODO: shift colSel according to the intersecting sequences + if (av.colSel == null) { - if (av.colSel!=null) - { - av.colSel.clear(); - } + av.colSel = new ColumnSelection(colsel); } else { - if (av.colSel == null) - { - av.colSel = new ColumnSelection(colsel); - } else { - av.colSel.setElementsFrom(colsel); - } + av.colSel.setElementsFrom(colsel); } - repaint |= av.isColSelChanged(); } + repaint |= av.isColSelChanged(); } - if (av.hasHiddenColumns && (av.colSel==null || av.colSel.getHiddenColumns()==null)) + if (copycolsel && av.hasHiddenColumns + && (av.colSel == null || av.colSel.getHiddenColumns() == null)) { System.err.println("Bad things"); }