X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fviewmodel%2FAlignmentViewport.java;h=7145f7b2682c332c342d8e165f0dad88a3f938d5;hb=10ff37d2cb03f342ddbed679951d3e2fef0a404b;hp=1b42faf037a32f8ec693723f9c2d4c12a74abbd6;hpb=a300ed430003b3c0af3f1badee464c0f40de63a0;p=jalview.git diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index 1b42faf..7145f7b 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -37,6 +37,7 @@ import jalview.schemes.Blosum62ColourScheme; import jalview.schemes.ColourSchemeI; import jalview.schemes.PIDColourScheme; import jalview.schemes.ResidueProperties; +import jalview.util.MappingUtils; import jalview.workers.AlignCalcManager; import jalview.workers.ConsensusThread; import jalview.workers.StrucConsensusThread; @@ -44,6 +45,7 @@ import jalview.workers.StrucConsensusThread; import java.awt.Color; import java.util.ArrayList; import java.util.BitSet; +import java.util.HashMap; import java.util.Hashtable; import java.util.List; import java.util.Map; @@ -58,6 +60,12 @@ import java.util.Vector; */ public abstract class AlignmentViewport implements AlignViewportI { + /* + * A viewport that hosts the cDna view of this (protein), or vice versa (if + * set). + */ + AlignViewportI codingComplement = null; + /** * alignment displayed in the viewport. Please use get/setter */ @@ -803,7 +811,7 @@ public abstract class AlignmentViewport implements AlignViewportI protected boolean showConsensus = true; - Hashtable sequenceColours; + private Map sequenceColours = new HashMap(); /** * Property change listener for changes in alignment @@ -957,6 +965,17 @@ public abstract class AlignmentViewport implements AlignViewportI hideSequence(seqs); + AlignViewportI peer = getCodingComplement(); + if (peer != null) + { + SequenceGroup mappedGroup = MappingUtils.mapSequenceGroup( + selectionGroup, this, peer); + ((AlignmentViewport) peer).hideSequence(mappedGroup + .getSequencesInOrder(peer.getAlignment())); + peer.setSelectionGroup(null); + + } + setSelectionGroup(null); } @@ -1605,26 +1624,13 @@ public abstract class AlignmentViewport implements AlignViewportI @Override public Color getSequenceColour(SequenceI seq) { - Color sqc = Color.white; - if (sequenceColours != null) - { - sqc = (Color) sequenceColours.get(seq); - if (sqc == null) - { - sqc = Color.white; - } - } - return sqc; + Color sqc = sequenceColours.get(seq); + return (sqc == null ? Color.white : sqc); } @Override public void setSequenceColour(SequenceI seq, Color col) { - if (sequenceColours == null) - { - sequenceColours = new Hashtable(); - } - if (col == null) { sequenceColours.remove(seq); @@ -1638,10 +1644,6 @@ public abstract class AlignmentViewport implements AlignViewportI @Override public void updateSequenceIdColours() { - if (sequenceColours == null) - { - sequenceColours = new Hashtable(); - } for (SequenceGroup sg : alignment.getGroups()) { if (sg.idColour != null) @@ -1657,6 +1659,40 @@ public abstract class AlignmentViewport implements AlignViewportI @Override public void clearSequenceColours() { - sequenceColours = null; + sequenceColours.clear(); }; + + @Override + public AlignViewportI getCodingComplement() + { + return this.codingComplement; + } + + /** + * Set this as the (cDna/protein) complement of the given viewport. Also + * ensures the reverse relationship is set on the given viewport. + */ + @Override + public void setCodingComplement(AlignViewportI av) + { + if (this == av) + { + System.err.println("Ignoring recursive setCodingComplement request"); + } + else + { + this.codingComplement = av; + // avoid infinite recursion! + if (av.getCodingComplement() != this) + { + av.setCodingComplement(this); + } + } + } + + @Override + public boolean isNucleotide() + { + return getAlignment() == null ? false : getAlignment().isNucleotide(); + } }