X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=50ece221a6af5cfece8ad67436a8b3e5a3fb2f8a;hb=c42398f840e2a6709c5ccc45f84de2a12011c90a;hp=98eab66ed1b61d0ff1df423bfeabff3111e1e333;hpb=d423f22792e47dbc800ae220a58677f988971d06;p=jalview.git diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java old mode 100755 new mode 100644 index 98eab66..50ece22 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -1,5 +1,5 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * * This file is part of Jalview. @@ -33,7 +33,7 @@ import jalview.structure.*; * DOCUMENT ME! * * @author $author$ - * @version $Revision$ + * @version $Revision: 1.130 $ */ public class SeqPanel extends JPanel implements MouseListener, MouseMotionListener, MouseWheelListener, SequenceListener, @@ -123,7 +123,7 @@ public class SeqPanel extends JPanel implements MouseListener, addMouseMotionListener(this); addMouseListener(this); addMouseWheelListener(this); - ssm = StructureSelectionManager.getStructureSelectionManager(); + ssm = StructureSelectionManager.getStructureSelectionManager(Desktop.instance); ssm.addStructureViewerListener(this); ssm.addSelectionListener(this); } @@ -168,6 +168,11 @@ public class SeqPanel extends JPanel implements MouseListener, } else { + if (x>seqCanvas.getWidth()+seqCanvas.getWidth()) + { + // make sure we calculate relative to visible alignment, rather than right-hand gutter + x = seqCanvas.getX()+seqCanvas.getWidth(); + } res = (x / av.getCharWidth()) + av.getStartRes(); } @@ -198,8 +203,8 @@ public class SeqPanel extends JPanel implements MouseListener, y -= hgap; - seq = Math.min((y % cHeight) / av.getCharHeight(), av.alignment - .getHeight() - 1); + seq = Math.min((y % cHeight) / av.getCharHeight(), + av.alignment.getHeight() - 1); } else { @@ -601,7 +606,7 @@ public class SeqPanel extends JPanel implements MouseListener, if (lastMessage == null || !lastMessage.equals(tmp)) { // System.err.println("mouseOver Sequence: "+tmp); - ssm.mouseOverSequence(sequence, index, pos); + ssm.mouseOverSequence(sequence, index, pos, av); } lastMessage = tmp; } @@ -610,7 +615,10 @@ public class SeqPanel extends JPanel implements MouseListener, { if (av.followHighlight) { - ap.scrollToPosition(results, false); + if (ap.scrollToPosition(results, false)) + { + seqCanvas.revalidate(); + } } seqCanvas.highlightSearchResults(results); } @@ -687,8 +695,9 @@ public class SeqPanel extends JPanel implements MouseListener, if (av.showSequenceFeatures) { int rpos; - SequenceFeature[] features = findFeaturesAtRes(sequence - .getDatasetSequence(), rpos = sequence.findPosition(res)); + SequenceFeature[] features = findFeaturesAtRes( + sequence.getDatasetSequence(), + rpos = sequence.findPosition(res)); appendFeatures(tooltipText, linkImageURL.toString(), rpos, features, this.ap.seqPanel.seqCanvas.fr.minmax); } @@ -936,8 +945,7 @@ public class SeqPanel extends JPanel implements MouseListener, // Which is bigger, left-right or up-down? if (Math.abs(evt.getY() - lastMousePress.getY()) > Math.abs(evt - .getX() - - lastMousePress.getX())) + .getX() - lastMousePress.getX())) { int fontSize = av.font.getSize(); @@ -955,9 +963,7 @@ public class SeqPanel extends JPanel implements MouseListener, fontSize = 1; } - av - .setFont(new Font(av.font.getName(), av.font.getStyle(), - fontSize)); + av.setFont(new Font(av.font.getName(), av.font.getStyle(), fontSize)); av.charWidth = oldWidth; ap.fontChanged(); } @@ -1442,14 +1448,15 @@ public class SeqPanel extends JPanel implements MouseListener, av.setSelectionGroup(null); } - SequenceFeature[] features = findFeaturesAtRes(sequence - .getDatasetSequence(), sequence.findPosition(findRes(evt))); + SequenceFeature[] features = findFeaturesAtRes( + sequence.getDatasetSequence(), + sequence.findPosition(findRes(evt))); if (features != null && features.length > 0) { SearchResults highlight = new SearchResults(); - highlight.addResult(sequence, features[0].getBegin(), features[0] - .getEnd()); + highlight.addResult(sequence, features[0].getBegin(), + features[0].getEnd()); seqCanvas.highlightSearchResults(highlight); } if (features != null && features.length > 0) @@ -1553,8 +1560,8 @@ public class SeqPanel extends JPanel implements MouseListener, if (javax.swing.SwingUtilities.isRightMouseButton(evt)) { - SequenceFeature[] allFeatures = findFeaturesAtRes(sequence - .getDatasetSequence(), sequence.findPosition(res)); + SequenceFeature[] allFeatures = findFeaturesAtRes( + sequence.getDatasetSequence(), sequence.findPosition(res)); Vector links = new Vector(); for (int i = 0; i < allFeatures.length; i++) { @@ -1640,20 +1647,20 @@ public class SeqPanel extends JPanel implements MouseListener, { if (stretchGroup.cs instanceof ClustalxColourScheme) { - ((ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup - .getSequences(av.hiddenRepSequences), stretchGroup - .getWidth()); + ((ClustalxColourScheme) stretchGroup.cs).resetClustalX( + stretchGroup.getSequences(av.hiddenRepSequences), + stretchGroup.getWidth()); } if (stretchGroup.cs.conservationApplied()) { - SliderPanel.setConservationSlider(ap, stretchGroup.cs, stretchGroup - .getName()); + SliderPanel.setConservationSlider(ap, stretchGroup.cs, + stretchGroup.getName()); } else { - SliderPanel.setPIDSliderSource(ap, stretchGroup.cs, stretchGroup - .getName()); + SliderPanel.setPIDSliderSource(ap, stretchGroup.cs, + stretchGroup.getName()); } } PaintRefresher.Refresh(this, av.getSequenceSetId()); @@ -1875,6 +1882,7 @@ public class SeqPanel extends JPanel implements MouseListener, // shared between viewports. if (av == source || !av.followSelection + || (av.isSelectionGroupChanged(false) || av.isColSelChanged(false)) || (source instanceof AlignViewport && ((AlignViewport) source) .getSequenceSetId().equals(av.getSequenceSetId()))) { @@ -1882,11 +1890,13 @@ public class SeqPanel extends JPanel implements MouseListener, } // do we want to thread this ? (contention with seqsel and colsel locks, I // suspect) - boolean repaint = false; - if (av.selectionGroup == null || !av.isSelectionGroupChanged()) + // rules are: colsel is copied if there is a real intersection between + // sequence selection + boolean repaint = false, copycolsel = true; + // if (!av.isSelectionGroupChanged(false)) { SequenceGroup sgroup = null; - if (seqsel != null) + if (seqsel != null && seqsel.getSize()>0) { if (av.alignment == null) { @@ -1897,6 +1907,12 @@ public class SeqPanel extends JPanel implements MouseListener, } sgroup = seqsel.intersect(av.alignment, (av.hasHiddenRows) ? av.hiddenRepSequences : null); + if ((sgroup == null || sgroup.getSize() == 0) + || (colsel == null || colsel.size() == 0)) + { + // don't copy columns if the region didn't intersect. + copycolsel = false; + } } if (sgroup != null && sgroup.getSize() > 0) { @@ -1906,9 +1922,10 @@ public class SeqPanel extends JPanel implements MouseListener, { av.setSelectionGroup(null); } - repaint = av.isSelectionGroupChanged(); + av.isSelectionGroupChanged(true); + repaint = true; } - if (av.colSel == null || !av.isColSelChanged()) + if (copycolsel) { // the current selection is unset or from a previous message // so import the new colsel. @@ -1917,10 +1934,12 @@ public class SeqPanel extends JPanel implements MouseListener, if (av.colSel != null) { av.colSel.clear(); + repaint=true; } } else { + // TODO: shift colSel according to the intersecting sequences if (av.colSel == null) { av.colSel = new ColumnSelection(colsel); @@ -1930,9 +1949,10 @@ public class SeqPanel extends JPanel implements MouseListener, av.colSel.setElementsFrom(colsel); } } - repaint |= av.isColSelChanged(); + av.isColSelChanged(true); + repaint = true; } - if (av.hasHiddenColumns + if (copycolsel && av.hasHiddenColumns && (av.colSel == null || av.colSel.getHiddenColumns() == null)) { System.err.println("Bad things");