X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=fc145edc2776179d37d0ef472d6aad4caf543ef9;hb=364f1cf36d12a069be963ec0166c9170e8b6f365;hp=5438ce87ef2cd6e96ecbea76e57d3048df089059;hpb=28c2ec20b26a85cc5634238f1261a14930550594;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 5438ce8..fc145ed 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -96,6 +96,8 @@ import jalview.schemes.ZappoColourScheme; import jalview.structure.StructureSelectionManager; import jalview.util.MessageManager; import jalview.viewmodel.AlignmentViewport; +import jalview.ws.DBRefFetcher; +import jalview.ws.DBRefFetcher.FetchFinishedListenerI; import jalview.ws.SequenceFetcher; import jalview.ws.jws1.Discoverer; import jalview.ws.jws2.Jws2Discoverer; @@ -4748,7 +4750,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, break; } } - Alignment al = makeCrossReferencesAlignment( + AlignmentI al = makeCrossReferencesAlignment( alignment.getDataset(), xrefs); AlignFrame newFrame = new AlignFrame(al, DEFAULT_WIDTH, @@ -4896,31 +4898,45 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * Makes an alignment containing the given sequences; the sequences are - * added to the given alignment dataset, and the dataset is set on (shared - * by) the new alignment + * Makes an alignment containing the given sequences. If this is of the + * same type as the given dataset (nucleotide/protein), then the new + * alignment shares the same dataset, and its dataset sequences are added + * to it. Otherwise a new dataset sequence is created for the + * cross-references. * * @param dataset * @param seqs * @return */ - protected Alignment makeCrossReferencesAlignment(Alignment dataset, - Alignment seqs) + protected AlignmentI makeCrossReferencesAlignment(AlignmentI dataset, + AlignmentI seqs) { + boolean sameType = dataset.isNucleotide() == seqs.isNucleotide(); + SequenceI[] sprods = new SequenceI[seqs.getHeight()]; for (int s = 0; s < sprods.length; s++) { sprods[s] = (seqs.getSequenceAt(s)).deriveSequence(); - if (dataset.getSequences() == null - || !dataset.getSequences().contains( - sprods[s].getDatasetSequence())) + if (sameType) { - dataset.addSequence(sprods[s].getDatasetSequence()); + if (dataset.getSequences() == null + || !dataset.getSequences().contains( + sprods[s].getDatasetSequence())) + { + dataset.addSequence(sprods[s].getDatasetSequence()); + } } sprods[s].updatePDBIds(); } Alignment al = new Alignment(sprods); - al.setDataset(dataset); + if (sameType) + { + al.setDataset((Alignment) dataset); + } + else + { + al.createDatasetAlignment(); + } return al; } @@ -5567,15 +5583,23 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { new Thread(new Runnable() { - @Override public void run() { - boolean isNuclueotide = alignPanel.alignFrame.getViewport() + boolean isNucleotide = alignPanel.alignFrame.getViewport() .getAlignment().isNucleotide(); - new jalview.ws.DBRefFetcher(alignPanel.av + DBRefFetcher dbRefFetcher = new DBRefFetcher(alignPanel.av .getSequenceSelection(), alignPanel.alignFrame, null, - alignPanel.alignFrame.featureSettings, isNuclueotide) + alignPanel.alignFrame.featureSettings, isNucleotide); + dbRefFetcher.addListener(new FetchFinishedListenerI() + { + @Override + public void finished() + { + AlignFrame.this.setMenusForViewport(); + } + }); + dbRefFetcher .fetchDBRefs(false); } }).start(); @@ -5644,14 +5668,24 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void run() { - boolean isNuclueotide = alignPanel.alignFrame + boolean isNucleotide = alignPanel.alignFrame .getViewport().getAlignment() .isNucleotide(); - new jalview.ws.DBRefFetcher(alignPanel.av - .getSequenceSelection(), + DBRefFetcher dbRefFetcher = new DBRefFetcher( + alignPanel.av.getSequenceSelection(), alignPanel.alignFrame, dassource, alignPanel.alignFrame.featureSettings, - isNuclueotide).fetchDBRefs(false); + isNucleotide); + dbRefFetcher + .addListener(new FetchFinishedListenerI() + { + @Override + public void finished() + { + AlignFrame.this.setMenusForViewport(); + } + }); + dbRefFetcher.fetchDBRefs(false); } }).start(); } @@ -5684,14 +5718,24 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void run() { - boolean isNuclueotide = alignPanel.alignFrame + boolean isNucleotide = alignPanel.alignFrame .getViewport().getAlignment() .isNucleotide(); - new jalview.ws.DBRefFetcher(alignPanel.av - .getSequenceSelection(), + DBRefFetcher dbRefFetcher = new DBRefFetcher( + alignPanel.av.getSequenceSelection(), alignPanel.alignFrame, dassource, alignPanel.alignFrame.featureSettings, - isNuclueotide).fetchDBRefs(false); + isNucleotide); + dbRefFetcher + .addListener(new FetchFinishedListenerI() + { + @Override + public void finished() + { + AlignFrame.this.setMenusForViewport(); + } + }); + dbRefFetcher.fetchDBRefs(false); } }).start(); } @@ -5739,14 +5783,24 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void run() { - boolean isNuclueotide = alignPanel.alignFrame + boolean isNucleotide = alignPanel.alignFrame .getViewport().getAlignment() .isNucleotide(); - new jalview.ws.DBRefFetcher(alignPanel.av - .getSequenceSelection(), + DBRefFetcher dbRefFetcher = new DBRefFetcher( + alignPanel.av.getSequenceSelection(), alignPanel.alignFrame, dassrc, alignPanel.alignFrame.featureSettings, - isNuclueotide).fetchDBRefs(false); + isNucleotide); + dbRefFetcher + .addListener(new FetchFinishedListenerI() + { + @Override + public void finished() + { + AlignFrame.this.setMenusForViewport(); + } + }); + dbRefFetcher.fetchDBRefs(false); } }).start(); }