X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignViewport.java;h=22240216cd5c1c8878bd4cce898171908c0df76e;hb=fd1c6fd67abdd50ff0d77410d3da9be66be315ce;hp=5e477c7f8cd29991a627c5fe73eae606f029b551;hpb=ed2283c5f54da377a2a2fdbdb7aec75ed7041714;p=jalview.git diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index 5e477c7..2224021 100644 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -44,6 +44,7 @@ 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; @@ -54,6 +55,7 @@ import jalview.analysis.AlignmentUtils; import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder; import jalview.analysis.NJTree; import jalview.api.AlignViewportI; +import jalview.api.FeatureRenderer; import jalview.api.ViewStyleI; import jalview.bin.Cache; import jalview.commands.CommandI; @@ -83,7 +85,7 @@ import jalview.ws.params.AutoCalcSetting; * @version $Revision: 1.141 $ */ public class AlignViewport extends AlignmentViewport implements - SelectionSource, AlignViewportI, CommandListener + SelectionSource, CommandListener { Font font; @@ -95,6 +97,9 @@ public class AlignViewport extends AlignmentViewport implements private Rectangle explodedGeometry; + private FeatureRenderer featureRenderer; + + private boolean includeHiddenRegion = true; String viewName; /* @@ -243,7 +248,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() @@ -656,35 +661,32 @@ public class AlignViewport extends AlignmentViewport implements /** * * @param pdbEntries - * @return a series of SequenceI arrays, one for each PDBEntry, listing which - * sequence in the alignment holds a reference to it + * @return an array of SequenceI arrays, one for each PDBEntry, listing which + * sequences in the alignment hold a reference to it */ public SequenceI[][] collateForPDB(PDBEntry[] pdbEntries) { - ArrayList seqvectors = new ArrayList(); + List seqvectors = new ArrayList(); for (PDBEntry pdb : pdbEntries) { - ArrayList seqs = new ArrayList(); - for (int i = 0; i < alignment.getHeight(); i++) + List seqs = new ArrayList(); + for (SequenceI sq : alignment.getSequences()) { - Vector pdbs = alignment.getSequenceAt(i).getDatasetSequence() - .getPDBId(); + Vector pdbs = sq + .getDatasetSequence().getPDBId(); if (pdbs == null) { continue; } - SequenceI sq; - for (int p = 0; p < pdbs.size(); p++) + for (PDBEntry p1 : pdbs) { - PDBEntry p1 = (PDBEntry) pdbs.elementAt(p); if (p1.getId().equals(pdb.getId())) { - if (!seqs.contains(sq = alignment.getSequenceAt(i))) + if (!seqs.contains(sq)) { seqs.add(sq); + continue; } - - continue; } } } @@ -798,16 +800,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 @@ -815,19 +824,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) @@ -851,14 +859,6 @@ public class AlignViewport extends AlignmentViewport implements final boolean openInNewWindow = (response == 2); /* - * Create the AlignFrame first (which creates the new alignment's datasets), - * before attempting sequence mapping. - */ - AlignFrame newAlignFrame = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT); - newAlignFrame.setTitle(title); - - /* * Identify protein and dna alignments. Make a copy of this one if opening * in a new split pane. */ @@ -867,6 +867,23 @@ public class AlignViewport extends AlignmentViewport implements AlignmentI protein = al.isNucleotide() ? thisAlignment : al; final AlignmentI cdna = al.isNucleotide() ? al : thisAlignment; + /* + * Map sequences. At least one should get mapped as we have already passed + * the test for 'mappability'. Any mappings made will be added to the + * protein alignment. Note creating dataset sequences on the new alignment + * is a pre-requisite for building mappings. + */ + al.setDataset(null); + AlignmentUtils.mapProteinToCdna(protein, cdna); + + /* + * Create the AlignFrame for the added alignment. Note this will include the + * cDNA consensus annotation if it is protein (because the alignment holds + * mappings to nucleotide) + */ + AlignFrame newAlignFrame = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); + newAlignFrame.setTitle(title); newAlignFrame.statusBar.setText(MessageManager.formatMessage( "label.successfully_loaded_file", new Object[] { title })); @@ -885,13 +902,6 @@ public class AlignViewport extends AlignmentViewport implements AlignFrame.DEFAULT_HEIGHT); } - /* - * Map sequences. At least one should get mapped as we have already passed - * the test for 'mappability'. Any mappings made will be added to the - * protein alignment. - */ - AlignmentUtils.mapProteinToCdna(protein, cdna); - try { newAlignFrame.setMaximum(jalview.bin.Cache.getDefault( @@ -933,7 +943,9 @@ public class AlignViewport extends AlignmentViewport implements AlignmentI complement, Set mappings) { /* - * Open in split pane. DNA sequence above, protein below. + * Make a new frame with a copy of the alignment we are adding to. If this + * is protein, the new frame will have a cDNA consensus annotation row + * added. */ AlignFrame copyMe = new AlignFrame(complement, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); @@ -951,6 +963,10 @@ public class AlignViewport extends AlignmentViewport implements proteinFrame.setVisible(true); String linkedTitle = MessageManager .getString("label.linked_view_title"); + + /* + * Open in split pane. DNA sequence above, protein below. + */ JInternalFrame splitFrame = new SplitFrame(cdnaFrame, proteinFrame); Desktop.addInternalFrame(splitFrame, linkedTitle, -1, -1); @@ -1024,4 +1040,26 @@ public class AlignViewport extends AlignmentViewport implements complementPanel.scrollToCentre(sr, seqOffset); } } + + @Override + public FeatureRenderer getFeatureRenderer() + { + return featureRenderer; + } + + @Override + public void setFeatureRenderer(FeatureRenderer featureRenderer) + { + this.featureRenderer = featureRenderer; + } + + public boolean isIncludeHiddenRegion() + { + return includeHiddenRegion; + } + + public void setIncludeHiddenRegion(boolean includeHiddenRegion) + { + this.includeHiddenRegion = includeHiddenRegion; + } }