X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2FAlignmentViewport.java;h=6f3a2af49b835a7f5e8c4380e50d69e97504a1d0;hb=6235128370382f0fecdf3ba1cc683052c5aa11e7;hp=029280b2cb83657d8ec02f73598787d9d4652a19;hpb=59d682209891099d46b960509907c79e3fb276fe;p=jalview.git diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index 029280b..6f3a2af 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -40,7 +40,9 @@ import jalview.workers.AlignCalcManager; import jalview.workers.ConsensusThread; import jalview.workers.StrucConsensusThread; +import java.awt.Color; import java.util.ArrayList; +import java.util.BitSet; import java.util.Hashtable; import java.util.List; import java.util.Map; @@ -402,7 +404,8 @@ public abstract class AlignmentViewport implements AlignViewportI if (autoCalculateStrucConsensus && strucConsensus == null && alignment.isNucleotide() && alignment.hasRNAStructure()) { - + // secondary structure has been added - so init the consensus line + initRNAStructure(); } // see note in mantis : issue number 8585 @@ -593,6 +596,7 @@ public abstract class AlignmentViewport implements AlignViewportI * * @return null or the currently selected sequence region */ + @Override public SequenceGroup getSelectionGroup() { return selectionGroup; @@ -605,6 +609,7 @@ public abstract class AlignmentViewport implements AlignViewportI * - group holding references to sequences in this alignment view * */ + @Override public void setSelectionGroup(SequenceGroup sg) { selectionGroup = sg; @@ -780,6 +785,8 @@ public abstract class AlignmentViewport implements AlignViewportI protected boolean showConsensus = true; + Hashtable sequenceColours; + /** * Property change listener for changes in alignment * @@ -1053,6 +1060,7 @@ public abstract class AlignmentViewport implements AlignViewportI * * @return array of references to sequence objects */ + @Override public SequenceI[] getSequenceSelection() { SequenceI[] sequences = null; @@ -1075,6 +1083,7 @@ public abstract class AlignmentViewport implements AlignViewportI * * @return String[] */ + @Override public jalview.datamodel.CigarArray getViewAsCigars( boolean selectedRegionOnly) { @@ -1091,6 +1100,7 @@ public abstract class AlignmentViewport implements AlignViewportI * boolean true to just return the selected view * @return AlignmentView */ + @Override public jalview.datamodel.AlignmentView getAlignmentView( boolean selectedOnly) { @@ -1109,6 +1119,7 @@ public abstract class AlignmentViewport implements AlignViewportI * is true) * @return AlignmentView */ + @Override public jalview.datamodel.AlignmentView getAlignmentView( boolean selectedOnly, boolean markGroups) { @@ -1124,6 +1135,7 @@ public abstract class AlignmentViewport implements AlignViewportI * * @return String[] */ + @Override public String[] getViewAsString(boolean selectedRegionOnly) { String[] selection = null; @@ -1318,62 +1330,80 @@ public abstract class AlignmentViewport implements AlignViewportI { if (!alignment.isNucleotide()) { - if (showConservation) - { - if (conservation == null) - { - conservation = new AlignmentAnnotation("Conservation", - "Conservation of total alignment less than " - + getConsPercGaps() + "% gaps", - new Annotation[1], 0f, 11f, - AlignmentAnnotation.BAR_GRAPH); - conservation.hasText = true; - conservation.autoCalculated = true; - alignment.addAnnotation(conservation); - } - } - if (showQuality) - { - if (quality == null) - { - quality = new AlignmentAnnotation("Quality", - "Alignment Quality based on Blosum62 scores", - new Annotation[1], 0f, 11f, - AlignmentAnnotation.BAR_GRAPH); - quality.hasText = true; - quality.autoCalculated = true; - alignment.addAnnotation(quality); - } - } + initConservation(); + initQuality(); } else { - if (alignment.hasRNAStructure()) - { - strucConsensus = new AlignmentAnnotation("StrucConsensus", "PID", - new Annotation[1], 0f, 100f, - AlignmentAnnotation.BAR_GRAPH); - strucConsensus.hasText = true; - strucConsensus.autoCalculated = true; - } + initRNAStructure(); } + initConsensus(); + } + } - consensus = new AlignmentAnnotation("Consensus", "PID", - new Annotation[1], 0f, 100f, AlignmentAnnotation.BAR_GRAPH); - consensus.hasText = true; - consensus.autoCalculated = true; + private void initConsensus() + { - if (showConsensus) + consensus = new AlignmentAnnotation("Consensus", "PID", + new Annotation[1], 0f, 100f, AlignmentAnnotation.BAR_GRAPH); + consensus.hasText = true; + consensus.autoCalculated = true; + + if (showConsensus) + { + alignment.addAnnotation(consensus); + } + } + + private void initConservation() + { + if (showConservation) + { + if (conservation == null) { - alignment.addAnnotation(consensus); - if (strucConsensus != null) - { - alignment.addAnnotation(strucConsensus); - } + conservation = new AlignmentAnnotation("Conservation", + "Conservation of total alignment less than " + + getConsPercGaps() + "% gaps", + new Annotation[1], 0f, 11f, + AlignmentAnnotation.BAR_GRAPH); + conservation.hasText = true; + conservation.autoCalculated = true; + alignment.addAnnotation(conservation); + } + } + } + private void initQuality() + { + if (showQuality) + { + if (quality == null) + { + quality = new AlignmentAnnotation("Quality", + "Alignment Quality based on Blosum62 scores", + new Annotation[1], 0f, 11f, + AlignmentAnnotation.BAR_GRAPH); + quality.hasText = true; + quality.autoCalculated = true; + alignment.addAnnotation(quality); } } } + private void initRNAStructure() + { + if (alignment.hasRNAStructure() && strucConsensus==null) + { + strucConsensus = new AlignmentAnnotation("StrucConsensus", "PID", + new Annotation[1], 0f, 100f, + AlignmentAnnotation.BAR_GRAPH); + strucConsensus.hasText = true; + strucConsensus.autoCalculated = true; + if (showConsensus) + { + alignment.addAnnotation(strucConsensus); + } + } + } /* * (non-Javadoc) * @@ -1387,7 +1417,7 @@ public abstract class AlignmentViewport implements AlignViewportI int charHeight = getCharHeight(); if (aa != null) { - boolean graphgrp[] = null; + BitSet graphgrp = new BitSet(); for (int i = 0; i < aa.length; i++) { if (aa[i] == null) @@ -1401,17 +1431,13 @@ public abstract class AlignmentViewport implements AlignViewportI } if (aa[i].graphGroup > -1) { - if (graphgrp == null) - { - graphgrp = new boolean[aa.length]; - } - if (graphgrp[aa[i].graphGroup]) + if (graphgrp.get(aa[i].graphGroup)) { continue; } else { - graphgrp[aa[i].graphGroup] = true; + graphgrp.set(aa[i].graphGroup); } } aa[i].height = 0; @@ -1516,4 +1542,60 @@ public abstract class AlignmentViewport implements AlignViewportI oldrfs.clear(); } + @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; + } + + @Override + public void setSequenceColour(SequenceI seq, Color col) + { + if (sequenceColours == null) + { + sequenceColours = new Hashtable(); + } + + if (col == null) + { + sequenceColours.remove(seq); + } + else + { + sequenceColours.put(seq, col); + } + } + + @Override + public void updateSequenceIdColours() + { + if (sequenceColours == null) + { + sequenceColours = new Hashtable(); + } + for (SequenceGroup sg : alignment.getGroups()) + { + if (sg.idColour != null) + { + for (SequenceI s : sg.getSequences(getHiddenRepSequences())) + { + sequenceColours.put(s, sg.idColour); + } + } + } + } + + @Override + public void clearSequenceColours() + { + sequenceColours = null; + }; }