X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignViewport.java;h=c59d2014630bf36de168363024430bf127792a1a;hb=2b0142bf85bf5b3d20612c01433e7ce29b633ec4;hp=d84d3a38cb457a876edf3afef8ed1b77fd307b92;hpb=9612728299dc4c2242a6a968875a194624983920;p=jalview.git diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index d84d3a3..c59d201 100644 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -44,7 +44,6 @@ import java.awt.Font; import java.awt.Rectangle; import java.util.ArrayList; import java.util.Hashtable; -import java.util.List; import java.util.Set; import java.util.Vector; @@ -62,7 +61,6 @@ import jalview.datamodel.AlignedCodonFrame; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; import jalview.datamodel.ColumnSelection; -import jalview.datamodel.HiddenSequences; import jalview.datamodel.PDBEntry; import jalview.datamodel.SearchResults; import jalview.datamodel.Sequence; @@ -74,8 +72,6 @@ import jalview.structure.CommandListener; import jalview.structure.SelectionSource; import jalview.structure.StructureSelectionManager; import jalview.structure.VamsasSource; -import jalview.util.Comparison; -import jalview.util.MappingUtils; import jalview.util.MessageManager; import jalview.viewmodel.AlignmentViewport; import jalview.ws.params.AutoCalcSetting; @@ -89,14 +85,6 @@ import jalview.ws.params.AutoCalcSetting; public class AlignViewport extends AlignmentViewport implements SelectionSource, AlignViewportI, CommandListener { - int startRes; - - int endRes; - - int startSeq; - - int endSeq; - Font font; NJTree currentTree = null; @@ -255,7 +243,7 @@ public class AlignViewport extends AlignmentViewport implements showAutocalculatedAbove = Cache.getDefault( Preferences.SHOW_AUTOCALC_ABOVE, false); viewStyle.setScaleProteinAsCdna(Cache.getDefault( - Preferences.SCALE_PROTEIN_TO_CDNA, false)); + Preferences.SCALE_PROTEIN_TO_CDNA, true)); } void init() @@ -371,112 +359,6 @@ public class AlignViewport extends AlignmentViewport implements return sq; } - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getStartRes() - { - return startRes; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getEndRes() - { - return endRes; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getStartSeq() - { - return startSeq; - } - - /** - * DOCUMENT ME! - * - * @param res - * DOCUMENT ME! - */ - public void setStartRes(int res) - { - this.startRes = res; - } - - /** - * DOCUMENT ME! - * - * @param seq - * DOCUMENT ME! - */ - public void setStartSeq(int seq) - { - this.startSeq = seq; - } - - /** - * DOCUMENT ME! - * - * @param res - * DOCUMENT ME! - */ - public void setEndRes(int res) - { - if (res > (alignment.getWidth() - 1)) - { - // log.System.out.println(" Corrected res from " + res + " to maximum " + - // (alignment.getWidth()-1)); - res = alignment.getWidth() - 1; - } - - if (res < 0) - { - res = 0; - } - - this.endRes = res; - } - - /** - * DOCUMENT ME! - * - * @param seq - * DOCUMENT ME! - */ - public void setEndSeq(int seq) - { - if (seq > alignment.getHeight()) - { - seq = alignment.getHeight(); - } - - if (seq < 0) - { - seq = 0; - } - - this.endSeq = seq; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getEndSeq() - { - return endSeq; - } - boolean validCharWidth; /** @@ -674,21 +556,6 @@ public class AlignViewport extends AlignmentViewport implements return false; } - /** - * when set, view will scroll to show the highlighted position - */ - public boolean followHighlight = true; - - /** - * @return true if view should scroll to show the highlighted region of a - * sequence - * @return - */ - public boolean getFollowHighlight() - { - return followHighlight; - } - public boolean followSelection = true; /** @@ -931,16 +798,23 @@ public class AlignViewport extends AlignmentViewport implements // TODO: create undo object for this JAL-1101 /* - * If one alignment is protein and one nucleotide, with at least one - * sequence name in common, offer to open a linked alignment. + * If any cDNA/protein mappings can be made between the alignments, offer to + * open a linked alignment with split frame option. */ - if (AlignmentUtils.isMappable(al, getAlignment())) + if (Cache.getDefault(Preferences.ENABLE_SPLIT_FRAME, false)) { - if (openLinkedAlignment(al, title)) + if (AlignmentUtils.isMappable(al, getAlignment())) { - return; + if (openLinkedAlignment(al, title)) + { + return; + } } } + + /* + * No mappings, or offer declined - add sequences to this alignment + */ // TODO: JAL-407 regardless of above - identical sequences (based on ID and // provenance) should share the same dataset sequence @@ -948,19 +822,18 @@ public class AlignViewport extends AlignmentViewport implements { getAlignment().addSequence(al.getSequenceAt(i)); } - // TODO this call was done by SequenceFetcher but not FileLoader or - // CutAndPasteTransfer. Is it needed? - // JBPComment: this repositions the view to show the new sequences - // JBPComment: so it is needed for UX + setEndSeq(getAlignment().getHeight()); firePropertyChange("alignment", null, getAlignment().getSequences()); } /** * Show a dialog with the option to open and link (cDNA <-> protein) as a new - * alignment. Returns true if the new alignment was opened, false if not, - * because the user declined the offer. + * alignment, either as a standalone alignment or in a split frame. Returns + * true if the new alignment was opened, false if not, because the user + * declined the offer. * + * @param al * @param title */ protected boolean openLinkedAlignment(AlignmentI al, String title) @@ -1139,70 +1012,22 @@ public class AlignViewport extends AlignmentViewport implements /** * If this viewport has a (Protein/cDNA) complement, then scroll the * complementary alignment to match this one. - * - * @param horizontal - * true for horizontal scroll event, false for vertical */ - public void scrollComplementaryAlignment(boolean horizontal) + public void scrollComplementaryAlignment() { /* - * If no complement, or it is not following scrolling, do nothing. + * Populate a SearchResults object with the mapped location to scroll to. If + * there is no complement, or it is not following highlights, or no mapping + * is found, the result will be empty. */ - // TODO pull up followHighlight to AlignmentViewport/AlignViewportI - final AlignViewport codingComplement = (AlignViewport) getCodingComplement(); - if (codingComplement == null || !codingComplement.followHighlight) + SearchResults sr = new SearchResults(); + int seqOffset = findComplementScrollTarget(sr); + if (!sr.isEmpty()) { - return; - } - boolean iAmProtein = !getAlignment().isNucleotide(); - AlignmentI proteinAlignment = iAmProtein ? getAlignment() - : codingComplement.getAlignment(); - if (proteinAlignment == null) - { - return; - } - final Set mappings = proteinAlignment - .getCodonFrames(); - - /* - * Heuristic: find the first mapped sequence (if any) with a non-gapped - * residue in the middle column of the visible region. Scroll the - * complementary alignment to line up the corresponding residue. - */ - int seqOffset = 0; - SequenceI sequence = null; - int middleColumn = getStartRes() + (getEndRes() - getStartRes()) / 2; - final HiddenSequences hiddenSequences = getAlignment() - .getHiddenSequences(); - for (int seqNo = getStartSeq(); seqNo < getEndSeq(); seqNo++, seqOffset++) - { - sequence = getAlignment().getSequenceAt(seqNo); - if (hiddenSequences != null && hiddenSequences.isHidden(sequence)) - { - continue; - } - if (Comparison.isGap(sequence.getCharAt(middleColumn))) - { - continue; - } - List seqMappings = MappingUtils - .findMappingsForSequence(sequence, mappings); - if (!seqMappings.isEmpty()) - { - break; - } - } - - if (sequence == null) - { - /* - * No ungapped mapped sequence in middle column - do nothing - */ - return; + // TODO would like next line without cast but needs more refactoring... + final AlignmentPanel complementPanel = ((AlignViewport) getCodingComplement()).getAlignPanel(); + complementPanel.setFollowingComplementScroll(true); + complementPanel.scrollToCentre(sr, seqOffset); } - SearchResults sr = MappingUtils.buildSearchResults(sequence, - sequence.findPosition(middleColumn), mappings); - codingComplement.getAlignPanel().scrollAsComplement(sr, seqOffset, - horizontal); } }